123456789101112131415161718192021222324252627282930313233343536373839404142434445 |
- From 4a82c97e8a0677706d1d532812daaa73249768a8 Mon Sep 17 00:00:00 2001
- From: Ed Bartosh <ed.bartosh@linux.intel.com>
- Date: Fri, 21 Jul 2017 12:33:53 +0300
- Subject: [PATCH] fix adjusting startPage
- startPage is adjusted unconditionally for all executables.
- This results in incorrect addresses assigned to INTERP and LOAD
- program headers, which breaks patched executable.
- Adjusting startPage variable only when startOffset > startPage
- should fix this.
- This change is related to the issue NixOS#10
- Signed-off-by: Ed Bartosh <ed.bartosh@linux.intel.com>
- Fetch from: https://github.com/NixOS/patchelf/commit/1cc234fea5600190d872329aca60e2365cefc39e
- Backported to v0.9
- Signed-off-by: Conrad Ratschan <conrad.ratschan@rockwellcollins.com>
- ---
- src/patchelf.cc | 6 ++----
- 1 file changed, 2 insertions(+), 4 deletions(-)
- diff --git a/src/patchelf.cc b/src/patchelf.cc
- index 1224a89..4676157 100644
- --- a/src/patchelf.cc
- +++ b/src/patchelf.cc
- @@ -697,10 +697,8 @@ void ElfFile<ElfFileParamNames>::rewriteSectionsLibrary()
- since DYN executables tend to start at virtual address 0, so
- rewriteSectionsExecutable() won't work because it doesn't have
- any virtual address space to grow downwards into. */
- - if (isExecutable) {
- - if (startOffset >= startPage) {
- - debug("shifting new PT_LOAD segment by %d bytes to work around a Linux kernel bug\n", startOffset - startPage);
- - }
- + if (isExecutable && startOffset > startPage) {
- + debug("shifting new PT_LOAD segment by %d bytes to work around a Linux kernel bug\n", startOffset - startPage);
- startPage = startOffset;
- }
-
- --
- 2.17.1
|