summaryrefslogtreecommitdiff
path: root/src/patchelf.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/patchelf.cc')
-rw-r--r--src/patchelf.cc12
1 files changed, 12 insertions, 0 deletions
diff --git a/src/patchelf.cc b/src/patchelf.cc
index ee00918..82b4b46 100644
--- a/src/patchelf.cc
+++ b/src/patchelf.cc
@@ -1030,6 +1030,18 @@ void ElfFile<ElfFileParamNames>::rewriteSectionsExecutable()
firstPage -= neededPages * getPageSize();
startOffset += neededPages * getPageSize();
+ } else {
+ Elf_Off rewrittenSectionsOffset = sizeof(Elf_Ehdr) + phdrs.size() * sizeof(Elf_Phdr);
+ for (auto& phdr : phdrs)
+ if (rdi(phdr.p_type) == PT_LOAD &&
+ rdi(phdr.p_offset) <= rewrittenSectionsOffset &&
+ rdi(phdr.p_offset) + rdi(phdr.p_filesz) > rewrittenSectionsOffset &&
+ rdi(phdr.p_filesz) < neededSpace)
+ {
+ wri(phdr.p_filesz, neededSpace);
+ wri(phdr.p_memsz, neededSpace);
+ break;
+ }
}