summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEd Bartosh <ed.bartosh@linux.intel.com>2017-07-21 14:48:13 +0300
committerRichard Purdie <richard.purdie@linuxfoundation.org>2017-07-24 09:13:30 +0100
commitec5c4e97c8c11a9ff93c4c4f653ad6cfd55fa7fa (patch)
tree21c7e9c7a12692fdf341221f0b88ca03aa100561
parent52f2d81c9a07453de09bf03a3d799a6d497c774b (diff)
downloadpoky-ec5c4e97c8c11a9ff93c4c4f653ad6cfd55fa7fa.tar.gz
patchelf: fix segfault for binaries linked by gold
Due to a bug in calculating adresses of modified program headers patchelf breaks executables linked by Gold linker causing them to segfault, e.g. $ tmp/sysroots-components/x86_64/m4-native/usr/bin/m4 --help Segmentation fault This is reproducible only in some cases and only for executables of ET_DYN type produced by Gold or by ld linked with pie. This should be solved by fix-adjusting-startPage.patch that fixes calculation logic. [YOCTO #11785] (From OE-Core rev: 4e4c96db4b1d2356b5d071cee6746a96eca20439) Signed-off-by: Ed Bartosh <ed.bartosh@linux.intel.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
-rw-r--r--meta/recipes-devtools/patchelf/patchelf/fix-adjusting-startPage.patch38
-rw-r--r--meta/recipes-devtools/patchelf/patchelf_0.9.bb1
2 files changed, 39 insertions, 0 deletions
diff --git a/meta/recipes-devtools/patchelf/patchelf/fix-adjusting-startPage.patch b/meta/recipes-devtools/patchelf/patchelf/fix-adjusting-startPage.patch
new file mode 100644
index 0000000000..f64cbed5cb
--- /dev/null
+++ b/meta/recipes-devtools/patchelf/patchelf/fix-adjusting-startPage.patch
@@ -0,0 +1,38 @@
1commit 1cc234fea5600190d872329aca60e2365cefc39e
2Author: Ed Bartosh <ed.bartosh@linux.intel.com>
3Date: Fri Jul 21 12:33:53 2017 +0300
4
5fix adjusting startPage
6
7startPage is adjusted unconditionally for all executables.
8This results in incorrect addresses assigned to INTERP and LOAD
9program headers, which breaks patched executable.
10
11Adjusting startPage variable only when startOffset > startPage
12should fix this.
13
14This change is related to the issue NixOS#10
15
16Signed-off-by: Ed Bartosh <ed.bartosh@linux.intel.com>
17
18Github PR: https://github.com/NixOS/patchelf/pull/127
19
20Upstream-Status: Submitted
21
22diff --git a/src/patchelf.cc b/src/patchelf.cc
23index cbd36c0..e9d7ea5 100644
24--- a/src/patchelf.cc
25+++ b/src/patchelf.cc
26@@ -720,10 +720,8 @@ void ElfFile<ElfFileParamNames>::rewriteSectionsLibrary()
27 since DYN executables tend to start at virtual address 0, so
28 rewriteSectionsExecutable() won't work because it doesn't have
29 any virtual address space to grow downwards into. */
30- if (isExecutable) {
31- if (startOffset >= startPage) {
32- debug("shifting new PT_LOAD segment by %d bytes to work around a Linux kernel bug\n", startOffset - startPage);
33- }
34+ if (isExecutable && startOffset > startPage) {
35+ debug("shifting new PT_LOAD segment by %d bytes to work around a Linux kernel bug\n", startOffset - startPage);
36 startPage = startOffset;
37 }
38
diff --git a/meta/recipes-devtools/patchelf/patchelf_0.9.bb b/meta/recipes-devtools/patchelf/patchelf_0.9.bb
index 01f0e62135..d70303963c 100644
--- a/meta/recipes-devtools/patchelf/patchelf_0.9.bb
+++ b/meta/recipes-devtools/patchelf/patchelf_0.9.bb
@@ -3,6 +3,7 @@ SRC_URI = "http://nixos.org/releases/${BPN}/${BPN}-${PV}/${BPN}-${PV}.tar.bz2 \
3 file://handle-read-only-files.patch \ 3 file://handle-read-only-files.patch \
4 file://Increase-maxSize-to-64MB.patch \ 4 file://Increase-maxSize-to-64MB.patch \
5 file://avoidholes.patch \ 5 file://avoidholes.patch \
6 file://fix-adjusting-startPage.patch \
6" 7"
7 8
8LICENSE = "GPLv3" 9LICENSE = "GPLv3"