⬢ DragonFlyBSD Kernel Audit
DF-5509 / manifest.json
← back to finding ↓ download raw
{
  "finding_id": "DF-5509",
  "title": "ehci_pci.c arms ehci_interrupt before controller takeover/init: the pre-init handler is mute (wrong-register USBSTS read, sc_eintrs==0, no acknowledge) -> level-INTx IRQ storm for the whole window incl. the 5s BIOS-handoff park",
  "verdict": "reproduced",
  "impact": "dos",
  "confidence": "certain",
  "root_cause_lines": [
    "sys/bus/u4b/controller/ehci_pci.c:390-391",
    "sys/bus/u4b/controller/ehci_pci.c:398",
    "sys/bus/u4b/controller/ehci_pci.c:451",
    "sys/bus/u4b/controller/ehci_pci.c:517-546",
    "sys/bus/u4b/controller/ehci.c:308",
    "sys/bus/u4b/controller/ehci.c:335",
    "sys/bus/u4b/controller/ehci.c:353",
    "sys/bus/u4b/controller/ehci.c:1504-1513",
    "sys/kern/subr_bus.c:1953-1954"
  ],
  "reproduce": {
    "build": "in guest: mkdir -p /root/ehciarm && cp mutearm.c Makefile /root/ehciarm/ && cd /root/ehciarm && make KERNBUILDDIR=/usr/obj/usr/src/sys/X86_64_GENERIC",
    "run": "./run.sh (phases; needs QEMU launched with -device usb-ehci,id=ehci0 and the monitor socket dfbsd-qemu/boot-mon.sock)",
    "expected": "stock driver: ehci0 intr counter 393106 -> 704268 (311,162) for one parked attach with a single real port event; control 55; permanent variant ~33K/s sustained until sc_eintrs restored; patched (fix.diff): delta 0 during the park, delta 105 total, USB functional"
  },
  "kernel_refs": [
    "sys/bus/u4b/controller/ehci_pci.c:390-391",
    "sys/bus/u4b/controller/ehci_pci.c:398",
    "sys/bus/u4b/controller/ehci_pci.c:517-546",
    "sys/bus/u4b/controller/ehci.c:308",
    "sys/bus/u4b/controller/ehci.c:335",
    "sys/bus/u4b/controller/ehci.c:1504-1513",
    "sys/kern/subr_bus.c:1953-1954"
  ],
  "artifacts": [
    "mutearm.c", "Makefile", "build.sh", "run.sh",
    "trigger_endtoend.sh", "trigger_mute.sh", "mon.py",
    "build.log", "run.log", "serial_console_full.log", "env.txt",
    "fix.diff", "fix_build_guest.log", "fix_validation_3pt.log",
    "VERDICT.md", "README.md", "manifest.json", "verdict.json"
  ]
}