โฌข DragonFlyBSD Kernel Audit
DF-5282 / run.log
โ† back to finding โ†“ download raw
DF-5282 run log โ€” all phases, untrimmed command outputs as captured.
Guest: DragonFly 6.5-DEVELOPMENT x86_64, QEMU 7.2 usb-ehci (8086:24cd),
ehci0 BAR 0xfebd1000-0xfebd1fff (0x1000), 6 ports, module ehci.ko.

================================================================================
PHASE 0 โ€” discovery boot, EHCI attach
================================================================================
# dmesg | grep -iE "ehci|usbus|uhub|ugen"
ehci0: <Intel 82801DB/L/M (ICH4) USB 2.0 controller> mem 0xfebd1000-0xfebd1fff irq 10 at device 3.0 on pci0
usbus0: EHCI version 1.0
usbus0: on ehci0
usbus0: 480Mbps High Speed USB v2.0
ugen0.1: <Intel> at usbus0
uhub0: <Intel EHCI root HUB, class 9/0, rev 2.00/1.00, addr 1> on usbus0
uhub0: 6 ports with 6 removable, self powered
# pciconf -l | grep -i ehci
ehci0@pci0:0:3:0:  class=0x0c0320 card=0x11001af4 chip=0x24cd8086 rev=0x10 hdr=0x00
# usbconfig
ugen0.1: <Intel EHCI root HUB> at usbus0, cfg=0 md=HOST spd=HIGH (480Mbps) pwr=SAVE (0mA)

================================================================================
PHASE 1 โ€” baseline roothub roundtrip (sane sc_offs=0x20)
================================================================================
-- GET_STATUS port1 (EOREAD4 PORTSC(1) @ +0x58):
REQUEST = <0x00 0x05 0x00 0x00>          # wPortStatus=0x0500 POWER|HIGH_SPEED
-- SET_FEATURE(UHF_PORT_SUSPEND=2) port1:  REQUEST = <OK>
-- GET_STATUS port1:                       REQUEST = <0x04 0x05 0x00 0x00>   # 0x0504 SUSPEND set
-- CLEAR_FEATURE(UHF_PORT_SUSPEND=2) p1:   REQUEST = <OK>
-- GET_STATUS port1:                       REQUEST = <0x00 0x05 0x00 0x00>   # 0x0500 SUSPEND cleared

================================================================================
PHASE 2 โ€” poison latched (sc_offs 0x20 -> 0xFF, == malicious CAPLENGTH)
================================================================================
# kldload /root/ehcipwn/ehcipwn.ko ; dmesg | tail -4
ehcipwn: ehci0 softc=0xfffff8008dfc0000 io_hdl=0xfffff8008e147000 io_size=0x1000 offs=0x20 noport=6
ehcipwn: max poisoned reg offset = 0x17f (0xFF + 0x44 + 4*15); BAR covers [0,0xfff]
ehcipwn: NOTE io_size > 0x180 -> poisoned accesses stay IN-BAR on this guest (no page fault expected)
ehcipwn: ehci0 POISONED: sc_offs 0x20 -> 0xFF (simulated malicious CAPLENGTH)
-- GET_STATUS port1 (reads io_hdl+0x147):
REQUEST = <0x00 0x04 0x00 0x00>          # 0x0400: POWER bit GONE (wrong register read)
-- GET_STATUS port6 (reads io_hdl+0x15B):
REQUEST = <0x00 0x04 0x00 0x00>
-- SET_FEATURE(UHF_PORT_SUSPEND=2) port1 (EOWRITE4 @ io_hdl+0x147): REQUEST = <OK>
# kldunload ehcipwn ; dmesg | tail -1
ehcipwn: ehci0 restored sc_offs=0x20
-- GET_STATUS port1 with restored offset (real PORTSC(1) @ +0x68):
REQUEST = <0x00 0x05 0x00 0x00>          # NO SUSPEND bit -> poisoned write missed the real register
(control: the identical baseline request produced 0x0504)

================================================================================
PHASE 3 โ€” live-lock (interrupt path), RUN A (fresh with-src snapshot)
================================================================================
# kldload poison; pre-hotplug alive: date -> Fri Oct 2 00:51:34 UTC 2026
# QEMU monitor: device_add usb-kbd,id=k1,bus=ehci0.0,port=1
t=6s:  Fri Oct  2 00:51:43 UTC 2026      # still answering
t=12s: Fri Oct  2 00:51:49 UTC 2026      # still answering
t=18s: (no output โ€” ssh dead)
# vm.sh status => down
# ps -o %cpu -p <qemu> => 84.2  (guest spinning in interrupt storm)
# serial console: no further output, no panic text (boot.log ends at the poison line)
[1st occurrence (discovery, mouse pre-attached then poison then usb-kbd on port 2):
 same outcome โ€” ssh dead, console silent, qemu 40.2% CPU, vm.sh status down]

================================================================================
PHASE 4 โ€” control run (fresh with-src snapshot, NO poison)
================================================================================
# QEMU monitor: device_add usb-kbd,id=k1,bus=ehci0.0,port=1
# usbconfig
ugen0.1: <Intel EHCI root HUB> at usbus0, cfg=0 md=HOST spd=HIGH (480Mbps) pwr=SAVE (0mA)
ugen0.2: <QEMU QEMU USB Keyboard> at usbus0, cfg=0 md=HOST spd=HIGH (480Mbps) pwr=ON (100mA)
# dmesg | grep -iE "ukbd|kbd" | tail -3
ukbd0: <QEMU QEMU USB Keyboard, class 0/0, rev 2.00/0.00, addr 2> on usbus0
kbd2 at ukbd0
# date; uptime
Fri Oct  2 00:54:40 UTC 2026
12:54AM  up 34 secs, 0 users, load averages: 0.15, 0.04, 0.01
# vm.sh status => up        # guest healthy

================================================================================
PHASE 5 โ€” fix validation
================================================================================
# patch applied to /usr/src: Hunk #1 succeeded at 327 (guard inserted)
# make quickkernel KERNCONF=X86_64_GENERIC -> completed; installkernel -> completed
# /boot/kernel/ehci.ko contains "invalid register geometry" (strings count=1); module loaded at boot (kldstat: ehci.ko)
# no-regression: ehci0 attaches, keyboard enumerates (ugen0.2), usbconfig OK
# trigger re-run on patched kernel (post-init corruption via KLD):
   kldload /root/ehcipwn/ehcipwn.ko; monitor: device_add usb-mouse,id=m2,bus=ehci0.0,port=3
   t=6s/12s/18s: no output; vm.sh status => down     # wedge persists (post-init vector; see VERDICT.md)
# final: vm.sh reset with-src  (guest returned to clean-source snapshot)