-
Notifications
You must be signed in to change notification settings - Fork 14.9k
[sanitizers][windows] Add report on intercept fail to more Rtl* functions. #163818
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Conversation
…ions. That way failed interceptions of these Rtl* functions will report a message with verbosity >= 1.
|
@llvm/pr-subscribers-compiler-rt-sanitizer Author: None (bernhardu) ChangesThat way failed interceptions of these Rtl* functions will report a message with verbosity >= 1. Full diff: https://github.com/llvm/llvm-project/pull/163818.diff 1 Files Affected:
diff --git a/compiler-rt/lib/asan/asan_malloc_win.cpp b/compiler-rt/lib/asan/asan_malloc_win.cpp
index ea6f7dfaa08cf..a122834007eab 100644
--- a/compiler-rt/lib/asan/asan_malloc_win.cpp
+++ b/compiler-rt/lib/asan/asan_malloc_win.cpp
@@ -485,10 +485,11 @@ INTERCEPTOR_WINAPI(void*, RtlReAllocateHeap, HANDLE HeapHandle, DWORD Flags,
namespace __asan {
-static void TryToOverrideFunction(const char *fname, uptr new_func) {
+static void TryToOverrideFunction(const char *fname, uptr new_func,
+ uptr *orig_old_func = 0) {
// Failure here is not fatal. The CRT may not be present, and different CRT
// versions use different symbols.
- if (!__interception::OverrideFunction(fname, new_func))
+ if (!__interception::OverrideFunction(fname, new_func, orig_old_func))
VPrintf(2, "Failed to override function %s\n", fname);
}
@@ -519,16 +520,14 @@ void ReplaceSystemMalloc() {
ASAN_INTERCEPT_FUNC(HeapAlloc);
// Undocumented functions must be intercepted by name, not by symbol.
- __interception::OverrideFunction("RtlSizeHeap", (uptr)WRAP(RtlSizeHeap),
- (uptr *)&REAL(RtlSizeHeap));
- __interception::OverrideFunction("RtlFreeHeap", (uptr)WRAP(RtlFreeHeap),
- (uptr *)&REAL(RtlFreeHeap));
- __interception::OverrideFunction("RtlReAllocateHeap",
- (uptr)WRAP(RtlReAllocateHeap),
- (uptr *)&REAL(RtlReAllocateHeap));
- __interception::OverrideFunction("RtlAllocateHeap",
- (uptr)WRAP(RtlAllocateHeap),
- (uptr *)&REAL(RtlAllocateHeap));
+ TryToOverrideFunction("RtlSizeHeap", (uptr)WRAP(RtlSizeHeap),
+ (uptr *)&REAL(RtlSizeHeap));
+ TryToOverrideFunction("RtlFreeHeap", (uptr)WRAP(RtlFreeHeap),
+ (uptr *)&REAL(RtlFreeHeap));
+ TryToOverrideFunction("RtlReAllocateHeap", (uptr)WRAP(RtlReAllocateHeap),
+ (uptr *)&REAL(RtlReAllocateHeap));
+ TryToOverrideFunction("RtlAllocateHeap", (uptr)WRAP(RtlAllocateHeap),
+ (uptr *)&REAL(RtlAllocateHeap));
} else {
#define INTERCEPT_UCRT_FUNCTION(func) \
if (!INTERCEPT_FUNCTION_DLLIMPORT( \
|
|
✅ With the latest revision this PR passed the C/C++ code formatter. |
It looks like it is for |
|
Adding @mcgov as a reviewer since they were the original author of those interceptions |
Thanks for spotting this, I assume the first comment in the pull request gets used as commit message, so correcting that one is enough? Also pushed a separate fix for the formatting, as committing will squash them? |
Yep!
Yes. |
That way failed interceptions of these Rtl* functions will report a message with verbosity >= 2.