DF-4880 / verdict.json
{ "finding_id": "DF-4880", "status": "untested", "attempts": 0, "reproduced": 0, "impact": "infoleak", "confidence": "certain", "verdict": "Hardware-gated (no AMD GPU on guest): each amdgpu_ucode_print_* helper dispatches on the attacker-controlled header_version and container_ofs into a versioned sub-struct then loads its fields - DRM_DEBUG expands to a real variadic call so the loads EXECUTE UNCONDITIONALLY on every attach/resume (drm.debug only gates printing). A 33-byte crafted blob with size_bytes==datasize passes validate and even a datasize>=32 minimum-size fix; claiming rlc 2.1 reads offsets 108..155 (~124 bytes past the kmallocd buffer). Same shape for mc(+36)/smc(+32)/gfx(+36)/sdma(+52). Values surface to dmesg only with drm.debug (heap info leak); page-boundary panic possible. Distinct sink from DF-1946 that survives its proposed minimum fix. Per-branch size-floor-gate fix.", "exploit_chain": "root-placed 40-byte amdgpufw_*_rlc claiming v2.1 -> print helper loads fields at +108..155 of a 40-byte allocation -> adjacent heap to dmesg under drm.debug", "evidence": "findings/poc/DF-4880/ (this verdict)", "kernel_refs": [ "sys/dev/drm/amd/amdgpu/amdgpu_ucode.c:54", "sys/dev/drm/amd/amdgpu/amdgpu_ucode.c:166", "sys/dev/drm/amd/amdgpu/amdgpu_ucode.c:256" ], "guest_uname": "", "code_hash": "" } |