Skip to content

Commit 520cbcf

Browse files
committed
Fix oob access
1 parent 84b226d commit 520cbcf

File tree

1 file changed

+15
-13
lines changed

1 file changed

+15
-13
lines changed

unified-runtime/source/adapters/offload/enqueue.cpp

Lines changed: 15 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -29,26 +29,28 @@ UR_APIEXPORT ur_result_t UR_APICALL urEnqueueKernelLaunch(
2929

3030
(void)pGlobalWorkOffset;
3131

32-
if (!pLocalWorkSize) {
33-
// TODO: This is not optimal, but it is legal
34-
static size_t DefaultWorkSize[3] = {1, 1, 1};
35-
pLocalWorkSize = DefaultWorkSize;
32+
// TODO: We default to 1, 1, 1 here. In future if pLocalWorkSize is not
33+
// specified, we should pick the "best" one
34+
size_t WorkSize[3] = {1, 1, 1};
35+
if (pLocalWorkSize) {
36+
for (uint32_t I = 0; I < workDim; I++) {
37+
WorkSize[I] = pLocalWorkSize[I];
38+
}
3639
}
3740

38-
if (pLocalWorkSize[0] > pGlobalWorkSize[0] ||
39-
pLocalWorkSize[1] > pGlobalWorkSize[1] ||
40-
pLocalWorkSize[2] > pGlobalWorkSize[2]) {
41+
if (WorkSize[0] > pGlobalWorkSize[0] || WorkSize[1] > pGlobalWorkSize[1] ||
42+
WorkSize[2] > pGlobalWorkSize[2]) {
4143
return UR_RESULT_ERROR_INVALID_WORK_GROUP_SIZE;
4244
}
4345

4446
ol_kernel_launch_size_args_t LaunchArgs;
4547
LaunchArgs.Dimensions = workDim;
46-
LaunchArgs.NumGroupsX = pGlobalWorkSize[0] / pLocalWorkSize[0];
47-
LaunchArgs.NumGroupsY = pGlobalWorkSize[1] / pLocalWorkSize[1];
48-
LaunchArgs.NumGroupsZ = pGlobalWorkSize[2] / pLocalWorkSize[2];
49-
LaunchArgs.GroupSizeX = pLocalWorkSize[0];
50-
LaunchArgs.GroupSizeY = pLocalWorkSize[1];
51-
LaunchArgs.GroupSizeZ = pLocalWorkSize[2];
48+
LaunchArgs.NumGroupsX = pGlobalWorkSize[0] / WorkSize[0];
49+
LaunchArgs.NumGroupsY = pGlobalWorkSize[1] / WorkSize[1];
50+
LaunchArgs.NumGroupsZ = pGlobalWorkSize[2] / WorkSize[2];
51+
LaunchArgs.GroupSizeX = WorkSize[0];
52+
LaunchArgs.GroupSizeY = WorkSize[1];
53+
LaunchArgs.GroupSizeZ = WorkSize[2];
5254
LaunchArgs.DynSharedMemory = 0;
5355

5456
ol_event_handle_t EventOut;

0 commit comments

Comments
 (0)