⬢ DragonFlyBSD Kernel Audit
DF-3479 / panic.txt
← back to finding ↓ download raw
panic: assertion "((so->so_proto->pr_flags & PR_ASYNC_RCVD) == 0 && so->so_refs == 2) || ((so->so_proto->pr_flags & PR_ASYNC_RCVD) && so->so_refs == 3)" failed in sonewconn_faddr at /usr/src/sys/kern/uipc_socket2.c:404
cpuid = 5
Trace beginning at frame 0xfffff8008d2a9890
sonewconn_faddr() at sonewconn_faddr+0x459 0xffffffff806c9a89
sonewconn_faddr() at sonewconn_faddr+0x459 0xffffffff806c9a89
ng_btsocket_l2cap_input() at ng_btsocket_l2cap_input+0x19eb 0xffffffff8261088b
taskqueue_run() at taskqueue_run+0xbb 0xffffffff806a3c5b
ithread_handler() at ithread_handler+0x2fe 0xffffffff80620f1e
Debugger("panic")

CPU5 stopping CPUs: 0x0000001f
 stopped
Stopped at      Debugger+0x7c:  movb    $0,0xbdaf09(%rip)
db>

---
Triggered by the DF-3480 harness (btsbx.ko fake lower layer delivering an
NGM_L2CAP_L2CA_CON_IND for a PSM a local listener is bound to): the inbound
connection path calls sonewconn() -> pru_attach ->
ng_btsocket_l2cap_attach(), which links the pcb to the socket without taking
the "implied pcb ref" (soreference) that sonewconn's contract requires
(uipc_socket2.c:398-404; compare in_pcballoc() -> soreference(),
sys/netinet/in_pcb.c:295).