xref: /OK3568_Linux_fs/buildroot/package/patchelf/0007-fix-adjusting-startPage.patch (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593SmuzhiyunFrom 4a82c97e8a0677706d1d532812daaa73249768a8 Mon Sep 17 00:00:00 2001
2*4882a593SmuzhiyunFrom: Ed Bartosh <ed.bartosh@linux.intel.com>
3*4882a593SmuzhiyunDate: Fri, 21 Jul 2017 12:33:53 +0300
4*4882a593SmuzhiyunSubject: [PATCH] fix adjusting startPage
5*4882a593Smuzhiyun
6*4882a593SmuzhiyunstartPage is adjusted unconditionally for all executables.
7*4882a593SmuzhiyunThis results in incorrect addresses assigned to INTERP and LOAD
8*4882a593Smuzhiyunprogram headers, which breaks patched executable.
9*4882a593Smuzhiyun
10*4882a593SmuzhiyunAdjusting startPage variable only when startOffset > startPage
11*4882a593Smuzhiyunshould fix this.
12*4882a593Smuzhiyun
13*4882a593SmuzhiyunThis change is related to the issue NixOS#10
14*4882a593Smuzhiyun
15*4882a593SmuzhiyunSigned-off-by: Ed Bartosh <ed.bartosh@linux.intel.com>
16*4882a593Smuzhiyun
17*4882a593SmuzhiyunFetch from: https://github.com/NixOS/patchelf/commit/1cc234fea5600190d872329aca60e2365cefc39e
18*4882a593Smuzhiyun
19*4882a593SmuzhiyunBackported to v0.9
20*4882a593Smuzhiyun
21*4882a593SmuzhiyunSigned-off-by: Conrad Ratschan <conrad.ratschan@rockwellcollins.com>
22*4882a593Smuzhiyun---
23*4882a593Smuzhiyun src/patchelf.cc | 6 ++----
24*4882a593Smuzhiyun 1 file changed, 2 insertions(+), 4 deletions(-)
25*4882a593Smuzhiyun
26*4882a593Smuzhiyundiff --git a/src/patchelf.cc b/src/patchelf.cc
27*4882a593Smuzhiyunindex 1224a89..4676157 100644
28*4882a593Smuzhiyun--- a/src/patchelf.cc
29*4882a593Smuzhiyun+++ b/src/patchelf.cc
30*4882a593Smuzhiyun@@ -697,10 +697,8 @@ void ElfFile<ElfFileParamNames>::rewriteSectionsLibrary()
31*4882a593Smuzhiyun        since DYN executables tend to start at virtual address 0, so
32*4882a593Smuzhiyun        rewriteSectionsExecutable() won't work because it doesn't have
33*4882a593Smuzhiyun        any virtual address space to grow downwards into. */
34*4882a593Smuzhiyun-    if (isExecutable) {
35*4882a593Smuzhiyun-        if (startOffset >= startPage) {
36*4882a593Smuzhiyun-            debug("shifting new PT_LOAD segment by %d bytes to work around a Linux kernel bug\n", startOffset - startPage);
37*4882a593Smuzhiyun-        }
38*4882a593Smuzhiyun+    if (isExecutable && startOffset > startPage) {
39*4882a593Smuzhiyun+        debug("shifting new PT_LOAD segment by %d bytes to work around a Linux kernel bug\n", startOffset - startPage);
40*4882a593Smuzhiyun         startPage = startOffset;
41*4882a593Smuzhiyun     }
42*4882a593Smuzhiyun
43*4882a593Smuzhiyun--
44*4882a593Smuzhiyun2.17.1
45*4882a593Smuzhiyun
46