msan: Support free_sized and free_aligned_sized from C23 (#144529)
Adds support to MSan for `free_sized` and `free_aligned_sized` from C23. Other sanitizers will be handled with their own separate PRs. For https://github.com/llvm/llvm-project/issues/144435 Signed-off-by: Justin King <jcking@google.com>
This commit is contained in:
@@ -34,6 +34,7 @@
|
||||
#include "sanitizer_common/sanitizer_glibc_version.h"
|
||||
#include "sanitizer_common/sanitizer_libc.h"
|
||||
#include "sanitizer_common/sanitizer_linux.h"
|
||||
#include "sanitizer_common/sanitizer_platform_interceptors.h"
|
||||
#include "sanitizer_common/sanitizer_platform_limits_netbsd.h"
|
||||
#include "sanitizer_common/sanitizer_platform_limits_posix.h"
|
||||
#include "sanitizer_common/sanitizer_stackdepot.h"
|
||||
@@ -215,6 +216,35 @@ INTERCEPTOR(void, free, void *ptr) {
|
||||
MsanDeallocate(&stack, ptr);
|
||||
}
|
||||
|
||||
#if SANITIZER_INTERCEPT_FREE_SIZED
|
||||
INTERCEPTOR(void, free_sized, void *ptr, uptr size) {
|
||||
if (UNLIKELY(!ptr))
|
||||
return;
|
||||
if (DlsymAlloc::PointerIsMine(ptr))
|
||||
return DlsymAlloc::Free(ptr);
|
||||
GET_MALLOC_STACK_TRACE;
|
||||
MsanDeallocate(&stack, ptr);
|
||||
}
|
||||
# define MSAN_MAYBE_INTERCEPT_FREE_SIZED INTERCEPT_FUNCTION(free_sized)
|
||||
#else
|
||||
# define MSAN_MAYBE_INTERCEPT_FREE_SIZED
|
||||
#endif
|
||||
|
||||
#if SANITIZER_INTERCEPT_FREE_ALIGNED_SIZED
|
||||
INTERCEPTOR(void, free_aligned_sized, void *ptr, uptr alignment, uptr size) {
|
||||
if (UNLIKELY(!ptr))
|
||||
return;
|
||||
if (DlsymAlloc::PointerIsMine(ptr))
|
||||
return DlsymAlloc::Free(ptr);
|
||||
GET_MALLOC_STACK_TRACE;
|
||||
MsanDeallocate(&stack, ptr);
|
||||
}
|
||||
# define MSAN_MAYBE_INTERCEPT_FREE_ALIGNED_SIZED \
|
||||
INTERCEPT_FUNCTION(free_aligned_sized)
|
||||
#else
|
||||
# define MSAN_MAYBE_INTERCEPT_FREE_ALIGNED_SIZED
|
||||
#endif
|
||||
|
||||
#if !SANITIZER_FREEBSD && !SANITIZER_NETBSD
|
||||
INTERCEPTOR(void, cfree, void *ptr) {
|
||||
if (UNLIKELY(!ptr))
|
||||
@@ -1775,6 +1805,8 @@ void InitializeInterceptors() {
|
||||
INTERCEPT_FUNCTION(realloc);
|
||||
INTERCEPT_FUNCTION(reallocarray);
|
||||
INTERCEPT_FUNCTION(free);
|
||||
MSAN_MAYBE_INTERCEPT_FREE_SIZED;
|
||||
MSAN_MAYBE_INTERCEPT_FREE_ALIGNED_SIZED;
|
||||
MSAN_MAYBE_INTERCEPT_CFREE;
|
||||
MSAN_MAYBE_INTERCEPT_MALLOC_USABLE_SIZE;
|
||||
MSAN_MAYBE_INTERCEPT_MALLINFO;
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
// RUN: %clang -std=c23 -O0 %s -o %t && %run %t
|
||||
// UNSUPPORTED: asan, hwasan, rtsan, tsan, msan, ubsan
|
||||
// UNSUPPORTED: asan, hwasan, rtsan, tsan, ubsan
|
||||
|
||||
#include <stddef.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
// RUN: %clang -std=c23 -O0 %s -o %t && %run %t
|
||||
// UNSUPPORTED: asan, hwasan, rtsan, tsan, msan, ubsan
|
||||
// UNSUPPORTED: asan, hwasan, rtsan, tsan, ubsan
|
||||
|
||||
#include <stddef.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
Reference in New Issue
Block a user