Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/trunk]: src/sys/sys Expand the support of __no[sanitizer] attributes



details:   https://anonhg.NetBSD.org/src/rev/7e93e1d9cd91
branches:  trunk
changeset: 746095:7e93e1d9cd91
user:      kamil <kamil%NetBSD.org@localhost>
date:      Sat Mar 21 22:45:47 2020 +0000

description:
Expand the support of __no[sanitizer] attributes

Add support for RUMPKERNEL that can reuse these attributes in the same code.
These macros are not intended to be used by userland and are still disabled
there. They are a NetBSD specific extension.

Add proper support for clang and GCC.

Set __no[sanitizer] only under a sanitizer, as otherwise there are build
warnings about unused compiler attributes.

Reviewed by <maxv>

diffstat:

 sys/sys/cdefs.h |  23 ++++++++++++-----------
 1 files changed, 12 insertions(+), 11 deletions(-)

diffs (59 lines):

diff -r a3fadee16c0e -r 7e93e1d9cd91 sys/sys/cdefs.h
--- a/sys/sys/cdefs.h   Sat Mar 21 20:20:59 2020 +0000
+++ b/sys/sys/cdefs.h   Sat Mar 21 22:45:47 2020 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: cdefs.h,v 1.150 2019/12/08 11:48:15 maxv Exp $ */
+/*     $NetBSD: cdefs.h,v 1.151 2020/03/21 22:45:47 kamil Exp $        */
 
 /* * Copyright (c) 1991, 1993
  *     The Regents of the University of California.  All rights reserved.
@@ -38,9 +38,6 @@
 
 #ifdef _KERNEL_OPT
 #include "opt_diagnostic.h"
-#include "opt_kasan.h"
-#include "opt_kcsan.h"
-#include "opt_kmsan.h"
 #endif
 
 /*
@@ -336,28 +333,32 @@
 #define        __unreachable() do {} while (/*CONSTCOND*/0)
 #endif
 
-#if defined(_KERNEL)
-#if __GNUC_PREREQ__(4, 9) && defined(KASAN)
+#if defined(_KERNEL) || defined(_RUMPKERNEL)
+#if defined(__clang__) && __has_feature(address_sanitizer)
+#define        __noasan        __attribute__((no_sanitize("kernel-address", "address")))
+#elif __GNUC_PREREQ__(4, 9) && defined(__SANITIZE_ADDRESS__)
 #define        __noasan        __attribute__((no_sanitize_address))
 #else
 #define        __noasan        /* nothing */
 #endif
 
-#if __GNUC_PREREQ__(4, 9) && defined(KCSAN)
+#if defined(__clang__) && __has_feature(thread_sanitizer)
+#define        __nocsan        __attribute__((no_sanitize("thread")))
+#elif __GNUC_PREREQ__(4, 9) && defined(__SANITIZE_THREAD__)
 #define        __nocsan        __attribute__((no_sanitize_thread))
 #else
 #define        __nocsan        /* nothing */
 #endif
 
-#if defined(__clang__) && defined(KMSAN)
-#define        __nomsan        __attribute__((no_sanitize("kernel-memory")))
+#if defined(__clang__) && __has_feature(memory_sanitizer)
+#define        __nomsan        __attribute__((no_sanitize("kernel-memory", "memory")))
 #else
 #define        __nomsan        /* nothing */
 #endif
 
-#if defined(__clang__)
+#if defined(__clang__) && __has_feature(undefined_behavior_sanitizer)
 #define __noubsan      __attribute__((no_sanitize("undefined")))
-#elif __GNUC_PREREQ__(4, 9)
+#elif __GNUC_PREREQ__(4, 9) && defined(__SANITIZE_UNDEFINED__)
 #define __noubsan      __attribute__((no_sanitize_undefined))
 #else
 #define __noubsan      /* nothing */



Home | Main Index | Thread Index | Old Index