diff options
author | bors[bot] <26634292+bors[bot]@users.noreply.github.com> | 2023-04-23 11:15:54 +0000 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-04-23 11:15:54 +0000 |
commit | 98591a5ae59b096826c1a8bedf733c955662d0c8 (patch) | |
tree | 5b526a78bec49c80da4aefb0b4d1c2065702eae0 /src/patchelf.cc | |
parent | 6e7b82e839414b8a2a47a9ff3a2bf90b091479ac (diff) | |
parent | 65cdee904431d16668f95d816a495bc35a05a192 (diff) | |
download | patchelf-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.cc | 12 |
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; + } } |