libsanitizer: Hwasan reporting check for dladdr failing
In `GetGlobalSizeFromDescriptor` we use `dladdr` to get info on the the current address. `dladdr` returns 0 if it failed. During testing on Linux this returned 0 to indicate failure, and populated the `info` structure with a NULL pointer which was dereferenced later. This patch checks for `dladdr` returning 0, and in that case returns 0 from `GetGlobalSizeFromDescriptor` to indicate failure of identifying the address. This occurs when `GetModuleNameAndOffsetForPC` succeeds for some address not in a dynamically loaded library. One example is when the found "module" is '[stack]' having come from parsing /proc/self/maps. Cherry-pick from 83ac18205ec69a00ac2be3b603bc3a61293fbe89. Differential Revision: https://reviews.llvm.org/D91344
This commit is contained in:
parent
1ee3d1ef10
commit
8eb12742e8
@ -254,7 +254,8 @@ static bool TagsEqual(tag_t tag, tag_t *tag_ptr) {
|
||||
static uptr GetGlobalSizeFromDescriptor(uptr ptr) {
|
||||
// Find the ELF object that this global resides in.
|
||||
Dl_info info;
|
||||
dladdr(reinterpret_cast<void *>(ptr), &info);
|
||||
if (dladdr(reinterpret_cast<void *>(ptr), &info) == 0)
|
||||
return 0;
|
||||
auto *ehdr = reinterpret_cast<const ElfW(Ehdr) *>(info.dli_fbase);
|
||||
auto *phdr_begin = reinterpret_cast<const ElfW(Phdr) *>(
|
||||
reinterpret_cast<const u8 *>(ehdr) + ehdr->e_phoff);
|
||||
|
Loading…
Reference in New Issue
Block a user