From 8cc54b0d1db174c7e75b0ef96bae5e2ad6c43cb8 Mon Sep 17 00:00:00 2001 From: "Zhao, Maosu" Date: Wed, 15 Jan 2025 19:24:23 -0800 Subject: [PATCH 1/2] [DevASAN] Only report warning if passing host ptr to kernel --- .../layers/sanitizer/asan/asan_interceptor.cpp | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/source/loader/layers/sanitizer/asan/asan_interceptor.cpp b/source/loader/layers/sanitizer/asan/asan_interceptor.cpp index 72677bff67..3e040315cd 100644 --- a/source/loader/layers/sanitizer/asan/asan_interceptor.cpp +++ b/source/loader/layers/sanitizer/asan/asan_interceptor.cpp @@ -721,7 +721,10 @@ ur_result_t AsanInterceptor::prepareLaunch( ContextInfo->Handle, DeviceInfo->Handle, (uptr)Ptr)) { ReportInvalidKernelArgument(Kernel, ArgIndex, (uptr)Ptr, ValidateResult, PtrPair.second); - exitWithErrors(); + if (ValidateResult.Type != + ValidateUSMResult::MAYBE_HOST_POINTER) { + exitWithErrors(); + } } } } @@ -867,10 +870,12 @@ AsanInterceptor::findAllocInfoByAddress(uptr Address) { return std::optional{}; } --It; - // Make sure we got the right AllocInfo - assert(Address >= It->second->AllocBegin && - Address < It->second->AllocBegin + It->second->AllocSize && - "Wrong AllocInfo for the address"); + + // Maybe it's a host pointer + if (Address < It->second->AllocBegin || + Address >= It->second->AllocBegin + It->second->AllocSize) { + return std::nullopt; + } return It; } From 2a03334c430582d773ffa94537b5b326242f7845 Mon Sep 17 00:00:00 2001 From: "Zhao, Maosu" Date: Wed, 15 Jan 2025 21:09:35 -0800 Subject: [PATCH 2/2] minor update --- source/loader/layers/sanitizer/asan/asan_interceptor.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/loader/layers/sanitizer/asan/asan_interceptor.cpp b/source/loader/layers/sanitizer/asan/asan_interceptor.cpp index 3e040315cd..a7707237a6 100644 --- a/source/loader/layers/sanitizer/asan/asan_interceptor.cpp +++ b/source/loader/layers/sanitizer/asan/asan_interceptor.cpp @@ -867,7 +867,7 @@ AsanInterceptor::findAllocInfoByAddress(uptr Address) { std::shared_lock Guard(m_AllocationMapMutex); auto It = m_AllocationMap.upper_bound(Address); if (It == m_AllocationMap.begin()) { - return std::optional{}; + return std::nullopt; } --It;