diff options
author | Anthony G. Basile <basile@opensource.dyc.edu> | 2011-04-13 14:38:35 -0400 |
---|---|---|
committer | Anthony G. Basile <basile@opensource.dyc.edu> | 2011-04-13 14:38:49 -0400 |
commit | 1c1fc39e1b0669869b21cca782d6fc1228fdcc7e (patch) | |
tree | c45ce092d1848e63f119b38ba45631eca2c715c8 | |
parent | Added: fix-gnustack.c to clear X flag on .gnu.stack (diff) | |
download | elfix-1c1fc39e1b0669869b21cca782d6fc1228fdcc7e.tar.gz elfix-1c1fc39e1b0669869b21cca782d6fc1228fdcc7e.tar.bz2 elfix-1c1fc39e1b0669869b21cca782d6fc1228fdcc7e.zip |
fix-gnustack.c: fixed bug not skipping over !GNU_STACK headers
-rw-r--r-- | fix-gnustack.c | 28 |
1 files changed, 14 insertions, 14 deletions
diff --git a/fix-gnustack.c b/fix-gnustack.c index edc0a3c..8ddb28c 100644 --- a/fix-gnustack.c +++ b/fix-gnustack.c @@ -52,21 +52,21 @@ int main( int argc, char *argv[]) if( phdr.p_flags & PF_W ) printf("W"); if( phdr.p_flags & PF_X ) printf("X"); printf("\n"); - } - if((phdr.p_flags & PF_W) && (phdr.p_flags & PF_X)) - { - printf("W&X found, flipping X flag ...\n"); - nflags = phdr.p_flags ^ PF_X; - printf("oflags=%u PF_X=%d nflags=%u\n", phdr.p_flags, PF_X, nflags); - - if(elf_update(elf, ELF_C_NULL ) < 0) - error (EXIT_FAILURE, "elf_update(ELF_C_NULL) failed: %s." , elf_errmsg(-1)); - phdr.p_flags = nflags ; - if(elf_flagphdr(elf, ELF_C_SET, ELF_F_DIRTY) == NULL) - error(EXIT_FAILURE, 0, "gelf_flagphdr() fail: %s", elf_errmsg(-1)); - if(elf_update(elf, ELF_C_WRITE) < 0) - error (EXIT_FAILURE, "elf_update(ELF_C_WRITE) failed: %s." , elf_errmsg(-1)); + if((phdr.p_flags & PF_W) && (phdr.p_flags & PF_X)) + { + printf("W&X found, flipping X flag ...\n"); + nflags = phdr.p_flags ^ PF_X; + printf("oflags=%u PF_X=%d nflags=%u\n", phdr.p_flags, PF_X, nflags); + + if(elf_update(elf, ELF_C_NULL ) < 0) + error (EXIT_FAILURE, "elf_update(ELF_C_NULL) failed: %s." , elf_errmsg(-1)); + phdr.p_flags = nflags ; + if(elf_flagphdr(elf, ELF_C_SET, ELF_F_DIRTY) == NULL) + error(EXIT_FAILURE, 0, "gelf_flagphdr() fail: %s", elf_errmsg(-1)); + if(elf_update(elf, ELF_C_WRITE) < 0) + error (EXIT_FAILURE, "elf_update(ELF_C_WRITE) failed: %s." , elf_errmsg(-1)); + } } } |