Gentoo Archives: gentoo-commits

From: "Anthony G. Basile" <blueness@g.o>
To: gentoo-commits@l.g.o
Subject: [gentoo-commits] proj/elfix:master commit in: poc/
Date: Thu, 05 May 2011 22:24:14
Message-Id: d068777db733ceef935d88c94473b641fa262cf2.blueness@gentoo
1 commit: d068777db733ceef935d88c94473b641fa262cf2
2 Author: Anthony G. Basile <basile <AT> opensource <DOT> dyc <DOT> edu>
3 AuthorDate: Thu May 5 22:23:57 2011 +0000
4 Commit: Anthony G. Basile <blueness <AT> gentoo <DOT> org>
5 CommitDate: Thu May 5 22:23:57 2011 +0000
6 URL: http://git.overlays.gentoo.org/gitweb/?p=proj/elfix.git;a=commit;h=d068777d
7
8 poc/mangle-paxflags.c: print out PT_PAX_FLAGS if found
9
10 ---
11 poc/mangle-paxflags.c | 30 ++++++++++++++++++++----------
12 1 files changed, 20 insertions(+), 10 deletions(-)
13
14 diff --git a/poc/mangle-paxflags.c b/poc/mangle-paxflags.c
15 index 76fe56b..8853b13 100644
16 --- a/poc/mangle-paxflags.c
17 +++ b/poc/mangle-paxflags.c
18 @@ -38,7 +38,7 @@
19 #define HF_PAX_SEGMEXEC 32 // 0: Segmentation based non-exec pages
20
21
22 -#define PRINT(E,F,I) printf("%s: %s\n", #E, E & F ? ( I ? "enabled" : "disabled" ) : ( I ? "disabled" : "enabled" ) );
23 +#define PRINT(E,F,I) printf("%s:\t%s\n", #E, E & F ? ( I ? "enabled" : "disabled" ) : ( I ? "disabled" : "enabled" ) );
24 #define CASE(N,P) case P: printf("%d: %s\n", (int)N, #P); break
25
26
27 @@ -74,8 +74,7 @@ int
28 main( int argc, char *argv[])
29 {
30 int fd;
31 - int flag_ei_pax, flag_pt_pax_flags;
32 - int found_ei_pax, found_pt_pax_flags;
33 + int flag_ei_pax, flag_pt_pax_flags, found_ei_pax;
34 char *f_name;
35 size_t i, phnum;
36
37 @@ -130,7 +129,6 @@ main( int argc, char *argv[])
38 }
39
40 printf("==== PHRDs ====\n") ;
41 - found_pt_pax_flags = 0 ;
42 elf_getphdrnum(elf, &phnum);
43 for(i=0; i<phnum; ++i)
44 {
45 @@ -162,19 +160,31 @@ main( int argc, char *argv[])
46 CASE(i,PT_HIPROC);
47 }
48
49 + if(phdr.p_type == PT_PAX_FLAGS)
50 + {
51 + PRINT(PF_PAGEEXEC, phdr.p_flags, 1);
52 + PRINT(PF_NOPAGEEXEC, phdr.p_flags, 1);
53 + PRINT(PF_SEGMEXEC, phdr.p_flags, 1);
54 + PRINT(PF_NOSEGMEXEC, phdr.p_flags, 1);
55 + PRINT(PF_MPROTECT, phdr.p_flags, 1);
56 + PRINT(PF_NOMPROTECT, phdr.p_flags, 1);
57 + PRINT(PF_RANDEXEC, phdr.p_flags, 1);
58 + PRINT(PF_NORANDEXEC, phdr.p_flags, 1);
59 + PRINT(PF_EMUTRAMP, phdr.p_flags, 1);
60 + PRINT(PF_NOEMUTRAMP, phdr.p_flags, 1);
61 + PRINT(PF_RANDMMAP, phdr.p_flags, 1);
62 + PRINT(PF_NORANDMMAP, phdr.p_flags, 1);
63 + }
64 +
65 if((phdr.p_type == PT_PAX_FLAGS) && flag_pt_pax_flags )
66 {
67 - found_pt_pax_flags = 1 ;
68 + printf("CONVERTED -> PT_NULL\n\n");
69 phdr.p_type = PT_NULL;
70 if(!gelf_update_phdr(elf, i, &phdr))
71 error(EXIT_FAILURE, 0, "gelf_update_phdr(): %s", elf_errmsg(elf_errno()));
72 }
73 }
74 -
75 - if( found_pt_pax_flags )
76 - printf("Setting PT_PAX_FLAGS to PT_NULL\n\n");
77 - else
78 - printf("\n\n");
79 + printf("\n\n");
80
81 elf_end(elf);
82 close(fd);