DF-3795 / verdict.json
{ "finding_id": "DF-3795", "status": "not_reproduced", "reproduced": 0, "impact": "none", "confidence": "certain", "verdict": "acpi_parse_prw() computes power_count = Package.Count - 2 (elements 2..N per its own comment and the ACPI spec) but copies res->Package.Elements[i] for i in [0, power_count) instead of [i+2] (acpi.c:2969-2970). The mis-copied elements 0/1 (GPE indicator / lowest wake state) are dropped by acpi_GetReference()s type check (acpi_package.c:132-160), so with Count==3 the genuine power resource at element 2 is never referenced and larger packages get a shifted prefix: wake power rails are not raised at sleep nor cleaned on resume (acpi_powerres.c:552-556, acpi.c:2752-2754/2789-2790). Functional/availability defect on firmware with _PRW power resources; no memory-safety impact. Not reproducible on the audit guest: its QEMU DSDT contains zero _PRW objects (verified via acpidump+iasl), so runtime status is honestly not_reproduced; the defect is certain from the code/comment/consumer trace and is inherited verbatim from FreeBSD main (~line 4117).", "exploit_chain": "", "evidence": "VERDICT.md: DSDT survey (grep -c _PRW -> 0); code trace acpi.c:2962-2970 vs consumer acpi_powerres.c:582 + acpi_package.c:132-160; FreeBSD cross-check.", "kernel_refs": [ "sys/dev/acpica/acpi.c:2963", "sys/dev/acpica/acpi.c:2969", "sys/dev/acpica/acpi_powerres.c:552", "sys/dev/acpica/acpi_powerres.c:582", "sys/dev/acpica/acpi_package.c:132" ], "poc_changes": "no executable PoC possible on this guest (firmware lacks _PRW); dsdt-survey commands documented in VERDICT.md", "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": 120, "guest_dirty": 1, "build_cmd": "n/a (acpidump -b -n DSDT && iasl -d dsdt.dat && grep -c _PRW dsdt.dsl)", "run_cmd": "n/a", "code_hash": "n/a", "notes": "Fix compiled into the patched validation kernel but the affected branch is unreachable on this guests firmware, so behavioral fix validation is not_testable; the one-line index change is self-evident against the comment and consumer.", "recommended_fix": "prw->power_res[i] = res->Package.Elements[i + 2];", "fix_status": "not_testable", "fix_baseline_reproduced": 0, "fix_patched_reproduced": 0, "fix_verdict": "fix.diff is a one-line index correction compiled successfully into the patched test kernel; no _PRW-bearing firmware on this guest so runtime before/after comparison is impossible.", "fix_evidence": "guest build.log shows the patched acpi.c (all three fixes) compiling and linking into X86_64_GENERIC." } |