git: 2d499d505262 - main - linker_set: Disable ASAN only in userspace

Mark Johnston markj at FreeBSD.org
Fri May 7 18:33:40 UTC 2021


The branch main has been updated by markj:

URL: https://cgit.FreeBSD.org/src/commit/?id=2d499d505262c9c965fc5f4fd36afdd2bb7cad3d

commit 2d499d505262c9c965fc5f4fd36afdd2bb7cad3d
Author:     Mark Johnston <markj at FreeBSD.org>
AuthorDate: 2021-05-07 18:24:37 +0000
Commit:     Mark Johnston <markj at FreeBSD.org>
CommitDate: 2021-05-07 18:31:08 +0000

    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 fe3d8086fb6f).
    
    Reviewed by:    andrew, kib
    Sponsored by:   The FreeBSD Foundation
    Differential Revision:  https://reviews.freebsd.org/D30126
---
 sys/sys/linker_set.h | 13 ++++++++++++-
 1 file changed, 12 insertions(+), 1 deletion(-)

diff --git a/sys/sys/linker_set.h b/sys/sys/linker_set.h
index f957858ada04..7c12ae215018 100644
--- a/sys/sys/linker_set.h
+++ b/sys/sys/linker_set.h
@@ -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 */


More information about the dev-commits-src-all mailing list