From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from pigeon.gentoo.org ([208.92.234.80] helo=lists.gentoo.org) by finch.gentoo.org with esmtp (Exim 4.60) (envelope-from ) id 1R2auj-0005Mw-95 for garchives@archives.gentoo.org; Sun, 11 Sep 2011 03:41:01 +0000 Received: from pigeon.gentoo.org (localhost [127.0.0.1]) by pigeon.gentoo.org (Postfix) with SMTP id B8EEE21C064; Sun, 11 Sep 2011 03:40:53 +0000 (UTC) Received: from smtp.gentoo.org (smtp.gentoo.org [140.211.166.183]) by pigeon.gentoo.org (Postfix) with ESMTP id 4A82721C064 for ; Sun, 11 Sep 2011 03:40:53 +0000 (UTC) Received: from pelican.gentoo.org (unknown [66.219.59.40]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by smtp.gentoo.org (Postfix) with ESMTPS id ACDEB1B4010 for ; Sun, 11 Sep 2011 03:40:52 +0000 (UTC) Received: from localhost.localdomain (localhost [127.0.0.1]) by pelican.gentoo.org (Postfix) with ESMTP id C5E9D80042 for ; Sun, 11 Sep 2011 03:40:51 +0000 (UTC) From: "Anthony G. Basile" To: gentoo-commits@lists.gentoo.org Content-type: text/plain; charset=UTF-8 Reply-To: gentoo-dev@lists.gentoo.org, "Anthony G. Basile" Message-ID: <657823f4a515099433694e8a1aad7f9f2a107c23.blueness@gentoo> Subject: [gentoo-commits] proj/elfix:master commit in: src/ X-VCS-Repository: proj/elfix X-VCS-Files: src/paxctl-ng.c X-VCS-Directories: src/ X-VCS-Committer: blueness X-VCS-Committer-Name: Anthony G. Basile X-VCS-Revision: 657823f4a515099433694e8a1aad7f9f2a107c23 Date: Sun, 11 Sep 2011 03:40:51 +0000 (UTC) Precedence: bulk List-Post: List-Help: List-Unsubscribe: List-Subscribe: List-Id: Gentoo Linux mail X-BeenThere: gentoo-commits@lists.gentoo.org Content-Transfer-Encoding: quoted-printable X-Archives-Salt: X-Archives-Hash: cfede2c7d37a98671c503e2e67c27bfa commit: 657823f4a515099433694e8a1aad7f9f2a107c23 Author: Anthony G. Basile gentoo org> AuthorDate: Sun Sep 11 03:40:44 2011 +0000 Commit: Anthony G. Basile gentoo org> CommitDate: Sun Sep 11 03:40:44 2011 +0000 URL: http://git.overlays.gentoo.org/gitweb/?p=3Dproj/elfix.git;a=3D= commit;h=3D657823f4 src/paxctl-ng.c: enable+disable flag means default setting --- src/paxctl-ng.c | 129 ++++++++++++++++++++++++++++---------------------= ------ 1 files changed, 66 insertions(+), 63 deletions(-) diff --git a/src/paxctl-ng.c b/src/paxctl-ng.c index 361e9a7..cbb4084 100644 --- a/src/paxctl-ng.c +++ b/src/paxctl-ng.c @@ -51,16 +51,17 @@ print_help(char *v) "Bug Reports : " PACKAGE_BUGREPORT "\n" "Program Name : %s\n" "Description : Get or set pax flags on an ELF object\n\n" - "Usage : %s [-{Pp}{Ee}{Mm}{Rr}{Xx}{Ss}v ELF] | [-Z ELF] | [-z E= LF] | [-h]\n\n" - "options : -P Enable PAGEEXEC\tor\t-p disable PAGEEXEC\n" - " : -E Enable EMUTRAMP\tor\t-e disable EMUTRAMP\n" - " : -M Enable MPROTECT\tor\t-m disable MPROTECT\n" - " : -R Enable RANDMMAP\tor\t-r disable RANDMMAP\n" - " : -X Enable RANDEXEC\tor\t-x disable RANDEXEC\n" - " : -S Enable SEGMEXEC\tor\t-s disable SEGMEXEC\n" - " : -Z Default most secure\tor\t-z Default least secure\n" + "Usage : %s [-PpEeMmRrXxSsv ELF] | [-Z ELF] | [-z ELF] | [-h]\n= \n" + "Options : -P enable PAGEEXEC\t-p disable PAGEEXEC\n" + " : -E enable EMUTRAMP\t-e disable EMUTRAMP\n" + " : -M enable MPROTECT\t-m disable MPROTECT\n" + " : -R enable RANDMMAP\t-r disable RANDMMAP\n" + " : -X enable RANDEXEC\t-x disable RANDEXEC\n" + " : -S enable SEGMEXEC\t-s disable SEGMEXEC\n" + " : -Z most secure settings\t-z all default settings\n" " : -v view the flags\n" - " : -h Print out this help\n\n", + " : -h print out this help\n\n" + "Note : If both enabling and disabling flags are set, the def= ault - is used\n\n", basename(v), basename(v) ); @@ -136,8 +137,7 @@ parse_cmd_args(int c, char *v[], int *pax_flags, int = *view_flags) compat +=3D 1; break ; case 'z': - *pax_flags =3D PF_NOPAGEEXEC | PF_NOSEGMEXEC | PF_NOMPROTECT | - PF_EMUTRAMP | PF_NORANDMMAP | PF_NORANDEXEC; + *pax_flags =3D -1; compat +=3D 1; break; case 'v': @@ -152,24 +152,6 @@ parse_cmd_args(int c, char *v[], int *pax_flags, int= *view_flags) error(EXIT_FAILURE, 0, "option -%c is invalid: ignored.", optopt ) ; } =20 - if( (*pax_flags & PF_PAGEEXEC) && (*pax_flags & PF_NOPAGEEXEC)) - compat =3D 2; - - if( (*pax_flags & PF_SEGMEXEC) && (*pax_flags & PF_NOSEGMEXEC)) - compat =3D 2; - - if( (*pax_flags & PF_MPROTECT) && (*pax_flags & PF_NOMPROTECT)) - compat =3D 2; - - if( (*pax_flags & PF_EMUTRAMP) && (*pax_flags & PF_NOEMUTRAMP)) - compat =3D 2; - - if( (*pax_flags & PF_RANDMMAP) && (*pax_flags & PF_NORANDMMAP)) - compat =3D 2; - - if( (*pax_flags & PF_RANDEXEC) && (*pax_flags & PF_NORANDEXEC)) - compat =3D 2; - if(compat !=3D 1 || v[optind] =3D=3D NULL) print_help(v[0]); =20 @@ -179,20 +161,25 @@ parse_cmd_args(int c, char *v[], int *pax_flags, in= t *view_flags) =20 #define BUF_SIZE 7 void -print_flags(Elf *e, GElf_Ehdr *eh) +print_flags(Elf *elf) { + GElf_Ehdr ehdr; char ei_buf[BUF_SIZE]; - char pt_buf[BUF_SIZE]; uint16_t ei_flags; =20 + GElf_Phdr phdr; + char pt_buf[BUF_SIZE]; char found_pt_pax; size_t i, phnum; - GElf_Phdr phdr; + =20 memset(ei_buf, 0, BUF_SIZE); memset(pt_buf, 0, BUF_SIZE); =20 - ei_flags =3D eh->e_ident[EI_PAX] + (eh->e_ident[EI_PAX + 1] << 8); + if(gelf_getehdr(elf, &ehdr) !=3D &ehdr) + error(EXIT_FAILURE, 0, "gelf_getehdr(): %s", elf_errmsg(elf_errno())); + + ei_flags =3D ehdr.e_ident[EI_PAX] + (ehdr.e_ident[EI_PAX + 1] << 8); =20 ei_buf[0] =3D ei_flags & HF_PAX_PAGEEXEC ? 'p' : 'P'; ei_buf[1] =3D ei_flags & HF_PAX_SEGMEXEC ? 's' : 'S'; @@ -204,10 +191,10 @@ print_flags(Elf *e, GElf_Ehdr *eh) printf("EI_PAX: %s\n", ei_buf); =20 found_pt_pax =3D 0; - elf_getphdrnum(e, &phnum); + elf_getphdrnum(elf, &phnum); for(i=3D0; i PT_NULL\n\n"); + phdr.p_type =3D PT_NULL; + if(!gelf_update_phdr(elf, i, &phdr)) + error(EXIT_FAILURE, 0, "gelf_update_phdr(): %s", elf_errmsg(elf_errn= o())); + } + } + */ } =20 =20 @@ -251,7 +277,6 @@ main( int argc, char *argv[]) char *f_name; =20 Elf *elf; - GElf_Ehdr ehdr; =20 f_name =3D parse_cmd_args(argc, argv, &pax_flags, &view_flags); =20 @@ -267,33 +292,11 @@ main( int argc, char *argv[]) if(elf_kind(elf) !=3D ELF_K_ELF) error(EXIT_FAILURE, 0, "elf_kind() fail: this is not an elf file."); =20 - // get ehdr - if(gelf_getehdr(elf, &ehdr) !=3D &ehdr) - error(EXIT_FAILURE, 0, "gelf_getehdr(): %s", elf_errmsg(elf_errno())); - if(view_flags =3D=3D 1) - print_flags(elf, &ehdr); + print_flags(elf); =20 - /* - if(!gelf_update_ehdr(elf, &ehdr)) - error(EXIT_FAILURE, 0, "gelf_update_ehdr(): %s", elf_errmsg(elf_errno(= ))); - - elf_getphdrnum(elf, &phnum); - for(i=3D0; i PT_NULL\n\n"); - phdr.p_type =3D PT_NULL; - if(!gelf_update_phdr(elf, i, &phdr)) - error(EXIT_FAILURE, 0, "gelf_update_phdr(): %s", elf_errmsg(elf_errn= o())); - } - } - printf("\n\n"); - */ + if(pax_flags !=3D 0) + set_flags(elf); =20 elf_end(elf); close(fd);