Bug 1385537 - Check for writable segments correctly. r?glandium draft
authorCameron McCormack <cam@mcc.id.au>
Sat, 29 Jul 2017 13:56:25 +0800
changeset 618007 ee143c0eb8cc6a3c586e903b24fad4d01d7072c7
parent 617946 ec666e910442ae55686160c1bd0c93b00a08dead
child 639935 faf415e35a90dc07d4c00cb8ae1a094f6ade8d57
push id71183
push userbmo:cam@mcc.id.au
push dateSat, 29 Jul 2017 05:57:02 +0000
reviewersglandium
bugs1385537
milestone56.0a1
Bug 1385537 - Check for writable segments correctly. r?glandium MozReview-Commit-ID: FItpvVeiMJM
build/unix/elfhack/elfhack.cpp
--- a/build/unix/elfhack/elfhack.cpp
+++ b/build/unix/elfhack/elfhack.cpp
@@ -725,17 +725,17 @@ int do_relocation_section(Elf *elf, unsi
         Rel_Type &rel = new_rels.back();
         memset(&rel, 0, sizeof(rel));
         rel.r_info = ELF32_R_INFO(std::distance(symtab->syms.begin(), std::vector<Elf_SymValue>::iterator(mprotect)), rel_type2);
 
         // Find the beginning of the bss section, and use an aligned location in there
         // for the relocation.
         for (ElfSegment *segment = elf->getSegmentByType(PT_LOAD); segment;
              segment = elf->getSegmentByType(PT_LOAD, segment)) {
-            if (segment->getFlags() & PF_W == 0)
+            if ((segment->getFlags() & PF_W) == 0)
                 continue;
             size_t ptr_size = Elf_Addr::size(elf->getClass());
             size_t aligned_mem_end = (segment->getAddr() + segment->getMemSize() + ptr_size - 1) & ~(ptr_size - 1);
             size_t aligned_file_end = (segment->getAddr() + segment->getFileSize() + ptr_size - 1) & ~(ptr_size - 1);
             if (aligned_mem_end - aligned_file_end >= Elf_Addr::size(elf->getClass())) {
                 mprotect_cb = rel.r_offset = aligned_file_end;
                 break;
             }