Hi Matthew,

> -----Original Message-----
> From: Gcc-patches <gcc-patches-boun...@gcc.gnu.org> On Behalf Of
> Matthew Malcomson via Gcc-patches
> Sent: 24 November 2020 15:47
> To: gcc-patches@gcc.gnu.org
> Cc: Richard Sandiford <richard.sandif...@arm.com>
> Subject: libsanitizer: Hwasan reporting check for dladdr failing
> 
> Hello there,
> 
> This is the compiler-rt patch I'd like to cherry-pick so that the hwasan tests
> pass.
> 
> It is in LLVM as commit 83ac18205ec69a00ac2be3b603bc3a61293fbe89.
> 
> Ok for trunk?
> 
> Also is the libhwasan library merge from the below email OK for trunk?
> https://gcc.gnu.org/pipermail/gcc-patches/2020-November/558999.html
> (Note I would also add a line to README.gcc mentioning compiler-
> rt/lib/hwasan
> on top of the changes in that patch).
> 
> I would guess so, but wasn't certain the OK had ever been said anywhere.

I believe merges from an upstream are generally considered pre-approved. In any 
case, I see that merge committed as 98f792ff538109c71d85ab2a61461cd090f3b9f3

Thanks,
Kyrill

> 
> Regards,
> Matthew
> 
> -------------------------
> 
> 
> 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
> 
> 
> ###############     Attachment also inlined for ease of reply
> ###############
> 
> 
> diff --git a/libsanitizer/hwasan/hwasan_report.cpp
> b/libsanitizer/hwasan/hwasan_report.cpp
> index
> 0be7deeaee1a0bd523d9e0fe1dc3b1311b3920e2..894a149775f291bae9cad8
> 33b1ac54914212f405 100644
> --- a/libsanitizer/hwasan/hwasan_report.cpp
> +++ b/libsanitizer/hwasan/hwasan_report.cpp
> @@ -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);

Reply via email to