DF-4608 / verdict.json
{ "finding_id": "DF-4608", "status": "untested", "reproduced": 0, "impact": "dos", "confidence": "certain", "verdict": "radeon_vce_cs_reloc() dereferences p->chunk_relocs (NULL when the DRM_IOCTL_RADEON_CS submission omits the RADEON_CHUNK_ID_RELOCS chunk, which radeon_cs_parser_init accepts and radeon_cs_parser_relocs silently tolerates by returning 0) at radeon_vce.c:482 -> fixed-offset NULL read -> kernel panic. Deterministic single-ioctl local DoS for any user with DRM node access on SI/CIK radeon hardware with VCE. Both sibling paths guard this exact case (generic radeon_cs.c:846-850 and radeon_uvd.c:705-709 print No relocation chunk ! and return -EINVAL); the VCE parser simply forgot. The audit guest has no radeon GPU (no /dev/dri, zero 1002: PCI devices), so the trigger could not be executed -- trigger builds clean on the guest and is provided ready for affected hardware; code-trace certainty per VERDICT.md.", "exploit_chain": "", "evidence": "findings/poc/DF-4608/VERDICT.md (six-step path:line proof chain); vce_null_relocs.c (raw-ioctl trigger, no libdrm); build.log (clean guest build); run.log (hardware-absence proof)", "kernel_refs": [ "sys/dev/drm/radeon/radeon_vce.c:478", "sys/dev/drm/radeon/radeon_vce.c:482", "sys/dev/drm/radeon/radeon_vce.c:646", "sys/dev/drm/radeon/radeon_cs.c:83", "sys/dev/drm/radeon/radeon_cs.c:313", "sys/dev/drm/radeon/radeon_cs.c:846", "sys/dev/drm/radeon/radeon_uvd.c:705", "sys/dev/drm/radeon/radeon_asic.c:1769" ], "poc_changes": "n/a (first evidence pack; trigger authored from scratch against the DF radeon source with hand-rolled _IOWR ioctl, no libdrm)", "attempts": 0, "guest_uname": "DragonFly dfbsd 6.5-DEVELOPMENT DragonFly 6.5-DEVELOPMENT #0: Thu Jul 2 06:02:54 UTC 2026 x86_64 (guest has no radeon GPU: pciconf lists no 1002: device, /dev/dri absent)", "runtime_sec": 0, "guest_dirty": 0, "build_cmd": "cc -O2 -Wall -o vce_null_relocs vce_null_relocs.c", "run_cmd": "./vce_null_relocs /dev/dri/renderD128", "code_hash": "550ea9a6c43363760248fa34ec26c1cf68f38bc05110db6b96b72ee53e4341ed", "notes": "Hardware-required finding (radeon SI/CIK ASIC with VCE block); QEMU guest lacks the device, so no execution attempt was possible -- status untested per audit precedent (cf. DF-4447). Upstream Linux radeon carries the same unguarded deref; the equivalent amdgpu parser rejects missing relocs.", "recommended_fix": "Add if (p->chunk_relocs == NULL) { DRM_ERROR(\"No relocation chunk !\\n\"); return -EINVAL; } at the head of radeon_vce_cs_parse(), mirroring radeon_uvd.c:705-709 (see fix.diff).", "fix_status": "not_testable", "fix_baseline_reproduced": 0, "fix_patched_reproduced": 0, "fix_verdict": "fix.diff authored (UVD-equivalent guard); no radeon hardware on the audit guest, so no kernel build/run validation is possible.", "fix_evidence": "findings/poc/DF-4608/fix.diff" } |