]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/commit
Add the KASAN runtime
authorMark Johnston <markj@FreeBSD.org>
Tue, 13 Apr 2021 21:39:19 +0000 (17:39 -0400)
committerMark Johnston <markj@FreeBSD.org>
Tue, 13 Apr 2021 21:42:20 +0000 (17:42 -0400)
commit38da497a4dfcf1979c8c2b0e9f3fa0564035c147
treeda415fffeecb7056023abd74f64edf2ba46d3b8e
parent01028c736cbcdba079967c787bee1551fc8439aa
Add the KASAN runtime

KASAN enables the use of LLVM's AddressSanitizer in the kernel.  This
feature makes use of compiler instrumentation to validate memory
accesses in the kernel and detect several types of bugs, including
use-after-frees and out-of-bounds accesses.  It is particularly
effective when combined with test suites or syzkaller.  KASAN has high
CPU and memory usage overhead and so is not suited for production
environments.

The runtime and pmap maintain a shadow of the kernel map to store
information about the validity of memory mapped at a given kernel
address.

The runtime implements a number of functions defined by the compiler
ABI.  These are prefixed by __asan.  The compiler emits calls to
__asan_load*() and __asan_store*() around memory accesses, and the
runtime consults the shadow map to determine whether a given access is
valid.

kasan_mark() is called by various kernel allocators to update state in
the shadow map.  Updates to those allocators will come in subsequent
commits.

The runtime also defines various interceptors.  Some low-level routines
are implemented in assembly and are thus not amenable to compiler
instrumentation.  To handle this, the runtime implements these routines
on behalf of the rest of the kernel.  The sanitizer implementation
validates memory accesses manually before handing off to the real
implementation.

The sanitizer in a KASAN-configured kernel can be disabled by setting
the loader tunable debug.kasan.disable=1.

Obtained from: NetBSD
MFC after: 2 weeks
Sponsored by: The FreeBSD Foundation
Differential Revision: https://reviews.freebsd.org/D29416
share/man/man9/Makefile
share/man/man9/kasan.9 [new file with mode: 0644]
sys/conf/files
sys/kern/subr_asan.c [new file with mode: 0644]
sys/sys/asan.h [new file with mode: 0644]