diff --git a/level_zero/core/source/kernel/kernel_imp.cpp b/level_zero/core/source/kernel/kernel_imp.cpp index 4ec0f7d7a2..39d6b1e808 100644 --- a/level_zero/core/source/kernel/kernel_imp.cpp +++ b/level_zero/core/source/kernel/kernel_imp.cpp @@ -487,6 +487,9 @@ ze_result_t KernelImp::setArgBuffer(uint32_t argIndex, size_t argSize, const voi auto requestedAddress = *reinterpret_cast(argVal); auto svmAllocsManager = module->getDevice()->getDriverHandle()->getSvmAllocsManager(); + if (nullptr == svmAllocsManager->getSVMAlloc(requestedAddress)) { + return ZE_RESULT_ERROR_INVALID_ARGUMENT; + } NEO::GraphicsAllocation *alloc = svmAllocsManager->getSVMAlloc(requestedAddress)->gpuAllocation; auto gpuAddress = reinterpret_cast(requestedAddress); return setArgBufferWithAlloc(argIndex, gpuAddress, alloc); diff --git a/level_zero/core/test/unit_tests/sources/kernel/test_kernel.cpp b/level_zero/core/test/unit_tests/sources/kernel/test_kernel.cpp index bf00b3e207..6038b90038 100644 --- a/level_zero/core/test/unit_tests/sources/kernel/test_kernel.cpp +++ b/level_zero/core/test/unit_tests/sources/kernel/test_kernel.cpp @@ -162,5 +162,18 @@ HWTEST2_F(SetKernelArg, givenSamplerAndKernelWhenSetArgSamplerThenCrossThreadDat auto pSamplerNormalizedCoords = ptrOffset(crossThreadData, samplerArg.metadataPayload.samplerNormalizedCoords); EXPECT_EQ(0x08, *pSamplerNormalizedCoords); } + +using ArgSupport = IsWithinProducts; + +HWTEST2_F(SetKernelArg, givenBufferArgumentWhichHasNotBeenAllocatedByRuntimeThenInvalidArgumentIsReturned, ArgSupport) { + createKernel(); + + uint64_t hostAddress = 0x1234; + + ze_result_t res = kernel->setArgBuffer(0, sizeof(hostAddress), &hostAddress); + + EXPECT_EQ(ZE_RESULT_ERROR_INVALID_ARGUMENT, res); +} + } // namespace ult } // namespace L0