From 95e28faca03462ecac51490108074e0bc47cbb3b Mon Sep 17 00:00:00 2001 From: Lukasz Towarek Date: Mon, 13 Aug 2018 15:58:57 +0200 Subject: [PATCH] Fix division by zero in enqueueKernel Change-Id: I8e7d3db39805133a5af545e65a94fb19433a2a41 --- runtime/command_queue/enqueue_kernel.h | 3 +++ unit_tests/command_queue/enqueue_kernel_tests.cpp | 9 +++++++++ 2 files changed, 12 insertions(+) diff --git a/runtime/command_queue/enqueue_kernel.h b/runtime/command_queue/enqueue_kernel.h index 13ee4e6d5a..d320ca1c7e 100644 --- a/runtime/command_queue/enqueue_kernel.h +++ b/runtime/command_queue/enqueue_kernel.h @@ -86,6 +86,9 @@ cl_int CommandQueueHw::enqueueKernel( return CL_INVALID_WORK_GROUP_SIZE; } } + if (localWorkSizeIn[i] == 0) { + return CL_INVALID_WORK_GROUP_SIZE; + } workGroupSize[i] = localWorkSizeIn[i]; totalWorkItems *= localWorkSizeIn[i]; } diff --git a/unit_tests/command_queue/enqueue_kernel_tests.cpp b/unit_tests/command_queue/enqueue_kernel_tests.cpp index 4444ac15c1..2c1e84728a 100644 --- a/unit_tests/command_queue/enqueue_kernel_tests.cpp +++ b/unit_tests/command_queue/enqueue_kernel_tests.cpp @@ -1541,6 +1541,15 @@ TEST_F(EnqueueKernelTest, givenEnqueueCommandThatLwsExceedsDeviceCapabilitiesWhe EXPECT_EQ(CL_INVALID_WORK_GROUP_SIZE, status); } +TEST_F(EnqueueKernelTest, givenEnqueueCommandThatLocalWorkgroupSizeContainsZeroWhenEnqueueNDRangeKernelIsCalledThenClInvalidWorkGroupSizeIsReturned) { + size_t globalWorkSize[3] = {1, 1, 1}; + size_t localWorkSize[3] = {1, 0, 1}; + MockKernelWithInternals mockKernel(*pDevice); + + auto status = pCmdQ->enqueueKernel(mockKernel.mockKernel, 3, nullptr, globalWorkSize, localWorkSize, 0, nullptr, nullptr); + EXPECT_EQ(CL_INVALID_WORK_GROUP_SIZE, status); +} + HWTEST_F(EnqueueKernelTest, givenVMEKernelWhenEnqueueKernelThenDispatchFlagsHaveMediaSamplerRequired) { auto mockCsr = new MockCsrHw2(pDevice->getHardwareInfo(), *pDevice->executionEnvironment); mockCsr->overrideDispatchPolicy(DispatchMode::BatchedDispatch);