[compiler-rt] [lsan] Fix free(NULL) interception during initialization (PR #106912)

via llvm-commits llvm-commits at lists.llvm.org
Wed Sep 11 14:52:32 PDT 2024


https://github.com/rust-cloud-vms[bot] updated https://github.com/llvm/llvm-project/pull/106912

>From d9157c5896a9e18ef21ab7a443b66af7bfbcdf99 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Tomasz=20Mi=C4=85sko?= <tomasz.miasko at gmail.com>
Date: Sun, 1 Sep 2024 15:56:34 +0000
Subject: [PATCH] [lsan] Fix free(NULL) interception during initialization

Previously an attempt to free a null pointer during initialization would
fail on ENSURE_LSAN_INITED assertion (since a null pointer is not owned
by DlsymAlloc).
---
 compiler-rt/lib/lsan/lsan_interceptors.cpp                | 2 ++
 compiler-rt/test/sanitizer_common/TestCases/dlsym_alloc.c | 3 ---
 2 files changed, 2 insertions(+), 3 deletions(-)

diff --git a/compiler-rt/lib/lsan/lsan_interceptors.cpp b/compiler-rt/lib/lsan/lsan_interceptors.cpp
index b569c337e97641..efbf2fdfb0ab3f 100644
--- a/compiler-rt/lib/lsan/lsan_interceptors.cpp
+++ b/compiler-rt/lib/lsan/lsan_interceptors.cpp
@@ -77,6 +77,8 @@ INTERCEPTOR(void*, malloc, uptr size) {
 }
 
 INTERCEPTOR(void, free, void *p) {
+  if (UNLIKELY(!p))
+    return;
   if (DlsymAlloc::PointerIsMine(p))
     return DlsymAlloc::Free(p);
   ENSURE_LSAN_INITED;
diff --git a/compiler-rt/test/sanitizer_common/TestCases/dlsym_alloc.c b/compiler-rt/test/sanitizer_common/TestCases/dlsym_alloc.c
index 3905ac40ae2dc7..0228c3bc50dbd9 100644
--- a/compiler-rt/test/sanitizer_common/TestCases/dlsym_alloc.c
+++ b/compiler-rt/test/sanitizer_common/TestCases/dlsym_alloc.c
@@ -3,9 +3,6 @@
 // FIXME: TSAN does not use DlsymAlloc.
 // UNSUPPORTED: tsan
 
-// FIXME: https://github.com/llvm/llvm-project/pull/106912
-// XFAIL: lsan
-
 #include <stdlib.h>
 
 const char *test() __attribute__((disable_sanitizer_instrumentation)) {



More information about the llvm-commits mailing list