Skip to content

Commit 68487be

Browse files
committed
[SWDEV-563823][Compiler-rt][ASan] Simplify API Logic
'asan_hsa_amd_ipc_memory_create'. - Use reinterpret_cast<uptr> for pointer arithmetic. - Allow only valid values of ptr and len in non-ASan mode. - ptr == Actual agentBaseAddress && len == original_len_used_in_alloc - Allow only valid values of ptr and len in ASan mode. pinfo resembles to pointer info extracted in GetBlockBegin function. - ptr == pinfo.agentBaseAddress && len == pinfo.sizeInBytes - ptr == original_ptr_returned_by_ASAN && len == original_len_used_in_alloc
1 parent ee94496 commit 68487be

File tree

3 files changed

+32
-4
lines changed

3 files changed

+32
-4
lines changed

compiler-rt/lib/asan/asan_allocator.cpp

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1399,7 +1399,10 @@ DECLARE_REAL(hsa_status_t, hsa_amd_ipc_memory_attach,
13991399
DECLARE_REAL(hsa_status_t, hsa_amd_ipc_memory_detach, void *mapped_ptr)
14001400
DECLARE_REAL(hsa_status_t, hsa_amd_vmem_address_reserve_align, void** ptr,
14011401
size_t size, uint64_t address, uint64_t alignment, uint64_t flags)
1402-
DECLARE_REAL(hsa_status_t, hsa_amd_vmem_address_free, void* ptr, size_t size);
1402+
DECLARE_REAL(hsa_status_t, hsa_amd_vmem_address_free, void* ptr, size_t size)
1403+
DECLARE_REAL(hsa_status_t, hsa_amd_pointer_info, const void* ptr,
1404+
hsa_amd_pointer_info_t* info, void* (*alloc)(size_t),
1405+
uint32_t* num_agents_accessible, hsa_agent_t** accessible)
14031406

14041407
namespace __asan {
14051408

@@ -1452,11 +1455,11 @@ static struct AP64<LocalAddressSpaceView> AP_;
14521455
static struct AP32<LocalAddressSpaceView> AP_;
14531456
#endif
14541457

1455-
hsa_status_t asan_hsa_amd_ipc_memory_create(void *ptr, size_t len,
1456-
hsa_amd_ipc_memory_t * handle) {
1458+
hsa_status_t asan_hsa_amd_ipc_memory_create(void* ptr, size_t len,
1459+
hsa_amd_ipc_memory_t* handle) {
14571460
void *ptr_;
14581461
size_t len_ = get_allocator().GetActuallyAllocatedSize(ptr);
1459-
if (len_) {
1462+
if (len_ && len_ != len) {
14601463
static_assert(AP_.kMetadataSize == 0, "Expression below requires this");
14611464
ptr_ = reinterpret_cast<void *>(reinterpret_cast<uptr>(ptr) - kPageSize_);
14621465
} else {
@@ -1540,5 +1543,15 @@ hsa_status_t asan_hsa_amd_vmem_address_free(void* ptr, size_t size,
15401543
}
15411544
return REAL(hsa_amd_vmem_address_free)(ptr, size);
15421545
}
1546+
1547+
hsa_status_t asan_hsa_amd_pointer_info(const void* ptr,
1548+
hsa_amd_pointer_info_t* info,
1549+
void* (*alloc)(size_t),
1550+
uint32_t* num_agents_accessible,
1551+
hsa_agent_t** accessible) {
1552+
void* p = get_allocator().GetBlockBegin(ptr);
1553+
return REAL(hsa_amd_pointer_info)(p ? p : ptr, info, alloc,
1554+
num_agents_accessible, accessible);
1555+
}
15431556
} // namespace __asan
15441557
#endif

compiler-rt/lib/asan/asan_allocator.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -341,6 +341,11 @@ hsa_status_t asan_hsa_amd_vmem_address_reserve_align(void** ptr, size_t size,
341341
BufferedStackTrace* stack);
342342
hsa_status_t asan_hsa_amd_vmem_address_free(void* ptr, size_t size,
343343
BufferedStackTrace* stack);
344+
hsa_status_t asan_hsa_amd_pointer_info(const void* ptr,
345+
hsa_amd_pointer_info_t* info,
346+
void* (*alloc)(size_t),
347+
uint32_t* num_agents_accessible,
348+
hsa_agent_t** accessible);
344349
} // namespace __asan
345350
#endif
346351

compiler-rt/lib/asan/asan_interceptors.cpp

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -948,6 +948,15 @@ INTERCEPTOR(hsa_status_t, hsa_amd_vmem_address_free, void* ptr, size_t size) {
948948
return asan_hsa_amd_vmem_address_free(ptr, size, &stack);
949949
}
950950

951+
INTERCEPTOR(hsa_status_t, hsa_amd_pointer_info, const void* ptr,
952+
hsa_amd_pointer_info_t* info, void* (*alloc)(size_t),
953+
uint32_t* num_agents_accessible, hsa_agent_t** accessible) {
954+
AsanInitFromRtl();
955+
ENSURE_HSA_INITED();
956+
return asan_hsa_amd_pointer_info(ptr, info, alloc, num_agents_accessible,
957+
accessible);
958+
}
959+
951960
void InitializeAmdgpuInterceptors() {
952961
ASAN_INTERCEPT_FUNC(hsa_memory_copy);
953962
ASAN_INTERCEPT_FUNC(hsa_amd_memory_pool_allocate);
@@ -962,6 +971,7 @@ void InitializeAmdgpuInterceptors() {
962971
ASAN_INTERCEPT_FUNC(hsa_amd_ipc_memory_detach);
963972
ASAN_INTERCEPT_FUNC(hsa_amd_vmem_address_reserve_align);
964973
ASAN_INTERCEPT_FUNC(hsa_amd_vmem_address_free);
974+
ASAN_INTERCEPT_FUNC(hsa_amd_pointer_info);
965975
}
966976

967977
void ENSURE_HSA_INITED() {

0 commit comments

Comments
 (0)