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 1RBfQY-0002lx-GH for garchives@archives.gentoo.org; Thu, 06 Oct 2011 04:19:22 +0000 Received: from pigeon.gentoo.org (localhost [127.0.0.1]) by pigeon.gentoo.org (Postfix) with SMTP id 2379C21C0A6; Thu, 6 Oct 2011 04:19:15 +0000 (UTC) Received: from smtp.gentoo.org (smtp.gentoo.org [140.211.166.183]) by pigeon.gentoo.org (Postfix) with ESMTP id 8A6EF21C0A6 for ; Thu, 6 Oct 2011 04:19:14 +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 F325E1B4041 for ; Thu, 6 Oct 2011 04:19:13 +0000 (UTC) Received: from localhost.localdomain (localhost [127.0.0.1]) by pelican.gentoo.org (Postfix) with ESMTP id 200F380042 for ; Thu, 6 Oct 2011 04:19:13 +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: <4e8f465fd70faffada1f99f0096c269080fa967a.blueness@gentoo> Subject: [gentoo-commits] proj/elfix:master commit in: scripts/ X-VCS-Repository: proj/elfix X-VCS-Files: scripts/paxmodule.c X-VCS-Directories: scripts/ X-VCS-Committer: blueness X-VCS-Committer-Name: Anthony G. Basile X-VCS-Revision: 4e8f465fd70faffada1f99f0096c269080fa967a Date: Thu, 6 Oct 2011 04:19:13 +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: 3c2f6c31aaf33baa4c3a3dafc524d522 commit: 4e8f465fd70faffada1f99f0096c269080fa967a Author: Anthony G. Basile gentoo org> AuthorDate: Thu Oct 6 04:19:08 2011 +0000 Commit: Anthony G. Basile gentoo org> CommitDate: Thu Oct 6 04:19:08 2011 +0000 URL: http://git.overlays.gentoo.org/gitweb/?p=3Dproj/elfix.git;a=3D= commit;h=3D4e8f465f scripts/paxmodule.c: return pax flags as string --- scripts/paxmodule.c | 46 ++++++++++++++++++++++++---------------------= - 1 files changed, 24 insertions(+), 22 deletions(-) diff --git a/scripts/paxmodule.c b/scripts/paxmodule.c index 1b3e1eb..927bb50 100644 --- a/scripts/paxmodule.c +++ b/scripts/paxmodule.c @@ -54,17 +54,16 @@ pax_getflags(PyObject *self, PyObject *args) int fd, sts; Elf *elf; =20 + char pax_buf[BUF_SIZE]; + GElf_Ehdr ehdr; - char ei_buf[BUF_SIZE]; uint16_t ei_flags; =20 GElf_Phdr phdr; - char pt_buf[BUF_SIZE]; char found_pt_pax; size_t i, phnum; =20 - memset(ei_buf, 0, BUF_SIZE); - memset(pt_buf, 0, BUF_SIZE); + memset(pax_buf, 0, BUF_SIZE); =20 if (!PyArg_ParseTuple(args, "s", &f_name)) { @@ -86,12 +85,15 @@ pax_getflags(PyObject *self, PyObject *args) =20 if((elf =3D elf_begin(fd, ELF_C_READ_MMAP, NULL)) =3D=3D NULL) { + close(fd); PyErr_SetString(PaxError, "pax_getflags: elf_begin() failed"); return NULL; } =20 if(elf_kind(elf) !=3D ELF_K_ELF) { + elf_end(elf); + close(fd); PyErr_SetString(PaxError, "pax_getflags: elf_kind() failed: this is no= t an elf file."); return NULL; } @@ -103,6 +105,8 @@ pax_getflags(PyObject *self, PyObject *args) { if(gelf_getphdr(elf, i, &phdr) !=3D &phdr) { + elf_end(elf); + close(fd); PyErr_SetString(PaxError, "pax_getflags: gelf_getphdr() failed"); return NULL; } @@ -111,50 +115,48 @@ pax_getflags(PyObject *self, PyObject *args) { found_pt_pax =3D 1; =20 - pt_buf[0] =3D phdr.p_flags & PF_PAGEEXEC ? 'P' : + pax_buf[0] =3D phdr.p_flags & PF_PAGEEXEC ? 'P' : phdr.p_flags & PF_NOPAGEEXEC ? 'p' : '-' ; =20 - pt_buf[1] =3D phdr.p_flags & PF_SEGMEXEC ? 'S' :=20 + pax_buf[1] =3D phdr.p_flags & PF_SEGMEXEC ? 'S' :=20 phdr.p_flags & PF_NOSEGMEXEC ? 's' : '-'; =20 - pt_buf[2] =3D phdr.p_flags & PF_MPROTECT ? 'M' : + pax_buf[2] =3D phdr.p_flags & PF_MPROTECT ? 'M' : phdr.p_flags & PF_NOMPROTECT ? 'm' : '-'; =20 - pt_buf[3] =3D phdr.p_flags & PF_EMUTRAMP ? 'E' : + pax_buf[3] =3D phdr.p_flags & PF_EMUTRAMP ? 'E' : phdr.p_flags & PF_NOEMUTRAMP ? 'e' : '-'; =20 - pt_buf[4] =3D phdr.p_flags & PF_RANDMMAP ? 'R' : + pax_buf[4] =3D phdr.p_flags & PF_RANDMMAP ? 'R' : phdr.p_flags & PF_NORANDMMAP ? 'r' : '-'; =20 - pt_buf[5] =3D phdr.p_flags & PF_RANDEXEC ? 'X' : + pax_buf[5] =3D phdr.p_flags & PF_RANDEXEC ? 'X' : phdr.p_flags & PF_NORANDEXEC ? 'x' : '-'; } } =20 - if(found_pt_pax) - printf("PT_PAX: %s\n", pt_buf); - else + if(!found_pt_pax) { if(gelf_getehdr(elf, &ehdr) !=3D &ehdr) { + elf_end(elf); + close(fd); PyErr_SetString(PaxError, "pax_getflags: gelf_getehdr() failed"); return NULL; } =20 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'; - ei_buf[2] =3D ei_flags & HF_PAX_MPROTECT ? 'm' : 'M'; - ei_buf[3] =3D ei_flags & HF_PAX_EMUTRAMP ? 'E' : 'e'; - ei_buf[4] =3D ei_flags & HF_PAX_RANDMMAP ? 'r' : 'R'; - ei_buf[5] =3D ei_flags & HF_PAX_RANDEXEC ? 'X' : 'x'; - - printf("EI_PAX: %s\n", ei_buf); + pax_buf[0] =3D ei_flags & HF_PAX_PAGEEXEC ? 'p' : 'P'; + pax_buf[1] =3D ei_flags & HF_PAX_SEGMEXEC ? 's' : 'S'; + pax_buf[2] =3D ei_flags & HF_PAX_MPROTECT ? 'm' : 'M'; + pax_buf[3] =3D ei_flags & HF_PAX_EMUTRAMP ? 'E' : 'e'; + pax_buf[4] =3D ei_flags & HF_PAX_RANDMMAP ? 'r' : 'R'; + pax_buf[5] =3D ei_flags & HF_PAX_RANDEXEC ? 'X' : 'x'; } =20 elf_end(elf); close(fd); =20 - return Py_BuildValue("i", sts); + return Py_BuildValue("s", pax_buf); }