diff options
author | Richard Purdie <richard.purdie@linuxfoundation.org> | 2020-07-09 00:07:51 +0300 |
---|---|---|
committer | Richard Purdie <richard.purdie@linuxfoundation.org> | 2020-08-04 23:17:37 +0100 |
commit | d7c037ccdd8b7a0528103b57faabdb42bd95e1e9 (patch) | |
tree | 5659b07047af00de8eee53944fac9bfe7d3d8fe5 | |
parent | 6d936d8d3d49cca5ac3724efd2aa76ef4403789b (diff) | |
download | poky-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.patch | 37 | ||||
-rw-r--r-- | meta/recipes-devtools/patchelf/patchelf_0.10.bb | 1 |
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 @@ | |||
1 | When running patchelf on some existing patchelf'd binaries to change to longer | ||
2 | RPATHS, ldd would report the binaries as invalid. The output of objdump -x on | ||
3 | those libraryies should show the top of the .dynamic section is getting trashed, | ||
4 | something like: | ||
5 | |||
6 | 0x600000001 0x0000000000429000 | ||
7 | 0x335000 0x0000000000335000 | ||
8 | 0xc740 0x000000000000c740 | ||
9 | 0x1000 0x0000000000009098 | ||
10 | SONAME libglib-2.0.so.0 | ||
11 | |||
12 | (which should be RPATH and DT_NEEDED entries) | ||
13 | |||
14 | This was tracked down to the code which injects the PT_LOAD section. | ||
15 | |||
16 | The issue is that if the program headers were previously relocated to the end | ||
17 | of the file which was how patchelf operated previously, the relocation code | ||
18 | wouldn't work properly on a second run as it now assumes they're located after | ||
19 | the elf header. This change forces them back to immediately follow the elf | ||
20 | header which is where the code has made space for them. | ||
21 | |||
22 | Upstream-Status: Submitted [https://github.com/NixOS/patchelf/pull/202] | ||
23 | Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org> | ||
24 | RP 2020/6/2 | ||
25 | |||
26 | Index: 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 cc983e033a..e4a604ec70 100644 --- a/meta/recipes-devtools/patchelf/patchelf_0.10.bb +++ b/meta/recipes-devtools/patchelf/patchelf_0.10.bb | |||
@@ -1,6 +1,7 @@ | |||
1 | SRC_URI = "https://nixos.org/releases/${BPN}/${BPN}-${PV}/${BPN}-${PV}.tar.bz2 \ | 1 | SRC_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 | ||
6 | LICENSE = "GPLv3" | 7 | LICENSE = "GPLv3" |