public inbox for gentoo-commits@lists.gentoo.org
 help / color / mirror / Atom feed
From: "Sergei Trofimovich" <slyfox@gentoo.org>
To: gentoo-commits@lists.gentoo.org
Subject: [gentoo-commits] repo/gentoo:master commit in: app-misc/pax-utils/, app-misc/pax-utils/files/
Date: Sat, 19 Aug 2017 10:11:59 +0000 (UTC)	[thread overview]
Message-ID: <1503137515.7e17e5572bda4281b90959cf8999dc95dfe21c6b.slyfox@gentoo> (raw)

commit:     7e17e5572bda4281b90959cf8999dc95dfe21c6b
Author:     Sergei Trofimovich <slyfox <AT> gentoo <DOT> org>
AuthorDate: Sat Aug 19 10:02:47 2017 +0000
Commit:     Sergei Trofimovich <slyfox <AT> gentoo <DOT> org>
CommitDate: Sat Aug 19 10:11:55 2017 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=7e17e557

app-misc/pax-utils: fix crash on ia64 TEXTRELs, bug #624356

Bug: https://bugs.gentoo.org/624356
Package-Manager: Portage-2.3.8, Repoman-2.3.3

 ...-scanelf-fix-out-of-bounds-access-in-ia64.patch | 72 ++++++++++++++++++++++
 app-misc/pax-utils/pax-utils-1.2.2-r1.ebuild       | 58 +++++++++++++++++
 2 files changed, 130 insertions(+)

diff --git a/app-misc/pax-utils/files/pax-utils-1.2.2-scanelf-fix-out-of-bounds-access-in-ia64.patch b/app-misc/pax-utils/files/pax-utils-1.2.2-scanelf-fix-out-of-bounds-access-in-ia64.patch
new file mode 100644
index 00000000000..1fa5c3187e5
--- /dev/null
+++ b/app-misc/pax-utils/files/pax-utils-1.2.2-scanelf-fix-out-of-bounds-access-in-ia64.patch
@@ -0,0 +1,72 @@
+From e95103c40d0541fbcdb4b84b000832d9b1b83b8d Mon Sep 17 00:00:00 2001
+From: Sergei Trofimovich <slyfox@gentoo.org>
+Date: Sat, 19 Aug 2017 10:34:41 +0100
+Subject: [PATCH] scanelf: fix out-of-bounds access in ia64
+
+commit 2eb852129394f97dae89c0ff1f9f48637edcb0e9
+slightly changed decoder and added unchecked
+read from elf header:
+
+```
+       switch (EGET(dpltrel->d_un.d_val)) { \
+       case DT_REL: \
+               rel = REL##B(elf->vdata + EGET(drel->d_un.d_val)); \
+```
+
+On ia64 'EGET(drel->d_un.d_val)' returns absolute address:
+
+```
+    $ dumpelf bug/luatex
+    ...
+    /* Dynamic tag #31 'DT_RELA' 0x97E310 */
+    {
+        .d_tag     = 0x7        ,
+        .d_un      = {
+                .d_val = 0x4000000000031C30 ,
+                .d_ptr = 0x4000000000031C30 ,
+        },
+    },
+```
+
+That causes 'scanelf' crash on binaries like 'luatex'.
+
+This change restores check and loudly skips such sections:
+    scanelf: bug/luatex: DT_RELA is out of file range
+
+Bug: https://bugs.gentoo.org/624356
+Signed-off-by: Sergei Trofimovich <slyfox@gentoo.org>
+---
+ scanelf.c | 12 ++++++++++++
+ 1 file changed, 12 insertions(+)
+
+diff --git a/scanelf.c b/scanelf.c
+index 1ead891..a054408 100644
+--- a/scanelf.c
++++ b/scanelf.c
+@@ -607,11 +607,23 @@ static char *scanelf_file_textrels(elfobj *elf, char *found_textrels, char *foun
+ 	} \
+ 	switch (EGET(dpltrel->d_un.d_val)) { \
+ 	case DT_REL: \
++		if (EGET(drel->d_un.d_val) >= (uint64_t)elf->len - sizeof (drel->d_un.d_val)) { \
++			rel = NULL; \
++			rela = NULL; \
++			warn("%s: DT_REL is out of file range", elf->filename); \
++			break; \
++		} \
+ 		rel = REL##B(elf->vdata + EGET(drel->d_un.d_val)); \
+ 		rela = NULL; \
+ 		pltrel = DT_REL; \
+ 		break; \
+ 	case DT_RELA: \
++		if (EGET(drel->d_un.d_val) >= (uint64_t)elf->len - sizeof (drel->d_un.d_val)) { \
++			rel = NULL; \
++			rela = NULL; \
++			warn("%s: DT_RELA is out of file range", elf->filename); \
++			break; \
++		} \
+ 		rel = NULL; \
+ 		rela = RELA##B(elf->vdata + EGET(drel->d_un.d_val)); \
+ 		pltrel = DT_RELA; \
+-- 
+2.14.1
+

diff --git a/app-misc/pax-utils/pax-utils-1.2.2-r1.ebuild b/app-misc/pax-utils/pax-utils-1.2.2-r1.ebuild
new file mode 100644
index 00000000000..ba368f7be67
--- /dev/null
+++ b/app-misc/pax-utils/pax-utils-1.2.2-r1.ebuild
@@ -0,0 +1,58 @@
+# Copyright 1999-2017 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=6
+
+inherit eutils toolchain-funcs unpacker
+
+DESCRIPTION="ELF utils that can check files for security relevant properties"
+HOMEPAGE="https://wiki.gentoo.org/index.php?title=Project:Hardened/PaX_Utilities"
+SRC_URI="mirror://gentoo/${P}.tar.xz
+	https://dev.gentoo.org/~vapier/dist/${P}.tar.xz"
+
+LICENSE="GPL-2"
+SLOT="0"
+KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~ia64 ~m68k ~mips ~ppc ~ppc64 ~s390 ~sh ~sparc ~x86 ~amd64-fbsd ~sparc-fbsd ~x86-fbsd ~amd64-linux ~x86-linux ~ppc-macos ~x64-macos ~x86-macos ~sparc-solaris ~sparc64-solaris ~x64-solaris ~x86-solaris"
+IUSE="caps debug python seccomp"
+
+RDEPEND="caps? ( >=sys-libs/libcap-2.24 )
+	python? ( dev-python/pyelftools )
+	seccomp? ( sys-libs/libseccomp )"
+DEPEND="${RDEPEND}
+	caps? ( virtual/pkgconfig )
+	seccomp? ( virtual/pkgconfig )
+	app-arch/xz-utils"
+
+PATCHES=("${FILESDIR}"/${P}-scanelf-fix-out-of-bounds-access-in-ia64.patch)
+
+_emake() {
+	emake \
+		USE_CAP=$(usex caps) \
+		USE_DEBUG=$(usex debug) \
+		USE_PYTHON=$(usex python) \
+		USE_SECCOMP=$(usex seccomp) \
+		"$@"
+}
+
+src_configure() {
+	# Avoid slow configure+gnulib+make if on an up-to-date Linux system
+	if use prefix || ! use kernel_linux || \
+	   has_version '<sys-libs/glibc-2.10'
+	then
+		econf $(use_with caps) $(use_with debug) $(use_with python) $(use_with seccomp)
+	else
+		tc-export CC PKG_CONFIG
+	fi
+}
+
+src_compile() {
+	_emake
+}
+
+src_test() {
+	_emake check
+}
+
+src_install() {
+	_emake DESTDIR="${D}" PKGDOCDIR='$(DOCDIR)'/${PF} install
+}


             reply	other threads:[~2017-08-19 10:12 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-08-19 10:11 Sergei Trofimovich [this message]
  -- strict thread matches above, loose matches on Subject: below --
2022-09-08  0:23 [gentoo-commits] repo/gentoo:master commit in: app-misc/pax-utils/, app-misc/pax-utils/files/ Mike Gilbert
2018-11-24 19:54 Sergei Trofimovich
2017-09-18  9:43 Fabian Groffen
2016-11-08 22:07 Mike Gilbert

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1503137515.7e17e5572bda4281b90959cf8999dc95dfe21c6b.slyfox@gentoo \
    --to=slyfox@gentoo.org \
    --cc=gentoo-commits@lists.gentoo.org \
    --cc=gentoo-dev@lists.gentoo.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox