linker_set: Disable ASAN only in userspace

KASAN does not insert redzones around global variables and so is not
susceptible to the problem that led to us disabling ASAN for linker set
elements in the first place (see commit fe3d8086fb).

Reviewed by:	andrew, kib
Sponsored by:	The FreeBSD Foundation
Differential Revision:	https://reviews.freebsd.org/D30126
This commit is contained in:
Mark Johnston 2021-05-07 14:24:37 -04:00
parent 1a212abd54
commit 2d499d5052

View file

@ -59,12 +59,23 @@
* Private macros, not to be used outside this header file.
*/
#ifdef __GNUCLIKE___SECTION
/*
* The userspace address sanitizer inserts redzones around global variables,
* violating the assumption that linker set elements are packed.
*/
#ifdef _KERNEL
#define __NOASAN
#else
#define __NOASAN __nosanitizeaddress
#endif
#define __MAKE_SET_QV(set, sym, qv) \
__WEAK(__CONCAT(__start_set_,set)); \
__WEAK(__CONCAT(__stop_set_,set)); \
static void const * qv \
__NOASAN \
__set_##set##_sym_##sym __section("set_" #set) \
__nosanitizeaddress \
__used = &(sym)
#define __MAKE_SET(set, sym) __MAKE_SET_QV(set, sym, __MAKE_SET_CONST)
#else /* !__GNUCLIKE___SECTION */