summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRichard Purdie <richard.purdie@linuxfoundation.org>2020-06-03 14:24:59 +0100
committerRichard Purdie <richard.purdie@linuxfoundation.org>2020-06-04 13:27:32 +0100
commit07223656d2060464b6830562b1bb8c7cbd230896 (patch)
tree0132ec28e8079df3278527c7874ad882b81eef12
parent5cbf053481642a820b9f4c6bed9ac79246719087 (diff)
downloadpoky-07223656d2060464b6830562b1bb8c7cbd230896.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: e7811c787bbe2f5d49b3506309499acc27189988) 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 0000000000..d087bd7855
--- /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 d29e094edd..84e640773b 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 = "git://github.com/NixOS/patchelf;protocol=https \ 1SRC_URI = "git://github.com/NixOS/patchelf;protocol=https \
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"