From fb6b2a5f4ce592bdcc3388908f21709236dd9c01 Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Thu, 18 Apr 2019 17:41:41 +0200 Subject: [PATCH] Don't try to read a build_id as string in find_alt_debug_info_link. The GCC8 address sanitizer found an issue in find_alt_debug_info_link. It tried to convert a build-id byte sequence into a string. But the build-id byte sequence is not a zero terminated sequence of chars. So it could run off way past the section data. The code never actually uses the build-id. It could use it to verify the referenced alt-file is the correct one. But since it uses elfutils to actually load the alt file it doesn't have to, since elfutils will already check the build-id matches. So just remove the build_id argument from find_alt_debug_info_link and don't try to convert and return it as a string. * src/abg-dwarf-reader.cc (find_alt_debug_info_link): Remove build_id argument. Don't try to read the buildid chars as a string. (find_alt_debug_info): Don't call find_alt_debug_info_link with a build_id string argument. Signed-off-by: Mark Wielaard Signed-off-by: Dodji Seketeli --- src/abg-dwarf-reader.cc | 13 +++---------- 1 file changed, 3 insertions(+), 10 deletions(-) diff --git a/src/abg-dwarf-reader.cc b/src/abg-dwarf-reader.cc index 1815034c..29e129c8 100644 --- a/src/abg-dwarf-reader.cc +++ b/src/abg-dwarf-reader.cc @@ -1127,23 +1127,18 @@ get_binary_load_address(Elf *elf_handle, return false; } -/// Find the file name of the alternate debug info file, as well as -/// its build ID. +/// Find the file name of the alternate debug info file. /// /// @param elf_module the elf module to consider. /// /// @param out parameter. Is set to the file name of the alternate /// debug info file, iff this function returns true. /// -/// @param out parameter. Is set to the build ID of the alternate -/// debug info file. -/// /// @return true iff the location of the alternate debug info file was /// found. static bool find_alt_debug_info_link(Dwfl_Module *elf_module, - string &alt_file_name, - string &build_id) + string &alt_file_name) { GElf_Addr bias = 0; Dwarf *dwarf = dwfl_module_getdwarf(elf_module, &bias); @@ -1187,7 +1182,6 @@ find_alt_debug_info_link(Dwfl_Module *elf_module, if (buildid == 0 || alt_name == 0) return false; - build_id = buildid; alt_file_name = alt_name; return true; } @@ -1274,8 +1268,7 @@ find_alt_debug_info(Dwfl_Module *elf_module, return 0; Dwarf* result = 0; - string build_id; - find_alt_debug_info_link(elf_module, alt_file_name, build_id); + find_alt_debug_info_link(elf_module, alt_file_name); #ifdef LIBDW_HAS_DWARF_GETALT // We are on recent versions of elfutils where the function -- 2.43.5