Skip to content

Commit 3f19095

Browse files
superm1gregkh
authored andcommitted
drm/amdgpu: validate CP_GFX_SHADOW chunk size in CS pass1
commit 84c4c36 upstream. Add a minimum-length check for the AMDGPU_CHUNK_ID_CP_GFX_SHADOW chunk in amdgpu_cs_pass1(), matching the gate already present for the IB, FENCE and BO_HANDLES chunk types. The CP_GFX_SHADOW case previously shared a bare break with the dependency and syncobj chunk types, which do not dereference a fixed-size struct. When userspace submits this chunk with length_dw == 0, vmemdup_array_user() is called with size 0 and returns ZERO_SIZE_PTR, which passes the IS_ERR() check. amdgpu_cs_p2_shadow() then dereferences chunk->kdata as a struct drm_amdgpu_cs_chunk_cp_gfx_shadow (reading shadow->flags), faulting on the ZERO_SIZE_PTR and causing a NULL-pointer dereference. This is reachable by an unprivileged process in the render group. Reject undersized chunks with -EINVAL during pass1 so the bad submission is rejected before pass2 ever dereferences the data. Fixes: ac92870 ("drm/amdgpu: add gfx shadow CS IOCTL support") Reviewed-by: Alex Deucher <alexander.deucher@amd.com> Signed-off-by: Mario Limonciello <mario.limonciello@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com> (cherry picked from commit 7f61b2e) Cc: stable@vger.kernel.org Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
1 parent f0d81d8 commit 3f19095

1 file changed

Lines changed: 5 additions & 1 deletion

File tree

drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -272,13 +272,17 @@ static int amdgpu_cs_pass1(struct amdgpu_cs_parser *p,
272272
goto free_partial_kdata;
273273
break;
274274

275+
case AMDGPU_CHUNK_ID_CP_GFX_SHADOW:
276+
if (size < sizeof(struct drm_amdgpu_cs_chunk_cp_gfx_shadow))
277+
goto free_partial_kdata;
278+
break;
279+
275280
case AMDGPU_CHUNK_ID_DEPENDENCIES:
276281
case AMDGPU_CHUNK_ID_SYNCOBJ_IN:
277282
case AMDGPU_CHUNK_ID_SYNCOBJ_OUT:
278283
case AMDGPU_CHUNK_ID_SCHEDULED_DEPENDENCIES:
279284
case AMDGPU_CHUNK_ID_SYNCOBJ_TIMELINE_WAIT:
280285
case AMDGPU_CHUNK_ID_SYNCOBJ_TIMELINE_SIGNAL:
281-
case AMDGPU_CHUNK_ID_CP_GFX_SHADOW:
282286
break;
283287

284288
default:

0 commit comments

Comments
 (0)