Skip to content
  • Teresa Johnson's avatar
    [compiler-rt][asan][hwasan] Refactor shadow setup into sanitizer_common (NFCI) · 5d2be1a1
    Teresa Johnson authored
    Summary:
    This refactors some common support related to shadow memory setup from
    asan and hwasan into sanitizer_common. This should not only reduce code
    duplication but also make these facilities available for new compiler-rt
    uses (e.g. heap profiling).
    
    In most cases the separate copies of the code were either identical, or
    at least functionally identical. A few notes:
    
    In ProtectGap, the asan version checked the address against an upper
    bound (kZeroBaseMaxShadowStart, which is (2^18). I have created a copy
    of kZeroBaseMaxShadowStart in hwasan_mapping.h, with the same value, as
    it isn't clear why that code should not do the same check. If it
    shouldn't, I can remove this and guard this check so that it only
    happens for asan.
    
    In asan's InitializeShadowMemory, in the dynamic shadow case it was
    setting __asan_shadow_memory_dynamic_address to 0 (which then sets both
    macro SHADOW_OFFSET as well as macro kLowShadowBeg to 0) before calling
    FindDynamicShadowStart(). AFAICT this is only needed because
    FindDynamicShadowStart utilizes kHighShadowEnd to
    get the shadow size, and kHighShadowEnd is a macro invoking
    MEM_TO_SHADOW(kHighMemEnd) which in turn invokes:
    (((kHighMemEnd) >> SHADOW_SCALE) + (SHADOW_OFFSET))
    I.e. it computes the shadow space needed by kHighMemEnd (the shift), and
    adds the offset. Since we only want the shadow space here, the earlier
    setting of SHADOW_OFFSET to 0 via __asan_shadow_memory_dynamic_address
    accomplishes this. In the hwasan version, it simply gets the shadow
    space via "MemToShadowSize(kHighMemEnd)", where MemToShadowSize just
    does the shift. I've simplified the asan handling to do the same
    thing, and therefore was able to remove the setting of the SHADOW_OFFSET
    via __asan_shadow_memory_dynamic_address to 0.
    
    Reviewers: vitalybuka, kcc, eugenis
    
    Subscribers: dberris, #sanitizers, llvm-commits, davidxl
    
    Tags: #sanitizers
    
    Differential Revision: https://reviews.llvm.org/D83247
    5d2be1a1
Loading