⬢ DragonFlyBSD Kernel Audit
DF-5514 / manifest.json
← back to finding ↓ download raw
{
  "finding_id": "DF-5514",
  "title": "ipheth_attach() failure paths call ipheth_detach() on a never-attached usb_ether -> deterministic kernel panic at evil-USB plug-in (lockmgr through NULL ue_lock on branches 1-2; ether_ifdetach on never-if_attach()ed embedded ifnet on branches 3-4) — 9th instance of the DF-5334 uether goto-detach class",
  "verdict": "reproduced",
  "impact": "panic",
  "reproduce": {
    "build": "in-guest: mkdir -p /root/df5514 && cd /root/df5514 && make -m /usr/src/share/mk   # -Werror clean",
    "run": "in-guest: kldload -v /root/df5514/ipheth_poc.ko   # baseline: Fatal trap 12 VA 0x0 (stock uether.ko auto-loaded); patched: SURVIVED + KLDLOAD_RC=0",
    "expected": "baseline serial: 3 ipheth_poc markers -> 'Fatal trap 12: page fault while in kernel mode', 'fault virtual address = 0x0', 'Stopped at lockmgr_exclusive+0x5d: orl (%r14),%esi', guest dead in DDB (panic.txt); patched: 'ipheth_poc: SURVIVED uether_ifdetach()', KLDLOAD_RC=0, kldunload clean, dmesg Fatal-trap count 0 (run.log)"
  },
  "kernel_refs": [
    "sys/bus/u4b/net/if_ipheth.c:217-265",
    "sys/bus/u4b/net/if_ipheth.c:225-229",
    "sys/bus/u4b/net/if_ipheth.c:231-236",
    "sys/bus/u4b/net/if_ipheth.c:237-247",
    "sys/bus/u4b/net/if_ipheth.c:249-259",
    "sys/bus/u4b/net/if_ipheth.c:262-264",
    "sys/bus/u4b/net/if_ipheth.c:267-281",
    "sys/bus/u4b/net/if_ipheth.c:274",
    "sys/bus/u4b/net/if_ipheth.c:276",
    "sys/bus/u4b/net/usb_ethernet.c:133-137",
    "sys/bus/u4b/net/usb_ethernet.c:162-189",
    "sys/bus/u4b/net/usb_ethernet.c:267-305",
    "sys/bus/u4b/net/usb_ethernet.c:549-560",
    "sys/bus/u4b/net/usb_ethernet.h:80-84",
    "sys/bus/u4b/usb_process.c:397-410",
    "sys/kern/subr_bus.c:1953"
  ],
  "artifacts": [
    "ipheth_poc.c",
    "Makefile",
    "build.sh",
    "run.sh",
    "build.log",
    "panic.txt",
    "run.log",
    "fix_build.log",
    "fix_smoke.log",
    "env.txt",
    "fix.diff",
    "VERDICT.md",
    "manifest.json",
    "verdict.json"
  ]
}