[libunwind] Fix wrong end argument passed to decodeEHHdr() (#68813)
All but one callsite were actually passing start+length arguments.
This should not have any functional change since the end argument is
almost always ignored.
I noticed this while debugging some incorrect error messages being
printed while running the testsuite baremetal (using binaries that did
not have a valid eh_frame_hdr section): the tests print
`libunwind: unsupported .eh_frame_hdr version: 20 at
8000d30814
`
because
libunwind is reading nonsense data for .eh_frame_hdr.
This commit is contained in:
parent
325576196b
commit
05181a849b
@ -414,8 +414,8 @@ static bool checkForUnwindInfoSegment(const Elf_Phdr *phdr, size_t image_base,
|
||||
cbdata->sects->dwarf_index_section = eh_frame_hdr_start;
|
||||
cbdata->sects->dwarf_index_section_length = phdr->p_memsz;
|
||||
if (EHHeaderParser<LocalAddressSpace>::decodeEHHdr(
|
||||
*cbdata->addressSpace, eh_frame_hdr_start, phdr->p_memsz,
|
||||
hdrInfo)) {
|
||||
*cbdata->addressSpace, eh_frame_hdr_start,
|
||||
eh_frame_hdr_start + phdr->p_memsz, hdrInfo)) {
|
||||
// .eh_frame_hdr records the start of .eh_frame, but not its size.
|
||||
// Rely on a zero terminator to find the end of the section.
|
||||
cbdata->sects->dwarf_section = hdrInfo.eh_frame_ptr;
|
||||
@ -638,7 +638,8 @@ inline bool LocalAddressSpace::findUnwindSections(pint_t targetAddr,
|
||||
info.dwarf_index_section_length = SIZE_MAX;
|
||||
EHHeaderParser<LocalAddressSpace>::EHHeaderInfo hdrInfo;
|
||||
if (!EHHeaderParser<LocalAddressSpace>::decodeEHHdr(
|
||||
*this, info.dwarf_index_section, info.dwarf_index_section_length,
|
||||
*this, info.dwarf_index_section,
|
||||
info.dwarf_index_section + info.dwarf_index_section_length,
|
||||
hdrInfo)) {
|
||||
return false;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user