DF-4387 / verdict.json
{ "finding_id": "DF-4387", "status": "untested", "reproduced": 0, "impact": "none", "confidence": "certain", "verdict": "sc->port_id is a raw firmware dword (oce_mbox.c:493, unvalidated) used to index rxf.port[2] (be2, oce_sysctl.c:1151) / rxf.port[4] (be3, oce_sysctl.c:1216); the ~66 dwords read per refresh land in world-readable hw.oceN.stats.* sysctls. port_id beyond the array reads wrong/past fields, and beyond the struct runs off the stats_mem DMA allocation (sized to exactly the mbx struct) into adjacent kernel heap -> unprivileged-readable device-shaped leak. Hardware-gated on guest; replica arithmetic in run.log. Low (malicious-peripheral class); fix is a NELEM clamp at both sites.", "exploit_chain": "", "evidence": "run.log (guest replica: port_id=4/5 past array+buffer), VERDICT.md trace, fix.diff (git apply --check OK, syntax-validated)", "kernel_refs": [ "sys/dev/netif/oce/oce_sysctl.c:1151", "sys/dev/netif/oce/oce_sysctl.c:1216", "sys/dev/netif/oce/oce_mbox.c:493" ], "poc_changes": "n/a - pass-2 finding authored fresh (added stddef.h after first guest compile)", "attempts": 2, "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": 25, "guest_dirty": 0, "build_cmd": "./build.sh (guest cc 8.3)", "run_cmd": "./run.sh", "code_hash": "e2615b2b8a11641dcd60b9af9886b62f49f5bba8b69489f48d8d47a9b93f47a8", "notes": "Status untested = target device absent on guest.", "recommended_fix": "clamp port to NELEM(rxf.port) in copy_stats_to_sc_be2/_be3 (fix.diff)", "fix_status": "not_testable", "fix_baseline_reproduced": 0, "fix_patched_reproduced": 0, "fix_verdict": "not_testable at runtime (no oce NIC); fix.diff (2 hunks) git-apply OK, patched oce_sysctl.c syntax-validated with guest kernel toolchain (0 errors).", "fix_evidence": "fix.diff; guest cc -fsyntax-only of patched oce_sysctl.c: 0 errors.", "fix_kernel_uname": "DragonFly dfbsd 6.5-DEVELOPMENT #0: Thu Jul 2 06:02:54 UTC 2026 x86_64" } |