git: cf4670fe0b10 - main - kcov: Integrate with KMSAN
Mark Johnston
markj at FreeBSD.org
Tue Sep 14 18:32:45 UTC 2021
The branch main has been updated by markj:
URL: https://cgit.FreeBSD.org/src/commit/?id=cf4670fe0b1049863ed3150a6ffb0b80dad151b2
commit cf4670fe0b1049863ed3150a6ffb0b80dad151b2
Author: Mark Johnston <markj at FreeBSD.org>
AuthorDate: 2021-09-14 18:29:27 +0000
Commit: Mark Johnston <markj at FreeBSD.org>
CommitDate: 2021-09-14 18:29:27 +0000
kcov: Integrate with KMSAN
- kern_kcov.c needs to be compiled with -fsanitize=kernel-memory when
KMSAN is configured since it calls into various other subsystems.
- Disable address and memory sanitizers in kcov(4)'s coverage sanitizer
callbacks, as they do not provide useful checking. Moreover, with
KMSAN we may otherwise get false positives since the caller (coverage
sanitizer runtime) is not instrumented.
- Disable KASAN and KMSAN interceptors in subr_coverage.c, as they do
not provide any benefit but do introduce overhead when fuzzing.
Sponsored by: The FreeBSD Foundation
---
sys/conf/files | 2 +-
sys/kern/kern_kcov.c | 7 ++++---
sys/kern/subr_coverage.c | 2 +-
3 files changed, 6 insertions(+), 5 deletions(-)
diff --git a/sys/conf/files b/sys/conf/files
index a5690ec1df75..eb0c489b7833 100644
--- a/sys/conf/files
+++ b/sys/conf/files
@@ -3826,7 +3826,7 @@ kern/kern_idle.c standard
kern/kern_intr.c standard
kern/kern_jail.c standard
kern/kern_kcov.c optional kcov \
- compile-with "${NORMAL_C:N-fsanitize*}"
+ compile-with "${NORMAL_C:N-fsanitize*} ${NORMAL_C:M-fsanitize=kernel-memory}"
kern/kern_khelp.c standard
kern/kern_kthread.c standard
kern/kern_ktr.c optional ktr
diff --git a/sys/kern/kern_kcov.c b/sys/kern/kern_kcov.c
index 23e0da4cdb79..7a11f800c7ce 100644
--- a/sys/kern/kern_kcov.c
+++ b/sys/kern/kern_kcov.c
@@ -35,7 +35,8 @@
* $FreeBSD$
*/
-#ifdef KCSAN
+/* Interceptors are required for KMSAN. */
+#if defined(KASAN) || defined(KCSAN)
#define SAN_RUNTIME
#endif
@@ -191,7 +192,7 @@ get_kinfo(struct thread *td)
return (info);
}
-static void
+static void __nosanitizeaddress __nosanitizememory
trace_pc(uintptr_t ret)
{
struct thread *td;
@@ -223,7 +224,7 @@ trace_pc(uintptr_t ret)
buf[0] = index + 1;
}
-static bool
+static bool __nosanitizeaddress __nosanitizememory
trace_cmp(uint64_t type, uint64_t arg1, uint64_t arg2, uint64_t ret)
{
struct thread *td;
diff --git a/sys/kern/subr_coverage.c b/sys/kern/subr_coverage.c
index 9a719bcaecad..28467af6a8d0 100644
--- a/sys/kern/subr_coverage.c
+++ b/sys/kern/subr_coverage.c
@@ -35,7 +35,7 @@
* $FreeBSD$
*/
-#ifdef KCSAN
+#ifdef SAN_NEEDS_INTERCEPTORS
#define SAN_RUNTIME
#endif
More information about the dev-commits-src-all
mailing list