From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from lists.gentoo.org (pigeon.gentoo.org [208.92.234.80]) by finch.gentoo.org (Postfix) with ESMTP id 795FC1381F3 for ; Sat, 10 Nov 2012 20:02:20 +0000 (UTC) Received: from pigeon.gentoo.org (localhost [127.0.0.1]) by pigeon.gentoo.org (Postfix) with SMTP id E8D1C21C038; Sat, 10 Nov 2012 20:02:12 +0000 (UTC) Received: from smtp.gentoo.org (smtp.gentoo.org [140.211.166.183]) (using TLSv1 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by pigeon.gentoo.org (Postfix) with ESMTPS id 543E121C038 for ; Sat, 10 Nov 2012 20:02:12 +0000 (UTC) Received: from hornbill.gentoo.org (hornbill.gentoo.org [94.100.119.163]) (using TLSv1 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by smtp.gentoo.org (Postfix) with ESMTPS id 1A59E33D961 for ; Sat, 10 Nov 2012 20:02:11 +0000 (UTC) Received: from localhost.localdomain (localhost [127.0.0.1]) by hornbill.gentoo.org (Postfix) with ESMTP id 73691E5436 for ; Sat, 10 Nov 2012 20:02:09 +0000 (UTC) From: "Anthony G. Basile" To: gentoo-commits@lists.gentoo.org Content-Transfer-Encoding: 8bit Content-type: text/plain; charset=UTF-8 Reply-To: gentoo-dev@lists.gentoo.org, "Anthony G. Basile" Message-ID: <1352577586.2c94229b496315346c90ed0f90c497cb9b75b88e.blueness@gentoo> Subject: [gentoo-commits] proj/elfix:master commit in: src/, / X-VCS-Repository: proj/elfix X-VCS-Files: configure.ac src/paxctl-ng.c X-VCS-Directories: src/ / X-VCS-Committer: blueness X-VCS-Committer-Name: Anthony G. Basile X-VCS-Revision: 2c94229b496315346c90ed0f90c497cb9b75b88e X-VCS-Branch: master Date: Sat, 10 Nov 2012 20:02:09 +0000 (UTC) Precedence: bulk List-Post: List-Help: List-Unsubscribe: List-Subscribe: List-Id: Gentoo Linux mail X-BeenThere: gentoo-commits@lists.gentoo.org X-Archives-Salt: af699e26-a6a4-4dbd-b1bb-c0d1c63ee284 X-Archives-Hash: c31da1fd82d05fbb4f72c4bb2a7ef323 commit: 2c94229b496315346c90ed0f90c497cb9b75b88e Author: Anthony G. Basile gentoo org> AuthorDate: Sat Nov 10 19:59:46 2012 +0000 Commit: Anthony G. Basile gentoo org> CommitDate: Sat Nov 10 19:59:46 2012 +0000 URL: http://git.overlays.gentoo.org/gitweb/?p=proj/elfix.git;a=commit;h=2c94229b configure.ac, src/paxctl-ng.c: improve checks and propagate defines configure.ac: always check for gelf.h and libelf since fix-gnustack needs it. src/paxctl-ng.c: add the defines for all possibilities of enable or disable ptpax and xtpax --- configure.ac | 22 ++++++++---------- src/paxctl-ng.c | 66 +++++++++++++++++++++++++++++++++++++++++++----------- 2 files changed, 62 insertions(+), 26 deletions(-) diff --git a/configure.ac b/configure.ac index bfbe367..3e22d45 100644 --- a/configure.ac +++ b/configure.ac @@ -25,7 +25,7 @@ AC_PROG_SED # Checks for header files. AC_CHECK_HEADERS( - [errno.h error.h fcntl.h libgen.h stdio.h stdlib.h string.h \ + [errno.h error.h fcntl.h gelf.h libgen.h stdio.h stdlib.h string.h \ sys/mman.h sys/stat.h sys/types.h unistd.h], [], [AC_MSG_ERROR(["Missing necessary header"])] @@ -43,6 +43,15 @@ AC_FUNC_FORK AC_FUNC_MMAP AC_CHECK_FUNCS([memset strerror]) +# Note: this is always needed for fix-gnustack +# and for paxctl-ng only with --enable-ptpax +AC_CHECK_LIB( + [elf], + [elf_begin], + [], + [AC_MSG_ERROR(["Missing necessary function elf_begin in libelf"])] +) + AC_ARG_ENABLE( [ptpax], AS_HELP_STRING( @@ -54,23 +63,12 @@ AC_ARG_ENABLE( AS_IF( [test "x$enable_ptpax" != "xno"], [ - AC_CHECK_HEADERS( - [gelf.h], - [], - [AC_MSG_ERROR(["Missing necessary gelf.h"])] - ) AC_CHECK_DECLS( [PT_PAX_FLAGS, PF_PAGEEXEC, PF_MPROTECT, PF_RANDMMAP], [], [AC_MSG_ERROR(["Missing necessary function elf_begin in libelf"])], [[#include ]] ) - AC_CHECK_LIB( - [elf], - [elf_begin], - [], - [AC_MSG_ERROR(["Missing necessary function elf_begin in libelf"])] - ) CFLAGS+=" -DPTPAX" ], [ diff --git a/src/paxctl-ng.c b/src/paxctl-ng.c index d1bddda..e0e6035 100644 --- a/src/paxctl-ng.c +++ b/src/paxctl-ng.c @@ -29,6 +29,17 @@ #ifdef PTPAX #include +#else + #define PF_PAGEEXEC (1 << 4) /* Enable PAGEEXEC */ + #define PF_NOPAGEEXEC (1 << 5) /* Disable PAGEEXEC */ + #define PF_SEGMEXEC (1 << 6) /* Enable SEGMEXEC */ + #define PF_NOSEGMEXEC (1 << 7) /* Disable SEGMEXEC */ + #define PF_MPROTECT (1 << 8) /* Enable MPROTECT */ + #define PF_NOMPROTECT (1 << 9) /* Disable MPROTECT */ + #define PF_EMUTRAMP (1 << 12) /* Enable EMUTRAMP */ + #define PF_NOEMUTRAMP (1 << 13) /* Disable EMUTRAMP */ + #define PF_RANDMMAP (1 << 14) /* Enable RANDMMAP */ + #define PF_NORANDMMAP (1 << 15) /* Disable RANDMMAP */ #endif #ifdef XTPAX @@ -108,18 +119,19 @@ parse_cmd_args(int argc, char *argv[], uint16_t *pax_flags, int *verbose, int *c *verbose = 0; *cp_flags = 0; -/* -#if !defined(PTPAX) && defined(XTPAX) - while((oc = getopt(argc, argv,":PpSsMmEeRrZzCcvh")) != -1) -#elif defined(PTPAX) && defined(XTPAX) - while((oc = getopt(argc, argv,":PpSsMmEeRrZzCcFfvh")) != -1) -#else - while((oc = getopt(argc, argv,":PpSsMmEeRrZzvh")) != -1) -#endif -*/ - - //Accept all options and silently ignore irrelevant ones below - //so we can pass any parameter in scripts + /* Accept all options and silently ignore irrelevant ones below. + * We can then pass any parameter in scripts without failure. + * + * Alternatively we could do + * + * #if !defined(PTPAX) && defined(XTPAX) + * while((oc = getopt(argc, argv,":PpSsMmEeRrZzCcvh")) != -1) + * #elif defined(PTPAX) && defined(XTPAX) + * while((oc = getopt(argc, argv,":PpSsMmEeRrZzCcFfvh")) != -1) + * #else + * while((oc = getopt(argc, argv,":PpSsMmEeRrZzvh")) != -1) + * #endif + */ while((oc = getopt(argc, argv,":PpSsMmEeRrZzCcFfvh")) != -1) { @@ -185,6 +197,10 @@ parse_cmd_args(int argc, char *argv[], uint16_t *pax_flags, int *verbose, int *c solitaire += 1; *cp_flags = CREATE_XT_FLAGS_DEFAULT; break; +#else + case 'C': + case 'c': + break; #endif #if defined(PTPAX) && defined(XTPAX) case 'F': @@ -195,6 +211,10 @@ parse_cmd_args(int argc, char *argv[], uint16_t *pax_flags, int *verbose, int *c solitaire += 1; *cp_flags = COPY_XT_TO_PT_FLAGS; break; +#else + case 'F': + case 'f': + break; #endif case 'v': *verbose = 1; @@ -208,10 +228,14 @@ parse_cmd_args(int argc, char *argv[], uint16_t *pax_flags, int *verbose, int *c } } - if( ((compat == 1 && solitaire == 0) || + if( + ( + (compat == 1 && solitaire == 0) || (compat == 0 && solitaire == 1) || (compat == 0 && solitaire == 0 && *verbose == 1) - ) && argv[optind] != NULL) + ) + && argv[optind] != NULL + ) { *begin = optind; *end = argc; @@ -221,6 +245,7 @@ parse_cmd_args(int argc, char *argv[], uint16_t *pax_flags, int *verbose, int *c } +#ifdef PTPAX uint16_t get_pt_flags(int fd, int verbose) { @@ -271,6 +296,7 @@ get_pt_flags(int fd, int verbose) elf_end(elf); return pt_flags; } +#endif #ifdef XTPAX @@ -350,6 +376,7 @@ print_flags(int fd, int verbose) uint16_t flags; char buf[FLAGS_SIZE]; +#ifdef PTPAX flags = get_pt_flags(fd, verbose); if( flags == UINT16_MAX ) printf("\tPT_PAX: not found\n"); @@ -359,6 +386,7 @@ print_flags(int fd, int verbose) bin2string(flags, buf); printf("\tPT_PAX: %s\n", buf); } +#endif #ifdef XTPAX flags = get_xt_flags(fd); @@ -467,6 +495,7 @@ update_flags(uint16_t flags, uint16_t pax_flags) } +#ifdef PTPAX void set_pt_flags(int fd, uint16_t pt_flags, int verbose) { @@ -524,6 +553,7 @@ set_pt_flags(int fd, uint16_t pt_flags, int verbose) elf_end(elf); } +#endif #ifdef XTPAX @@ -544,6 +574,7 @@ set_flags(int fd, uint16_t *pax_flags, int rdwr_pt_pax, int verbose) { uint16_t flags; +#ifdef PTPAX if(rdwr_pt_pax) { flags = get_pt_flags(fd, verbose); @@ -552,6 +583,7 @@ set_flags(int fd, uint16_t *pax_flags, int rdwr_pt_pax, int verbose) flags = update_flags( flags, *pax_flags); set_pt_flags(fd, flags, verbose); } +#endif #ifdef XTPAX flags = get_xt_flags(fd); @@ -580,8 +612,10 @@ create_xt_flags(int fd, int cp_flags) bin2string(xt_flags, buf); fsetxattr(fd, PAX_NAMESPACE, buf, strlen(buf), XATTR_CREATE); } +#endif +#if defined(PTPAX) && defined(XTPAX) void copy_xt_flags(int fd, int cp_flags, int verbose) { @@ -617,6 +651,7 @@ main( int argc, char *argv[]) if(verbose) printf("%s:\n", argv[fi]); +#ifdef PTPAX if((fd = open(argv[fi], O_RDWR)) < 0) { rdwr_pt_pax = 0; @@ -629,11 +664,14 @@ main( int argc, char *argv[]) continue; } } +#endif #ifdef XTPAX if(cp_flags == CREATE_XT_FLAGS_SECURE || cp_flags == CREATE_XT_FLAGS_DEFAULT) create_xt_flags(fd, cp_flags); +#endif +#if defined(PTPAX) && defined(XTPAX) if(cp_flags == COPY_PT_TO_XT_FLAGS || (cp_flags == COPY_XT_TO_PT_FLAGS && rdwr_pt_pax)) copy_xt_flags(fd, cp_flags, verbose); #endif