Skip to content

Commit

Permalink
rewriteSectionsLibrary: assume all libraries may be executable; fixes N…
Browse files Browse the repository at this point in the history
  • Loading branch information
Rodger Combs committed Mar 30, 2019
1 parent 6066239 commit 7dc867a
Showing 1 changed file with 4 additions and 10 deletions.
14 changes: 4 additions & 10 deletions src/patchelf.cc
Original file line number Diff line number Diff line change
Expand Up @@ -104,8 +104,6 @@ class ElfFile

bool changed = false;

bool isExecutable = false;

typedef std::string SectionName;
typedef std::map<SectionName, std::string> ReplacedSections;

Expand Down Expand Up @@ -414,10 +412,8 @@ ElfFile<ElfFileParamNames>::ElfFile(FileContents fileContents)
error("program headers have wrong size");

/* Copy the program and section headers. */
for (int i = 0; i < rdi(hdr->e_phnum); ++i) {
for (int i = 0; i < rdi(hdr->e_phnum); ++i)
phdrs.push_back(* ((Elf_Phdr *) (contents + rdi(hdr->e_phoff)) + i));
if (rdi(phdrs[i].p_type) == PT_INTERP) isExecutable = true;
}

for (int i = 0; i < rdi(hdr->e_shnum); ++i)
shdrs.push_back(* ((Elf_Shdr *) (contents + rdi(hdr->e_shoff)) + i));
Expand Down Expand Up @@ -742,12 +738,10 @@ void ElfFile<ElfFileParamNames>::rewriteSectionsLibrary()
since DYN executables tend to start at virtual address 0, so
rewriteSectionsExecutable() won't work because it doesn't have
any virtual address space to grow downwards into. */
if (isExecutable) {
if (startOffset >= startPage) {
debug("shifting new PT_LOAD segment by %d bytes to work around a Linux kernel bug\n", startOffset - startPage);
}
startPage = startOffset;
if (startOffset >= startPage) {
debug("shifting new PT_LOAD segment by %d bytes to work around a Linux kernel bug\n", startOffset - startPage);
}
startPage = startOffset;

/* Add a segment that maps the replaced sections into memory. */
phdrs.resize(rdi(hdr->e_phnum) + 1);
Expand Down

0 comments on commit 7dc867a

Please sign in to comment.