[all-commits] [llvm/llvm-project] f458d9: [lsan][darwin] Unmask camouflaged class_rw_t pointers

Leonard Grey via All-commits all-commits at lists.llvm.org
Fri Sep 2 08:26:08 PDT 2022


  Branch: refs/heads/main
  Home:   https://github.com/llvm/llvm-project
  Commit: f458d9f6f892c3765174ad8f0cc912d930329f43
      https://github.com/llvm/llvm-project/commit/f458d9f6f892c3765174ad8f0cc912d930329f43
  Author: Leonard Grey <lgrey at chromium.org>
  Date:   2022-09-02 (Fri, 02 Sep 2022)

  Changed paths:
    M compiler-rt/lib/lsan/lsan_common.cpp

  Log Message:
  -----------
  [lsan][darwin] Unmask camouflaged class_rw_t pointers

Detailed motivation here: https://docs.google.com/document/d/1xUNo5ovPKJMYxitiHUQVRxGI3iUmspI51Jm4w8puMwo

check-asan (with LSAN enabled) and check-lsan are currently broken on recent macOS versions, due to pervasive false positives. Whenever the Objective-C runtime realizes a class, it allocates data for it, then stores that data with flags in the low bits. This means LSAN can not recognize it as a pointer while scanning.

This change checks every potential pointer on Apple platforms, and if the high bit is set, attempts to extract a pointer by masking out the high bit and flags. This is ugly, but it's also the best approach I could think of (see doc above); very open to other suggestions.

Differential Revision: https://reviews.llvm.org/D133126




More information about the All-commits mailing list