Use thread-local flag to enable memory poisoning
Allow memory poisoning to be enabled and disabled at runtime using a
thread-local flag. This allows poisoning to be disabled whenever a PSA
function is called but not through the test wrappers, removing false
positive use-after-poisons.
Signed-off-by: David Horstmann <david.horstmann@arm.com>
diff --git a/tests/src/test_memory.c b/tests/src/test_memory.c
index c277be8..dbb7b20 100644
--- a/tests/src/test_memory.c
+++ b/tests/src/test_memory.c
@@ -13,12 +13,15 @@
#include <test/macros.h>
#include <test/memory.h>
-#if defined(MBEDTLS_TEST_HAVE_ASAN)
+#if defined(MBEDTLS_TEST_MEMORY_CAN_POISON)
#include <sanitizer/asan_interface.h>
#include <stdint.h>
#endif
-#if defined(MBEDTLS_TEST_HAVE_ASAN)
+#if defined(MBEDTLS_TEST_MEMORY_CAN_POISON)
+
+_Thread_local int mbedtls_test_memory_poisoning_enabled = 0;
+
static void align_for_asan(const unsigned char **p_ptr, size_t *p_size)
{
uintptr_t start = (uintptr_t) *p_ptr;
@@ -36,6 +39,9 @@
void mbedtls_test_memory_poison(const unsigned char *ptr, size_t size)
{
+ if (!mbedtls_test_memory_poisoning_enabled) {
+ return;
+ }
if (size == 0) {
return;
}
@@ -51,4 +57,4 @@
align_for_asan(&ptr, &size);
__asan_unpoison_memory_region(ptr, size);
}
-#endif /* Asan */
+#endif /* Memory poisoning */