39 lines
1.5 KiB
Diff
39 lines
1.5 KiB
Diff
|
From cb8326de54ad7a56658b0dc8efb7da5e71684a7c Mon Sep 17 00:00:00 2001
|
||
|
From: Pablo Galindo <pablogsal@gmail.com>
|
||
|
Date: Tue, 22 Sep 2020 01:33:47 +0100
|
||
|
Subject: [PATCH] Use sh_offset instead of sh_addr when checking already
|
||
|
replaced libs
|
||
|
|
||
|
When checking for already replaced libs, the check against the size must
|
||
|
be done using the section header offset, not the section file address.
|
||
|
This was not crashing in many situations because normally sh_address and
|
||
|
sh_offset have the same value but these two may differ and using the
|
||
|
sh_address value instead can cause library corruption in these
|
||
|
situations.
|
||
|
|
||
|
Fetch from: https://github.com/NixOS/patchelf/commit/83aa89addf8757e2d63aa73222f2fa9bc6d7321a
|
||
|
|
||
|
Backported to v0.9
|
||
|
|
||
|
Signed-off-by: Conrad Ratschan <conrad.ratschan@rockwellcollins.com>
|
||
|
---
|
||
|
src/patchelf.cc | 2 +-
|
||
|
1 file changed, 1 insertion(+), 1 deletion(-)
|
||
|
|
||
|
diff --git a/src/patchelf.cc b/src/patchelf.cc
|
||
|
index 4676157..c025ae2 100644
|
||
|
--- a/src/patchelf.cc
|
||
|
+++ b/src/patchelf.cc
|
||
|
@@ -666,7 +666,7 @@ void ElfFile<ElfFileParamNames>::rewriteSectionsLibrary()
|
||
|
/* Some sections may already be replaced so account for that */
|
||
|
unsigned int i = 1;
|
||
|
Elf_Addr pht_size = sizeof(Elf_Ehdr) + (phdrs.size() + 1)*sizeof(Elf_Phdr);
|
||
|
- while( shdrs[i].sh_addr <= pht_size && i < rdi(hdr->e_shnum) ) {
|
||
|
+ while( shdrs[i].sh_offset <= pht_size && i < rdi(hdr->e_shnum) ) {
|
||
|
if (not haveReplacedSection(getSectionName(shdrs[i])))
|
||
|
replaceSection(getSectionName(shdrs[i]), shdrs[i].sh_size);
|
||
|
i++;
|
||
|
--
|
||
|
2.17.1
|
||
|
|