DF-5031 / verdict.json
{ "finding_id": "DF-5031", "status": "untested", "reproduced": false, "impact": "none", "confidence": "certain", "verdict": "it_generic_stemp (sys/dev/powermng/it/it.c:259-261) reads IT87xx temperature registers via it_readreg() which returns u_int8_t (it.c:192-197) and never applies the required (int8_t) signed conversion, so sub-zero temperatures (0x80..0xFF = -128..-1 degC) are published under hw.sensors as +128..+255 degC; the in-tree comment also mislabels the framework unit (\u00b5K) as Fahrenheit. Pure sensor-data correctness defect inherited from the OpenBSD ancestor; no memory-safety impact (value is int64_t, arithmetic bounded at ~5.3e8). Driver absent on the audit guest (no device it in X86_64_GENERIC, no it.ko shipped/loaded, no IT87xx silicon in QEMU) and gated behind admin-only config, so Phase V runtime PoC skipped per contract.", "exploit_chain": "", "evidence": "reachability.log (guest: device-it-in-config 0, it.ko NONE, it-loaded 0); it.c:259-261, it.c:192-197, itvar.h:62, sys/sys/sensors.h:146, sys/conf/files:2601; VERDICT.md (full negative-result list)", "kernel_refs": [ "sys/dev/powermng/it/it.c:259", "sys/dev/powermng/it/it.c:261", "sys/dev/powermng/it/it.c:192", "sys/dev/powermng/it/itvar.h:62", "sys/sys/sensors.h:146", "sys/conf/files:2601" ], "poc_changes": "No PoC built: driver not compiled into the default kernel (optional it isa) and no IT87xx hardware exists behind QEMU. reachability.sh replaces the trigger.", "attempts": 0, "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": 6, "guest_dirty": 0, "build_cmd": "", "run_cmd": "dfbsd-qemu/vm.sh run_root ...reachability probes... (see reachability.sh; read-only)", "code_hash": "a25bd36bfd32ee58949bfe305276273f4b38abcc6710e6e188c71f342c03bc4a", "notes": "Reserved IDs DF-5030..DF-5041; this pack uses DF-5031. Pass-2 negative results with citations in VERDICT.md: fan div0 impossible, volt math int64-safe, sensor array bounds exact, chip-ID exact-match, detach/sensor-task lifetime safe via kern_sensors.c lock protocol, softc M_ZERO kills uninit-value leak, port I/O confined to offsets 5-6 of 8.", "recommended_fix": "Cast the temperature register read to signed in it_generic_stemp: sdata = (int8_t)it_readreg(sc, ITD_SENSORTEMPBASE + i); and fix the unit comment (fix.diff).", "fix_status": "not_applicable", "fix_baseline_reproduced": false, "fix_patched_reproduced": false, "fix_verdict": "Fix validation not applicable: Info-severity correctness finding, no runtime baseline exists on the guest (driver not compiled, hardware absent), Phase V skipped per contract.", "fix_evidence": "n/a (no fix build performed)" } |