diff options
| author | Mark Johnston <markj@FreeBSD.org> | 2026-02-13 15:42:19 +0000 |
|---|---|---|
| committer | Mark Johnston <markj@FreeBSD.org> | 2026-02-13 15:42:19 +0000 |
| commit | bf149f2e88cb3836e02ddabd9944eb58650a72ae (patch) | |
| tree | d6d34f20f6a59de6474f78fccc0eed0d8056f1e2 | |
| parent | 394201ce5b4e2f84f1e39a7ce8bdc3f5a5ef8390 (diff) | |
kmsan: Implement __msan_test_shadow()
This is needed when building OpenZFS with KMSAN enabled, as the bundled
zstd uses it.
MFC after: 1 week
| -rw-r--r-- | sys/kern/subr_msan.c | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/sys/kern/subr_msan.c b/sys/kern/subr_msan.c index 883dbd2b7604..dd69375f4ed1 100644 --- a/sys/kern/subr_msan.c +++ b/sys/kern/subr_msan.c @@ -662,6 +662,7 @@ void __msan_poison_alloca(const void *, uint64_t, const char *); void __msan_unpoison_alloca(const void *, uint64_t); void __msan_warning(msan_orig_t); msan_tls_t *__msan_get_context_state(void); +intptr_t __msan_test_shadow(const void *, size_t); void __msan_instrument_asm_store(const void *addr, size_t size) @@ -726,6 +727,23 @@ __msan_get_context_state(void) return (&mtd->tls[mtd->ctx]); } +intptr_t +__msan_test_shadow(const void *addr, size_t len) +{ + uint8_t *shad; + + if (__predict_false(!kmsan_enabled)) + return (-1); + if (__predict_false(kmsan_md_unsupported((vm_offset_t)addr))) + return (-1); + + shad = (uint8_t *)kmsan_md_addr_to_shad((vm_offset_t)addr); + for (size_t i = 0; i < len; i++) + if (shad[i] != 0) + return (i); + return (-1); +} + /* -------------------------------------------------------------------------- */ /* |
