summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRichard Purdie <richard.purdie@linuxfoundation.org>2020-07-08 21:07:51 (GMT)
committerRichard Purdie <richard.purdie@linuxfoundation.org>2020-08-04 22:17:37 (GMT)
commitd7c037ccdd8b7a0528103b57faabdb42bd95e1e9 (patch)
tree5659b07047af00de8eee53944fac9bfe7d3d8fe5
parent6d936d8d3d49cca5ac3724efd2aa76ef4403789b (diff)
downloadpoky-d7c037ccdd8b7a0528103b57faabdb42bd95e1e9.tar.gz
patchelf: Add patch to address corrupt shared library issue
patchelf can corrupt shared libraries if the program headers don't immediately follow the elf header. Add a patch submitted upstream to address this. (From OE-Core rev: faaf5f34332290708f3720a5488b3d1549d9e95a) (From OE-Core rev: 1969b67592bf1cfb0088f89ecde516abf614238f) Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org> (cherry picked from commit e7811c787bbe2f5d49b3506309499acc27189988) Signed-off-by: Steve Sakoman <steve@sakoman.com> Signed-off-by: Adrian Bunk <bunk@stusta.de> Signed-off-by: Anuj Mittal <anuj.mittal@intel.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
-rw-r--r--meta/recipes-devtools/patchelf/patchelf/fix-phdrs.patch37
-rw-r--r--meta/recipes-devtools/patchelf/patchelf_0.10.bb1
2 files changed, 38 insertions, 0 deletions
diff --git a/meta/recipes-devtools/patchelf/patchelf/fix-phdrs.patch b/meta/recipes-devtools/patchelf/patchelf/fix-phdrs.patch
new file mode 100644
index 0000000..d087bd7
--- /dev/null
+++ b/meta/recipes-devtools/patchelf/patchelf/fix-phdrs.patch
@@ -0,0 +1,37 @@
1When running patchelf on some existing patchelf'd binaries to change to longer
2RPATHS, ldd would report the binaries as invalid. The output of objdump -x on
3those libraryies should show the top of the .dynamic section is getting trashed,
4something like:
5
60x600000001 0x0000000000429000
70x335000 0x0000000000335000
80xc740 0x000000000000c740
90x1000 0x0000000000009098
10SONAME libglib-2.0.so.0
11
12(which should be RPATH and DT_NEEDED entries)
13
14This was tracked down to the code which injects the PT_LOAD section.
15
16The issue is that if the program headers were previously relocated to the end
17of the file which was how patchelf operated previously, the relocation code
18wouldn't work properly on a second run as it now assumes they're located after
19the elf header. This change forces them back to immediately follow the elf
20header which is where the code has made space for them.
21
22Upstream-Status: Submitted [https://github.com/NixOS/patchelf/pull/202]
23Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
24RP 2020/6/2
25
26Index: git/src/patchelf.cc
27===================================================================
28--- git.orig/src/patchelf.cc
29+++ git/src/patchelf.cc
30@@ -762,6 +762,7 @@ void ElfFile<ElfFileParamNames>::rewrite
31 }
32
33 /* Add a segment that maps the replaced sections into memory. */
34+ wri(hdr->e_phoff, sizeof(Elf_Ehdr));
35 phdrs.resize(rdi(hdr->e_phnum) + 1);
36 wri(hdr->e_phnum, rdi(hdr->e_phnum) + 1);
37 Elf_Phdr & phdr = phdrs[rdi(hdr->e_phnum) - 1];
diff --git a/meta/recipes-devtools/patchelf/patchelf_0.10.bb b/meta/recipes-devtools/patchelf/patchelf_0.10.bb
index cc983e0..e4a604e 100644
--- a/meta/recipes-devtools/patchelf/patchelf_0.10.bb
+++ b/meta/recipes-devtools/patchelf/patchelf_0.10.bb
@@ -1,6 +1,7 @@
1SRC_URI = "https://nixos.org/releases/${BPN}/${BPN}-${PV}/${BPN}-${PV}.tar.bz2 \ 1SRC_URI = "https://nixos.org/releases/${BPN}/${BPN}-${PV}/${BPN}-${PV}.tar.bz2 \
2 file://handle-read-only-files.patch \ 2 file://handle-read-only-files.patch \
3 file://fix-adjusting-startPage.patch \ 3 file://fix-adjusting-startPage.patch \
4 file://fix-phdrs.patch \
4 " 5 "
5 6
6LICENSE = "GPLv3" 7LICENSE = "GPLv3"