From 915296ceec45d0e50490a2c99f47e80a5f1654a2 Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Mon, 20 Mar 2017 10:20:58 +0100 Subject: [PATCH] Add fix for build-ids in non-executable ELF files (#1433837) --- 0020-build-files-exec-build-id.patch | 38 ++++++++++++++++++++++++++++ rpm.spec | 6 +++-- 2 files changed, 42 insertions(+), 2 deletions(-) create mode 100644 0020-build-files-exec-build-id.patch diff --git a/0020-build-files-exec-build-id.patch b/0020-build-files-exec-build-id.patch new file mode 100644 index 0000000..3a27056 --- /dev/null +++ b/0020-build-files-exec-build-id.patch @@ -0,0 +1,38 @@ +diff --git a/build/files.c b/build/files.c +index 6021643..afa01cd 100644 +--- a/build/files.c ++++ b/build/files.c +@@ -1711,6 +1711,19 @@ static int generateBuildIDs(FileList fl) + for (i = 0, flp = fl->files.recs; i < fl->files.used; i++, flp++) { + struct stat sbuf; + if (lstat(flp->diskPath, &sbuf) == 0 && S_ISREG (sbuf.st_mode)) { ++ /* We determine whether this is a main or ++ debug ELF based on path. */ ++ #define DEBUGPATH "/usr/lib/debug/" ++ int isDbg = strncmp (flp->cpioPath, ++ DEBUGPATH, strlen (DEBUGPATH)) == 0; ++ ++ /* For the main package files mimic what find-debuginfo.sh does. ++ Only check build-ids for executable files. Debug files are ++ always non-executable. */ ++ if (!isDbg ++ && (sbuf.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH)) == 0) ++ continue; ++ + int fd = open (flp->diskPath, O_RDONLY); + if (fd >= 0) { + /* Only real ELF files, that are ET_EXEC, ET_DYN or +@@ -1732,12 +1745,8 @@ static int generateBuildIDs(FileList fl) + is 128 bits) and 64 bytes (largest sha3 is 512 + bits), common is 20 bytes (sha1 is 160 bits). */ + if (len >= 16 && len <= 64) { +- /* We determine whether this is a main or +- debug ELF based on path. */ +- #define DEBUGPATH "/usr/lib/debug/" + int addid = 0; +- if (strncmp (flp->cpioPath, +- DEBUGPATH, strlen (DEBUGPATH)) == 0) { ++ if (isDbg) { + needDbg = 1; + addid = 1; + } diff --git a/rpm.spec b/rpm.spec index 7a953f3..95cf5a1 100644 --- a/rpm.spec +++ b/rpm.spec @@ -29,7 +29,7 @@ Summary: The RPM package management system Name: rpm Version: %{rpmver} -Release: %{?snapver:0.%{snapver}.}12%{?dist} +Release: %{?snapver:0.%{snapver}.}13%{?dist} Group: System Environment/Base Url: http://www.rpm.org/ Source0: http://rpm.org/releases/%{srcdir}/%{name}-%{srcver}.tar.bz2 @@ -91,6 +91,7 @@ Patch265: 0016-debugedit-replace-files.patch Patch266: 0017-do-not-process-buildi-ds-for-noarch.patch Patch267: 0018-update-build-id-endian.patch Patch268: 0019-fix-sed-build-id-match-test.patch +Patch269: 0020-build-files-exec-build-id.patch # OpenSSL backend Patch300: 0001-Add-OpenSSL-support-for-digest-and-signatures.patch @@ -595,8 +596,9 @@ exit 0 %doc doc/librpm/html/* %changelog -* Mon Mar 20 2017 Mark Wielaard +* Mon Mar 20 2017 Mark Wielaard - 4.13.0.1-13 - Add tests fix for sed file build-id regexp matching. +- Add fix for build-ids in non-executable ELF files (#1433837). * Fri Mar 17 2017 Mark Wielaard - 4.13.0.1-12 - Fix reading and updating (cross-endian) build-id information.