Skip to content

Commit f8e89b4

Browse files
Merge pull request #1936 from isaacault/iault/seg_fault_fix
Fix unintended crash in catch blocks.
2 parents d88215c + 709e467 commit f8e89b4

File tree

3 files changed

+18
-10
lines changed

3 files changed

+18
-10
lines changed

source/adapters/cuda/image.cpp

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -455,32 +455,40 @@ UR_APIEXPORT ur_result_t UR_APICALL urBindlessImagesImageAllocateExp(
455455

456456
// Allocate a cuArray
457457
if (pImageDesc->numMipLevel == 1) {
458-
CUarray ImageArray;
458+
CUarray ImageArray{};
459459

460460
try {
461461
UR_CHECK_ERROR(cuArray3DCreate(&ImageArray, &array_desc));
462462
*phImageMem = (ur_exp_image_mem_native_handle_t)ImageArray;
463463
} catch (ur_result_t Err) {
464-
cuArrayDestroy(ImageArray);
464+
if (ImageArray != CUarray{}) {
465+
UR_CHECK_ERROR(cuArrayDestroy(ImageArray));
466+
}
465467
return Err;
466468
} catch (...) {
467-
cuArrayDestroy(ImageArray);
469+
if (ImageArray != CUarray{}) {
470+
UR_CHECK_ERROR(cuArrayDestroy(ImageArray));
471+
}
468472
return UR_RESULT_ERROR_UNKNOWN;
469473
}
470474
} else // Allocate a cuMipmappedArray
471475
{
472-
CUmipmappedArray mip_array;
476+
CUmipmappedArray mip_array{};
473477
array_desc.Flags = CUDA_ARRAY3D_SURFACE_LDST;
474478

475479
try {
476480
UR_CHECK_ERROR(cuMipmappedArrayCreate(&mip_array, &array_desc,
477481
pImageDesc->numMipLevel));
478482
*phImageMem = (ur_exp_image_mem_native_handle_t)mip_array;
479483
} catch (ur_result_t Err) {
480-
cuMipmappedArrayDestroy(mip_array);
484+
if (mip_array) {
485+
UR_CHECK_ERROR(cuMipmappedArrayDestroy(mip_array));
486+
}
481487
return Err;
482488
} catch (...) {
483-
cuMipmappedArrayDestroy(mip_array);
489+
if (mip_array) {
490+
UR_CHECK_ERROR(cuMipmappedArrayDestroy(mip_array));
491+
}
484492
return UR_RESULT_ERROR_UNKNOWN;
485493
}
486494
}

source/adapters/cuda/memory.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -439,7 +439,7 @@ ur_result_t allocateMemObjOnDeviceIfNeeded(ur_mem_handle_t Mem,
439439
UR_CHECK_ERROR(cuMemAlloc(&DevPtr, Buffer.Size));
440440
}
441441
} else {
442-
CUarray ImageArray;
442+
CUarray ImageArray{};
443443
CUsurfObject Surface;
444444
try {
445445
auto &Image = std::get<SurfaceMem>(Mem->Mem);
@@ -465,12 +465,12 @@ ur_result_t allocateMemObjOnDeviceIfNeeded(ur_mem_handle_t Mem,
465465
UR_CHECK_ERROR(cuSurfObjectCreate(&Surface, &ImageResDesc));
466466
Image.SurfObjs[DeviceIdx] = Surface;
467467
} catch (ur_result_t Err) {
468-
if (ImageArray) {
468+
if (ImageArray != CUarray{}) {
469469
UR_CHECK_ERROR(cuArrayDestroy(ImageArray));
470470
}
471471
return Err;
472472
} catch (...) {
473-
if (ImageArray) {
473+
if (ImageArray != CUarray{}) {
474474
UR_CHECK_ERROR(cuArrayDestroy(ImageArray));
475475
}
476476
return UR_RESULT_ERROR_UNKNOWN;

source/adapters/hip/memory.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -498,7 +498,7 @@ ur_result_t allocateMemObjOnDeviceIfNeeded(ur_mem_handle_t Mem,
498498
UR_CHECK_ERROR(hipMalloc(&DevPtr, Buffer.Size));
499499
}
500500
} else {
501-
hipArray *ImageArray;
501+
hipArray *ImageArray{};
502502
hipSurfaceObject_t Surface;
503503
try {
504504
auto &Image = std::get<SurfaceMem>(Mem->Mem);

0 commit comments

Comments
 (0)