summarylogtreecommitdiffstats
path: root/2015_spectre_variant2_bug1542958.patch
blob: 5a3a97c42578fdd37fa7b3375f1c2726d8833091 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
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) {