• Mark Rutland's avatar
    kcov: prefault the kcov_area · dc55daff
    Mark Rutland authored
    On many architectures the vmalloc area is lazily faulted in upon first
    access.  This is problematic for KCOV, as __sanitizer_cov_trace_pc
    accesses the (vmalloc'd) kcov_area, and fault handling code may be
    instrumented.  If an access to kcov_area faults, this will result in
    mutual recursion through the fault handling code and
    __sanitizer_cov_trace_pc(), eventually leading to stack corruption
    and/or overflow.
    
    We can avoid this by faulting in the kcov_area before
    __sanitizer_cov_trace_pc() is permitted to access it.  Once it has been
    faulted in, it will remain present in the process page tables, and will
    not fault again.
    
    [akpm@linux-foundation.org: code cleanup]
    [akpm@linux-foundation.org: add comment explaining kcov_fault_in_area()]
    [akpm@linux-foundation.org: fancier code comment from Mark]
    Link: http://lkml.kernel.org/r/20180504135535.53744-3-mark.rutland@arm.com
    
    Signed-off-by: Mark Rutland's avatarMark Rutland <mark.rutland@arm.com>
    Acked-by: default avatarAndrey Ryabinin <aryabinin@virtuozzo.com>
    Cc: Dmitry Vyukov <dvyukov@google.com>
    Cc: Ingo Molnar <mingo@redhat.com>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    dc55daff
kcov.c 11 KB