Commit Graph

10 Commits

Author SHA1 Message Date
Mike Hommey
0e0c6496e4 Bug 1470701 - Use run-time page size when changing mapping permissions in elfhack injected code. r=froydnj
When a binary has a PT_GNU_RELRO segment, the elfhack injected code
uses mprotect to add the writable flag to relocated pages before
applying relocations, removing it afterwards. To do so, the elfhack
program uses the location and size of the PT_GNU_RELRO segment, and
adjusts it to be aligned according to the PT_LOAD alignment.

The problem here is that the PT_LOAD alignment doesn't necessarily match
the actual page alignment, and the resulting mprotect may end up not
covering the full extent of what the dynamic linker has protected
read-only according to the PT_GNU_RELRO segment. In turn, this can lead
to a crash on startup when trying to apply relocations to the still
read-only locations.

Practically speaking, this doesn't end up being a problem on x86, where
the PT_LOAD alignment is usually 4096, which happens to be the page
size, but on Debian armhf, it is 64k, while the run time page size can be
4k.
2018-06-24 09:02:38 +09:00
Mike Hommey
402899e0f0 Bug 1385117 - Make the bss section of the elfhack testcase large enough. r=froydnj
Since bug 635961, building with relro makes elfhack try to use the bss
data for a temporary function pointer. If there is not enough space for
a pointer in the bss, elfhack will complain it couldn't find the bss.

In normal circumstances, this is most likely fine. Libraries with a bss
so small that it can't fit a pointer are already too small to be
elfhacked anyways. In Firefox, the two libraries with the smallest bss
have enough space for two pointers, and aren't elfhacked (libmozgtk.so
and libplds4.so).

However, the testcase that is used during the build to validate that
elfhack works doesn't have a large enough bss on x86-64, making elfhack
bail out, and the build fail as a consequence.

This, in turn, is due to the only non-thread-local zeroed data being an
int, which is not enough to fit a pointer on x86-64. We thus make it a
size_t.
2017-07-28 07:15:39 +09:00
Mike Hommey
b46fe65004 Bug 654087 - Don't error out on gold special treatment of PT_TLS segment memsize. r=nfroyd 2013-01-16 09:15:07 +01:00
Mike Hommey
6aa3ebf7af Bug 716295 part 6 - Create elfhack tests for both DT_INIT and DT_INIT_ARRAY. r=nfroyd 2012-08-09 16:34:26 +02:00
Gervase Markham
cb6a072c2a Bug 716478 - update licence to MPL 2. 2012-05-21 12:12:37 +01:00
Mike Hommey
5f2ee2cae8 Bug 537857 part 2 - Avoid --gc-sections removing anything from elfhack test case. r=tglek 2011-06-28 08:25:48 +02:00
Mike Hommey
473077a181 Bug 661800 - Avoid elfhack considering non SHF_TLS sections as part of PT_TLS segment. r=tglek 2011-06-07 08:26:17 +02:00
Mike Hommey
bb80de5347 Bug 628988 part 1 - Modify elfhack test so that the executable actively calls something from the library. r=tglek,a=sdwilsh 2011-01-28 09:22:58 +01:00
Mike Hommey
eba6e5d0de Bug 628595 - Avoid compiler warning about C++ style comments in C code in elfhack. r=jag,a-sdwilsh 2011-01-28 09:22:58 +01:00
Mike Hommey
4ca328c3c5 Bug 606145 part 2 - Import elfhack code. r=tglek,a=bsmedberg 2011-01-24 09:56:40 +01:00