DF-4663 / verdict.json
{ "status": "not_reproduced", "reproduced": 0, "impact": "none", "confidence": "certain", "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": 2, "guest_dirty": 0, "build_cmd": "(none \u2014 hardware-gated path; source-verified)", "code_hash": "", "fix_status": "fixed", "fix_baseline_reproduced": 0, "fix_patched_reproduced": 0, "fix_verdict": "fix.diff is a total two-line/one-line guard (git-apply --check verified against the pristine tree; never applied to sys/). No runtime fix validation: the defective path requires AMD DC hardware absent from the audit guest (0x1002 PCI count = 0).", "fix_evidence": "fix.diff in pack; run.log/env.txt hardware inventory.", "finding_id": "DF-4663", "verdict": "Code-provable latent NULL deref: dal_ddc_service_query_ddc_data (dc_link_ddc.c:580-584 aux, :606-610 i2c) dereferences the result of dal_ddc_aux_payloads_create / dal_ddc_i2c_payloads_create without a NULL check. Both creators return NULL when the 16-byte kzalloc fails (OOM) or when dal_vector_construct rejects capacity==0 (write_size==0 && read_size==0 \u2014 basics/vector.c:33-37); the immediate dal_ddc_*_payloads_get(NULL) then reads NULL->payloads.container (struct vector first member, include/vector.h:29-35) -> near-NULL read -> panic. Zero-size case not reachable from current in-tree callers (SCDC :712-754, retimer dc_link.c:1641/:1694 all pass non-zero sizes), so today the path is OOM-gated inside the amdgpu DC driver. Not reproduced: the audit guest has no AMD GPU (pciconf 0x1002 count = 0, run.log) \u2014 same hardware gating as DF-4555/4556. Hardening finding; fix.diff adds the two missing NULL guards.", "exploit_chain": "", "evidence": "VERDICT.md root-cause citations (dc_link_ddc.c:580-584,:606-610; basics/vector.c:33-37; include/vector.h:29-35); run.log hardware inventory (no AMD device).", "kernel_refs": [ "sys/dev/drm/amd/display/dc/core/dc_link_ddc.c:580", "sys/dev/drm/amd/display/dc/core/dc_link_ddc.c:584", "sys/dev/drm/amd/display/dc/core/dc_link_ddc.c:606", "sys/dev/drm/amd/display/dc/core/dc_link_ddc.c:610", "sys/dev/drm/amd/display/dc/basics/vector.c:33", "sys/dev/drm/amd/display/include/vector.h:29" ], "poc_changes": "No executable PoC (hardware-gated); evidence pack documents the source trace and the guest hardware absence.", "notes": "Info hardening per audit precedent (DF-0086-style latent NULL deref). DF-4555s caller-side ignored acquire() at dc_link_ddc.c:655-656 verified STILL PRESENT in sys/ but already covered by DF-4555 (its fix.diff Part 1 patches exactly that line) \u2014 deliberately NOT re-filed here.", "recommended_fix": "NULL-check both payloads create results and return false (fix.diff).", "run_cmd": "vm.sh run_root pciconf -l | grep -c 1002 (-> 0)" } |