diff options
Diffstat (limited to '2015_spectre_variant2_bug1542958.patch')
-rw-r--r-- | 2015_spectre_variant2_bug1542958.patch | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/2015_spectre_variant2_bug1542958.patch b/2015_spectre_variant2_bug1542958.patch new file mode 100644 index 000000000000..5a3a97c42578 --- /dev/null +++ b/2015_spectre_variant2_bug1542958.patch @@ -0,0 +1,32 @@ +# HG changeset patch +# Parent f5febee8d7dc9cf6ba776d6a8550f87eb343f998 +Bug 1542958 - fix code section adjustments in elfhack; r=glandium + +We were never adjusting `last` in this loop, so we were computing the +wrong addresses for all sections beyond the first. Which in turn meant +that we would compute the wrong size for the section data we needed to +allocate. + +Differential Revision: https://phabricator.services.mozilla.com/D28195 + +diff --git a/build/unix/elfhack/elfhack.cpp b/build/unix/elfhack/elfhack.cpp +--- a/build/unix/elfhack/elfhack.cpp ++++ b/build/unix/elfhack/elfhack.cpp +@@ -172,16 +172,17 @@ class ElfRelHackCode_Section : public El + unsigned int addr = last->getShdr().sh_addr + last->getSize(); + if (addr & ((*c)->getAddrAlign() - 1)) + addr = (addr | ((*c)->getAddrAlign() - 1)) + 1; + (*c)->getShdr().sh_addr = addr; + // We need to align this section depending on the greater + // alignment required by code sections. + if (shdr.sh_addralign < (*c)->getAddrAlign()) + shdr.sh_addralign = (*c)->getAddrAlign(); ++ last = *c; + } + shdr.sh_size = code.back()->getAddr() + code.back()->getSize(); + data = static_cast<char *>(malloc(shdr.sh_size)); + if (!data) { + throw std::runtime_error("Could not malloc ElfSection data"); + } + char *buf = data; + for (c = code.begin(); c != code.end(); ++c) { |