git: bf149f2e88cb - main - kmsan: Implement __msan_test_shadow()

From: Mark Johnston <markj_at_FreeBSD.org>
Date: Fri, 13 Feb 2026 15:43:25 UTC
The branch main has been updated by markj:

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

commit bf149f2e88cb3836e02ddabd9944eb58650a72ae
Author:     Mark Johnston <markj@FreeBSD.org>
AuthorDate: 2026-02-13 15:42:19 +0000
Commit:     Mark Johnston <markj@FreeBSD.org>
CommitDate: 2026-02-13 15:42:19 +0000

    kmsan: Implement __msan_test_shadow()
    
    This is needed when building OpenZFS with KMSAN enabled, as the bundled
    zstd uses it.
    
    MFC after:      1 week
---
 sys/kern/subr_msan.c | 18 ++++++++++++++++++
 1 file changed, 18 insertions(+)

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);
+}
+
 /* -------------------------------------------------------------------------- */
 
 /*