From e85f1404e855f0b8dec628c415732c8eb4aff5b2 Mon Sep 17 00:00:00 2001 From: agodavar Date: Thu, 17 Dec 2020 10:38:13 -0500 Subject: [PATCH] SWDEV-263180 : Fix null ptr dereference Change-Id: Iefc9fa3f195af45a5c5ebe075056246c930a6d84 [ROCm/clr commit: d74777d2a7a1dc74e7b8841f700e43eae0bd8bd1] --- projects/clr/hipamd/rocclr/hip_memory.cpp | 22 ++++++++++------------ 1 file changed, 10 insertions(+), 12 deletions(-) diff --git a/projects/clr/hipamd/rocclr/hip_memory.cpp b/projects/clr/hipamd/rocclr/hip_memory.cpp index 66d952b75e..c638bfce65 100755 --- a/projects/clr/hipamd/rocclr/hip_memory.cpp +++ b/projects/clr/hipamd/rocclr/hip_memory.cpp @@ -108,13 +108,13 @@ hipError_t ihipFree(void *ptr) // ================================================================================================ hipError_t ihipMalloc(void** ptr, size_t sizeBytes, unsigned int flags) { + if (ptr == nullptr) { + return hipErrorInvalidValue; + } if (sizeBytes == 0) { *ptr = nullptr; return hipSuccess; } - else if (ptr == nullptr) { - return hipErrorInvalidValue; - } bool useHostDevice = (flags & CL_MEM_SVM_FINE_GRAIN_BUFFER) != 0; amd::Context* curDevContext = hip::getCurrentDevice()->asContext(); @@ -267,13 +267,13 @@ hipError_t hipExtMallocWithFlags(void** ptr, size_t sizeBytes, unsigned int flag HIP_RETURN(hipErrorInvalidValue); } - HIP_RETURN(ihipMalloc(ptr, sizeBytes, (flags & hipDeviceMallocFinegrained)? CL_MEM_SVM_ATOMICS: 0), *ptr); + HIP_RETURN(ihipMalloc(ptr, sizeBytes, (flags & hipDeviceMallocFinegrained)? CL_MEM_SVM_ATOMICS: 0), (ptr != nullptr)? *ptr : nullptr); } hipError_t hipMalloc(void** ptr, size_t sizeBytes) { HIP_INIT_API(hipMalloc, ptr, sizeBytes); - HIP_RETURN_DURATION(ihipMalloc(ptr, sizeBytes, 0), *ptr); + HIP_RETURN_DURATION(ihipMalloc(ptr, sizeBytes, 0), (ptr != nullptr)? *ptr : nullptr); } hipError_t hipHostMalloc(void** ptr, size_t sizeBytes, unsigned int flags) { @@ -452,7 +452,7 @@ hipError_t hipMallocPitch(void** ptr, size_t* pitch, size_t width, size_t height HIP_INIT_API(hipMallocPitch, ptr, pitch, width, height); const cl_image_format image_format = { CL_R, CL_UNSIGNED_INT8 }; - HIP_RETURN(ihipMallocPitch(ptr, pitch, width, height, 1, CL_MEM_OBJECT_IMAGE2D, &image_format), *ptr); + HIP_RETURN(ihipMallocPitch(ptr, pitch, width, height, 1, CL_MEM_OBJECT_IMAGE2D, &image_format), (ptr != nullptr)? *ptr : nullptr); } hipError_t hipMalloc3D(hipPitchedPtr* pitchedDevPtr, hipExtent extent) { @@ -791,7 +791,9 @@ hipError_t hipHostUnregister(void* hostPtr) { // Deprecated function: hipError_t hipHostAlloc(void** ptr, size_t sizeBytes, unsigned int flags) { - HIP_RETURN(ihipMalloc(ptr, sizeBytes, flags), *ptr); + HIP_INIT_API(hipHostAlloc, ptr, sizeBytes, flags); + + HIP_RETURN(ihipMalloc(ptr, sizeBytes, flags), (ptr != nullptr)? *ptr : nullptr); }; @@ -2362,11 +2364,7 @@ hipError_t hipMallocHost(void** ptr, size_t size) { HIP_INIT_API(hipMallocHost, ptr, size); - if (ptr == nullptr) { - HIP_RETURN(hipErrorInvalidValue); - } - - HIP_RETURN_DURATION(ihipMalloc(ptr, size, CL_MEM_SVM_FINE_GRAIN_BUFFER), *ptr); + HIP_RETURN_DURATION(ihipMalloc(ptr, size, CL_MEM_SVM_FINE_GRAIN_BUFFER), (ptr != nullptr)? *ptr : nullptr); } hipError_t hipFreeHost(void *ptr) {