summaryrefslogtreecommitdiff
path: root/src/patchelf.cc
diff options
context:
space:
mode:
authorbors[bot] <26634292+bors[bot]@users.noreply.github.com>2023-04-23 11:15:54 +0000
committerGitHub <noreply@github.com>2023-04-23 11:15:54 +0000
commit98591a5ae59b096826c1a8bedf733c955662d0c8 (patch)
tree5b526a78bec49c80da4aefb0b4d1c2065702eae0 /src/patchelf.cc
parent6e7b82e839414b8a2a47a9ff3a2bf90b091479ac (diff)
parent65cdee904431d16668f95d816a495bc35a05a192 (diff)
downloadpatchelf-98591a5ae59b096826c1a8bedf733c955662d0c8.tar.gz
Merge #485
485: Resize segment mapping rewritten sections if needed #482 r=Mic92 a=brenoguim Co-authored-by: Breno Rodrigues Guimaraes <brenorg@gmail.com>
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;
+ }
}