Closed
Bug 1385918
Opened 9 years ago
Closed 9 years ago
Memory leak in elfhack
Categories
(Firefox for Android Graveyard :: General, defect)
Firefox for Android Graveyard
General
Tracking
(Not tracked)
RESOLVED
DUPLICATE
of bug 1142667
People
(Reporter: snorp, Unassigned)
Details
Coverity static analysis found the following leaks in elfhack.cpp. It appears they are all related to early returns leaking the 'relhack' instance that is newed up near the beginning of do_relocation_section()
** CID 158597: (RESOURCE_LEAK)
/build/unix/elfhack/elfhack.cpp: 615 in do_relocation_section<Elf_Rela>(Elf *, unsigned int, unsigned int, bool, bool)()
/build/unix/elfhack/elfhack.cpp: 615 in do_relocation_section<Elf_Rel>(Elf *, unsigned int, unsigned int, bool, bool)()
/build/unix/elfhack/elfhack.cpp: 746 in do_relocation_section<Elf_Rela>(Elf *, unsigned int, unsigned int, bool, bool)()
/build/unix/elfhack/elfhack.cpp: 746 in do_relocation_section<Elf_Rela>(Elf *, unsigned int, unsigned int, bool, bool)()
/build/unix/elfhack/elfhack.cpp: 746 in do_relocation_section<Elf_Rel>(Elf *, unsigned int, unsigned int, bool, bool)()
/build/unix/elfhack/elfhack.cpp: 746 in do_relocation_section<Elf_Rel>(Elf *, unsigned int, unsigned int, bool, bool)()
________________________________________________________________________________________________________
*** CID 158597: (RESOURCE_LEAK)
/build/unix/elfhack/elfhack.cpp: 615 in do_relocation_section<Elf_Rela>(Elf *, unsigned int, unsigned int, bool, bool)()
609 }
610 }
611 // Keep track of the relocation associated with the first init_array entry.
612 if (init_array && i->r_offset == init_array->getAddr()) {
613 if (init_array_reloc) {
614 fprintf(stderr, "Found multiple relocations for the first init_array entry. Skipping\n");
>>> CID 158597: (RESOURCE_LEAK)
>>> Variable "relhack" going out of scope leaks the storage it points to.
615 return -1;
616 }
617 new_rels.push_back(*i);
618 init_array_reloc = new_rels.size();
619 } else if (!(loc.getSection()->getFlags() & SHF_WRITE) || (ELF32_R_TYPE(i->r_info) != rel_type)) {
620 // Don't pack relocations happening in non writable sections.
/build/unix/elfhack/elfhack.cpp: 615 in do_relocation_section<Elf_Rel>(Elf *, unsigned int, unsigned int, bool, bool)()
609 }
610 }
611 // Keep track of the relocation associated with the first init_array entry.
612 if (init_array && i->r_offset == init_array->getAddr()) {
613 if (init_array_reloc) {
614 fprintf(stderr, "Found multiple relocations for the first init_array entry. Skipping\n");
>>> CID 158597: (RESOURCE_LEAK)
>>> Variable "relhack" going out of scope leaks the storage it points to.
615 return -1;
616 }
617 new_rels.push_back(*i);
618 init_array_reloc = new_rels.size();
619 } else if (!(loc.getSection()->getFlags() & SHF_WRITE) || (ELF32_R_TYPE(i->r_info) != rel_type)) {
620 // Don't pack relocations happening in non writable sections.
/build/unix/elfhack/elfhack.cpp: 746 in do_relocation_section<Elf_Rela>(Elf *, unsigned int, unsigned int, bool, bool)()
740 break;
741 }
742 }
743
744 if (mprotect_cb == 0) {
745 fprintf(stderr, "Couldn't find .bss. Skipping\n");
>>> CID 158597: (RESOURCE_LEAK)
>>> Variable "relhack" going out of scope leaks the storage it points to.
746 return -1;
747 }
748 }
749
750 section->rels.assign(new_rels.begin(), new_rels.end());
751 section->shrink(new_rels.size() * section->getEntSize());
/build/unix/elfhack/elfhack.cpp: 746 in do_relocation_section<Elf_Rela>(Elf *, unsigned int, unsigned int, bool, bool)()
740 break;
741 }
742 }
743
744 if (mprotect_cb == 0) {
745 fprintf(stderr, "Couldn't find .bss. Skipping\n");
>>> CID 158597: (RESOURCE_LEAK)
>>> Variable "relhack" going out of scope leaks the storage it points to.
746 return -1;
747 }
748 }
749
750 section->rels.assign(new_rels.begin(), new_rels.end());
751 section->shrink(new_rels.size() * section->getEntSize());
/build/unix/elfhack/elfhack.cpp: 746 in do_relocation_section<Elf_Rel>(Elf *, unsigned int, unsigned int, bool, bool)()
740 break;
741 }
742 }
743
744 if (mprotect_cb == 0) {
745 fprintf(stderr, "Couldn't find .bss. Skipping\n");
>>> CID 158597: (RESOURCE_LEAK)
>>> Variable "relhack" going out of scope leaks the storage it points to.
746 return -1;
747 }
748 }
749
750 section->rels.assign(new_rels.begin(), new_rels.end());
751 section->shrink(new_rels.size() * section->getEntSize());
/build/unix/elfhack/elfhack.cpp: 746 in do_relocation_section<Elf_Rel>(Elf *, unsigned int, unsigned int, bool, bool)()
740 break;
741 }
742 }
743
744 if (mprotect_cb == 0) {
745 fprintf(stderr, "Couldn't find .bss. Skipping\n");
>>> CID 158597: (RESOURCE_LEAK)
>>> Variable "relhack" going out of scope leaks the storage it points to.
746 return -1;
747 }
748 }
749
750 section->rels.assign(new_rels.begin(), new_rels.end());
751 section->shrink(new_rels.size() * section->getEntSize());
Updated•9 years ago
|
Status: NEW → RESOLVED
Closed: 9 years ago
Resolution: --- → DUPLICATE
| Assignee | ||
Updated•5 years ago
|
Product: Firefox for Android → Firefox for Android Graveyard
You need to log in
before you can comment on or make changes to this bug.
Description
•