DF-5618 / verdict.json
{ "finding_id": "DF-5618", "status": "reproduced", "reproduced": true, "impact": "none", "confidence": "certain", "verdict": "ig4_acpi.c:107-108 hardcodes sc->version = IG4_ATOM for every HID in ig4iic_ids[] under the false comment All the HIDs matched are Atom SOCs. INT33C2/INT33C3 are Haswell-LP LPSS and INT3432/3433 Broadwell (IG4_HASWELL per ig4_pci.cs own table for the same silicon), and 808622C1 is Apollo Lake (IG4_APL per ig4_pci.c:120-127). The mis-version skips version-gated handling in ig4_iic.c: the HSW-only IG4_GENERAL_SWMODE write (:513-519) on ACPI Haswell, HSW LTR (:522-526), and puts Apollo Lake outside the >=IG4_SKYLAKE branch (:527-532). Pass-2 checklist (a) twin-check: the ACPI glue has NO bzero-wipes-version bug (no bzero in this file; newbus allocates the softc zeroed, subr_bus.c:1953-1954) - the stored value is simply wrong for half the HIDs. Reproduced live: the DF-5617 planted-ACPI rig presented an INT33C2 (Haswell-HID) device and the guest kernel printed ig4iic0: version 1 (=IG4_ATOM) for it (febf_version_print.log), exactly as the source predicts. Functional mis-programming only - every ATOM-path register access is also valid on the mislabeled silicon - so Info severity.", "exploit_chain": "", "evidence": "febf_version_print.log lines: ig4iic0: <Designware I2C Controller> iomem 0xfebf0000-0xfebf01ff irq 0 on acpi0 followed by ig4iic0: version 1 type 00000000 params 00000000 general 00000000 comp_version 00000000 - INT33C2 (Haswell per ig4_pci.c:104) programmed as version 1 (IG4_ATOM, ig4_var.h:51).", "kernel_refs": [ "sys/bus/smbus/ichiic/ig4_acpi.c:70", "sys/bus/smbus/ichiic/ig4_acpi.c:107", "sys/bus/smbus/ichiic/ig4_acpi.c:108", "sys/bus/smbus/ichiic/ig4_pci.c:104", "sys/bus/smbus/ichiic/ig4_pci.c:120", "sys/bus/smbus/ichiic/ig4_iic.c:513", "sys/bus/smbus/ichiic/ig4_iic.c:522", "sys/bus/smbus/ichiic/ig4_iic.c:527", "sys/kern/subr_bus.c:1953" ], "poc_changes": "Evidence captured with the DF-5617 planted-ACPI rig (QEMU -acpitable SSDT declaring a Device with _HID INT33C2 and _CRS Memory32Fixed 0xFEBF0000+0x200/IRQ0, kldload ig4); the version print is production ig4_iic.c:499 output.", "attempts": 1, "guest_uname": "DragonFly dfbsd 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": 240, "guest_dirty": 0, "build_cmd": "none (planted-ACPI rig; see ../DF-5617/build.sh)", "run_cmd": "QEMU_EXTRA=-acpitable file=ssdt_febf.aml dfbsd-qemu/vm.sh up; vm.sh run_root kldload ig4; vm.sh log", "code_hash": "ac0782d95990a2ccc8fc6c939294ba48c1be042fe2decdcd5d88616ff9ce85cd", "notes": "Info severity: functional mis-programming of version-gated init (HSW SWMODE / LTR families) on ACPI-enumerated Haswell/Broadwell/Apollo Lake silicon; no memory-safety consequence. Kin of DF-5600 (inverse direction: there a bzero wiped a correct version; here a wrong version is stored correctly).", "recommended_fix": "Select sc->version per matched HID (INT33C2/C3/INT3432/33 -> IG4_HASWELL, 808622C1 -> IG4_APL, 80860F41/AMDI*/APMC0D0F -> IG4_ATOM), mirroring ig4_pci.c:103-138; store it in ig4iic_acpi_probe() like ig4_pci.c does.", "fix_status": "not_testable", "fix_baseline_reproduced": 1, "fix_patched_reproduced": 0, "fix_verdict": "not_testable", "fix_evidence": "Info-severity functional finding; no kernel build performed for the suggested HID->version mapping (no behavioral failure to A/B - the mis-programming is cosmetic at runtime on QEMU, where no real Haswell/APL silicon exists)." } |