diff options
Diffstat (limited to 'package/patchelf/0007-fix-adjusting-startPage.patch')
-rw-r--r-- | package/patchelf/0007-fix-adjusting-startPage.patch | 45 |
1 files changed, 45 insertions, 0 deletions
diff --git a/package/patchelf/0007-fix-adjusting-startPage.patch b/package/patchelf/0007-fix-adjusting-startPage.patch new file mode 100644 index 0000000000..fd044964e0 --- /dev/null +++ b/package/patchelf/0007-fix-adjusting-startPage.patch @@ -0,0 +1,45 @@ +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 + |