DF-3600 / verdict.json
{ "finding_id": "DF-3600", "status": "inconclusive", "reproduced": 0, "impact": "none", "confidence": "certain", "verdict": "gfx_v8_0_parse_sq_irq reads the 3-bit SQ_EDC_INFO.SOURCE field (mask 0x1c0, gfx_8_0_sh_mask.h:14083 => 0..7) at gfx_v8_0.c:6811 and prints sq_edc_source_names[sq_edc_source] at :6831 with only a != -1 guard; the array (gfx_v8_0.c:710-718) has 7 entries, so reserved encoding 7 indexes one pointer past the array in kernel rodata and hands it to %s - fault inside the printk formatter during SQ interrupt handling (panic in an error-reporting path) or printing of adjacent static rodata to dmesg. HW-error-event triggered, not directly attacker-commandable -> Low. Not executable on the virtio-only audit guest -> inconclusive at runtime; mismatch proven from source.", "exploit_chain": "", "evidence": "run.log (7 entries vs 3-bit mask vs unguarded index); VERDICT.md; fix.diff", "kernel_refs": ["sys/dev/drm/amd/amdgpu/gfx_v8_0.c:710", "sys/dev/drm/amd/amdgpu/gfx_v8_0.c:6811", "sys/dev/drm/amd/amdgpu/gfx_v8_0.c:6831", "sys/dev/drm/amd/include/asic_reg/gca/gfx_8_0_sh_mask.h:14083"], "poc_changes": "authored fresh (pass 2)", "attempts": 1, "guest_uname": "DragonFly dfbsd 6.5-DEVELOPMENT DragonFly 6.5-DEVELOPMENT #0: Thu Jul 2 06:02:54 UTC 2026 root@dfbsd:/usr/obj/usr/src/sys/X86_64_GENERIC x86_64", "runtime_sec": 10, "guest_dirty": 0, "build_cmd": "(none - source assertion)", "run_cmd": "./run.sh", "code_hash": "", "notes": "Fix precedent: upstream keeps an explicit bounds check on this lookup in later trees.", "recommended_fix": "Bound the index: use sq_edc_source only when 0 <= sq_edc_source < ARRAY_SIZE(sq_edc_source_names); see fix.diff.", "fix_status": "not_testable", "fix_baseline_reproduced": 0, "fix_patched_reproduced": 0, "fix_verdict": "fix.diff adds the ARRAY_SIZE bound at :6831; not buildable/testable on the virtio-only guest (amdgpu module absent).", "fix_evidence": "findings/poc/DF-3600/fix.diff" } |