Fix a seg fault when unallocated mem handle passed to hipIpcOpenMemHandle API

also validate the flag argument passed to hipIpcOpenMemHandle API and return
error if it is not equal to "hipIpcMemLazyEnablePeerAccess" (defined to 0)
and it is the only supported flag currenlty for this API.

SWDEV-253462

Change-Id: Ie1c8b79c680a29dc72bf262cf53ae5e011fb1247
This commit is contained in:
Aryan Salmanpour
2020-10-05 16:33:32 -04:00
کامیت شده توسط Aryan Salmanpour
والد 04b773471b
کامیت 89964dbbd4
+5 -1
مشاهده پرونده
@@ -1970,7 +1970,7 @@ hipError_t hipIpcOpenMemHandle(void** dev_ptr, hipIpcMemHandle_t handle, unsigne
amd::Device* device = nullptr;
ihipIpcMemHandle_t* ihandle = nullptr;
if (dev_ptr == nullptr) {
if (dev_ptr == nullptr || flags != hipIpcMemLazyEnablePeerAccess) {
HIP_RETURN(hipErrorInvalidValue);
}
@@ -1978,6 +1978,10 @@ hipError_t hipIpcOpenMemHandle(void** dev_ptr, hipIpcMemHandle_t handle, unsigne
device = hip::getCurrentDevice()->devices()[0];
ihandle = reinterpret_cast<ihipIpcMemHandle_t *>(&handle);
if (ihandle->psize == 0) {
HIP_RETURN(hipErrorInvalidValue);
}
if(!device->IpcAttach(&(ihandle->ipc_handle), ihandle->psize, flags, dev_ptr)) {
DevLogPrintfError("cannot attach ipc_handle: with ipc_size: %u flags: %u", ihandle->psize, flags);
HIP_RETURN(hipErrorInvalidDevicePointer);