kmsan: Implement __msan_test_shadow()

This is needed when building OpenZFS with KMSAN enabled, as the bundled
zstd uses it.

MFC after:	1 week
This commit is contained in:
Mark Johnston
2026-02-13 15:42:19 +00:00
parent 394201ce5b
commit bf149f2e88
+18
View File
@@ -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);
}
/* -------------------------------------------------------------------------- */
/*