aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSim Sun <sunsj1231@gmail.com>2020-08-14 21:36:30 -0700
committerMark Mentovai <mark@chromium.org>2020-08-15 05:28:45 +0000
commit62d927241962ad40f3bca9fa3841edf9d7a56b5f (patch)
treeb4015792a6ae8bfe841acfea0a6821fcc643afcc
parentprocessor: subtract 1 from return pointers while scanning (diff)
downloadbreakpad-62d927241962ad40f3bca9fa3841edf9d7a56b5f.tar.xz
linux: Fix segfault when there is no section header in ELF file
Some vendor library doesn't contain the section header. It causes segmentation fault in `FindElfClassSection`. > e_shoff: > This member holds the section header table's file offset in bytes. > If the file has no section header table this member holds zero. Change-Id: Id98d6ff3bd16af4541deb5a55a8fad2fa74eda23 Reviewed-on: https://chromium-review.googlesource.com/c/breakpad/breakpad/+/2354427 Reviewed-by: Mark Mentovai <mark@chromium.org>
-rw-r--r--src/common/linux/elfutils.cc6
1 files changed, 6 insertions, 0 deletions
diff --git a/src/common/linux/elfutils.cc b/src/common/linux/elfutils.cc
index ce9e9c1c..aa95357a 100644
--- a/src/common/linux/elfutils.cc
+++ b/src/common/linux/elfutils.cc
@@ -57,6 +57,12 @@ void FindElfClassSection(const char* elf_base,
const Ehdr* elf_header = reinterpret_cast<const Ehdr*>(elf_base);
assert(elf_header->e_ident[EI_CLASS] == ElfClass::kClass);
+ if (elf_header->e_shoff == 0) {
+ *section_start = NULL;
+ *section_size = 0;
+ return;
+ }
+
const Shdr* sections =
GetOffset<ElfClass, Shdr>(elf_header, elf_header->e_shoff);
const Shdr* section_names = sections + elf_header->e_shstrndx;