diff options
author | 2012-11-10 17:54:12 -0500 | |
---|---|---|
committer | 2012-11-10 17:54:12 -0500 | |
commit | f5f0ad31ab6158c6609530a6d12b25ab3f9462ea (patch) | |
tree | 893124ed2503598ebedd34523e8f243dff4ca0f9 /src | |
parent | src/paxctl-ng.c: properly hand -L and -l in opts (diff) | |
download | elfix-f5f0ad31ab6158c6609530a6d12b25ab3f9462ea.tar.gz elfix-f5f0ad31ab6158c6609530a6d12b25ab3f9462ea.tar.bz2 elfix-f5f0ad31ab6158c6609530a6d12b25ab3f9462ea.zip |
src/paxctl-ng.c, doc/paxctl-ng.{pod,1}: delete XT_PAX xattr field
Diffstat (limited to 'src')
-rw-r--r-- | src/paxctl-ng.c | 33 |
1 files changed, 23 insertions, 10 deletions
diff --git a/src/paxctl-ng.c b/src/paxctl-ng.c index 7cde4f5..00a4b83 100644 --- a/src/paxctl-ng.c +++ b/src/paxctl-ng.c @@ -47,13 +47,14 @@ #define PAX_NAMESPACE "user.pax.flags" #define CREATE_XT_FLAGS_SECURE 1 #define CREATE_XT_FLAGS_DEFAULT 2 + #define DELETE_XT_FLAGS 3 #endif #if defined(PTPAX) && defined(XTPAX) - #define COPY_PT_TO_XT_FLAGS 3 - #define COPY_XT_TO_PT_FLAGS 4 - #define LIMIT_TO_PT_FLAGS 5 - #define LIMIT_TO_XT_FLAGS 6 + #define COPY_PT_TO_XT_FLAGS 4 + #define COPY_XT_TO_PT_FLAGS 5 + #define LIMIT_TO_PT_FLAGS 6 + #define LIMIT_TO_XT_FLAGS 7 #endif #define FLAGS_SIZE 6 @@ -71,7 +72,7 @@ print_help_exit(char *v) "Description : Get or set pax flags on an ELF object\n\n" "Usage : %s -PpSsMmEeRrv ELF | -Zv ELF | -zv ELF\n" #ifdef XTPAX - " : %s -Cv ELF | -cv ELF\n" + " : %s -Cv ELF | -cv ELF | -dv ELF\n" #endif #if defined(PTPAX) && defined(XTPAX) " : %s -Fv ELF | -fv ELF\n" @@ -142,7 +143,7 @@ parse_cmd_args(int argc, char *argv[], uint16_t *pax_flags, int *verbose, int *c * #endif */ - while((oc = getopt(argc, argv,":PpSsMmEeRrZzCcFfLlvh")) != -1) + while((oc = getopt(argc, argv,":PpSsMmEeRrZzCcdFfLlvh")) != -1) { switch(oc) { @@ -206,6 +207,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; + case 'd': + solitaire += 1; + *cp_flags = DELETE_XT_FLAGS; + break; #else case 'C': case 'c': @@ -634,16 +639,22 @@ create_xt_flags(int fd, int cp_flags) char buf[FLAGS_SIZE]; uint16_t xt_flags; - if(cp_flags == 1) + if(cp_flags == CREATE_XT_FLAGS_SECURE) xt_flags = PF_PAGEEXEC | PF_SEGMEXEC | PF_MPROTECT | PF_NOEMUTRAMP | PF_RANDMMAP ; - else if(cp_flags == 2) + else if(cp_flags == CREATE_XT_FLAGS_DEFAULT) xt_flags = 0; memset(buf, 0, FLAGS_SIZE); bin2string(xt_flags, buf); fsetxattr(fd, PAX_NAMESPACE, buf, strlen(buf), XATTR_CREATE); } + +void +delete_xt_flags(int fd) +{ + fremovexattr(fd, PAX_NAMESPACE); +} #endif @@ -652,13 +663,13 @@ void copy_xt_flags(int fd, int cp_flags, int verbose) { uint16_t flags; - if(cp_flags == 3) + if(cp_flags == COPY_PT_TO_XT_FLAGS) { flags = get_pt_flags(fd, verbose); if( flags != UINT16_MAX ) set_xt_flags(fd, flags); } - else if(cp_flags == 4) + else if(cp_flags == COPY_XT_TO_PT_FLAGS) { flags = get_xt_flags(fd); if( flags != UINT16_MAX ) @@ -701,6 +712,8 @@ main( int argc, char *argv[]) #ifdef XTPAX if(cp_flags == CREATE_XT_FLAGS_SECURE || cp_flags == CREATE_XT_FLAGS_DEFAULT) create_xt_flags(fd, cp_flags); + if(cp_flags == DELETE_XT_FLAGS) + delete_xt_flags(fd); #endif #if defined(PTPAX) && defined(XTPAX) |