⬢ DragonFlyBSD Kernel Audit
DF-4267 / run.kld_fixed.log
← back to finding ↓ download raw
cc  -O2 -pipe   -D_KERNEL -Wall -Wredundant-decls -Wnested-externs -Wstrict-prototypes  -Wmissing-prototypes -Wpointer-arith -Wcast-qual  -Wold-style-definition -Wmissing-include-dirs  -Wno-pointer-sign -Winit-self -Wundef -Wno-unused-but-set-variable -std=gnu11 -Werror -DKLD_MODULE -nostdinc  -I. -Idragonfly -I/root/dfwb3/forwarder_x86_64/include -Idragonfly/../include -I/usr/include  -Wold-style-declaration -fno-common -ffreestanding -fno-stack-protector -fno-strict-aliasing -fno-strict-overflow -fno-asynchronous-unwind-tables -fno-omit-frame-pointer -mcmodel=kernel -mno-red-zone -mno-mmx -mno-sse -msoft-float -mno-fp-ret-in-387 -mindirect-branch=thunk-inline   -c dfwb3_rig.c
wb_rxeof=0xffffffff808daed0 wb_init=0xffffffff808da750 wb_stop=0xffffffff808d9850 wb_start=0xffffffff808d9e90 wb_txeof.part.4=0xffffffff808da510 wb_watchdog=0xffffffff808dae60 mbstat=0xffffffff8131dec0 mbtypes=0xffffffff81325ec0
kern.dfwb3.rxeof: 0x0000000000000000 -> 0xffffffff808daed0
kern.dfwb3.init: 0x0000000000000000 -> 0xffffffff808da750
kern.dfwb3.stop: 0x0000000000000000 -> 0xffffffff808d9850
kern.dfwb3.start: 0x0000000000000000 -> 0xffffffff808d9e90
kern.dfwb3.txeof: 0x0000000000000000 -> 0xffffffff808da510
kern.dfwb3.watchdog: 0x0000000000000000 -> 0xffffffff808dae60
kern.dfwb3.mbstat: 0x0000000000000000 -> 0xffffffff8131dec0
kern.dfwb3.mbtypes: 0x0000000000000000 -> 0xffffffff81325ec0
=== go4267: ring built by REAL wb_init (DF-4267) ===
kern.dfwb3.go4267: 0 -> 0
GO_RC=0
=== marker summary ===
dfwb3: cluster pool exhausted after 34655 clusters
dfwb3: saved-chain walk: 17 mbufs intact (m_len==128, marker ok: 0 damaged)
dfwb3: after REAL wb_txeof.part.4 with a chip-completed head descriptor: opackets +0, wb_tx_head=0xffffffff82650348 STILL SET, chain[0].wb_mbuf=0 M-bM^@M^T the :1062 walk 'while (head->wb_mbuf != NULL)' never entered: TX completion WEDGED (5s watchdog is the only exit)
dfwb3: *** DF-4270 WEDGE CONFIRMED ***
dfwb3: go4270 SURVIVED M-bM^@M^T guest stays up
dfwb3: cluster pool exhausted after 34355 clusters
dfwb3: saved-chain walk: 17 mbufs intact (m_len==128, marker ok: 0 damaged)
dfwb3: *** DF-4270 LEAK CONFIRMED: exactly the 17 mbufs of the dequeued packet chain are still allocated and referenced by NOTHING (queue empty, descriptor wb_mbuf NULL) ***
dfwb3: after REAL wb_txeof.part.4 with a chip-completed head descriptor: opackets +0, wb_tx_head=0xffffffff82650348 STILL SET, chain[0].wb_mbuf=0 M-bM^@M^T the :1062 walk 'while (head->wb_mbuf != NULL)' never entered: TX completion WEDGED (5s watchdog is the only exit)
dfwb3: *** DF-4270 WEDGE CONFIRMED ***
dfwb3: go4270 SURVIVED M-bM^@M^T guest stays up
dfwb3: A/B with ONE-TOKEN-FIXED links (simulated fix.diff): delivered=1 head==chain1:1 M-bM^@M^T the identical state now advances past slot 0
dfwb3: *** DF-4267 A/B: only the link words differ M-bM^@M^T the collapse is the ternary at if_wb.c:909 ***
dfwb3: go4267 SURVIVED M-bM^@M^T guest stays up
---DMESG---
dfwb3: === DF-4267: ring built by the REAL wb_init (inlined wb_list_rx_init, if_wb.c:894-917) ===
dfwb3: hardware links ld->wb_rx_list[i].wb_next (a closed ring would link i -> i+1, 63 -> 0):
dfwb3:   wb_rx_list[ 0].wb_next = 0x0541b110 
dfwb3:   wb_rx_list[ 8].wb_next = 0x0541b190 
dfwb3:   wb_rx_list[16].wb_next = 0x0541b210 
dfwb3:   wb_rx_list[24].wb_next = 0x0541b290 
dfwb3:   wb_rx_list[32].wb_next = 0x0541b310 
dfwb3:   wb_rx_list[40].wb_next = 0x0541b390 
dfwb3:   wb_rx_list[48].wb_next = 0x0541b410 
dfwb3:   wb_rx_list[56].wb_next = 0x0541b490 
dfwb3:   => -1/64 hardware wb_next words point at descriptor 0 (vtophys(&wb_rx_list[0])=0x541b100)
dfwb3: software walk from wb_rx_head: distinct descriptors reachable = 64 / 64 (returned to a visited descriptor after 64 hops)
dfwb3: TX contrast: distinct descriptors reachable from wb_tx_free = 128 / 128 (the :878 twin is correct)
dfwb3: [4267-crafted] head==chain0:1 slot0.status=0x40400300 OWN:0 RXLEN:64 mbuf=0xfffff80089795c00
dfwb3: if_input: m=0xfffff8008979dc00 m_len=60 pkthdr.len=60 dst=ff:ff:ff:ff:ff:ff type=df67 (further normal deliveries suppressed in log)
dfwb3: after processing the completed frame: delivered=1 head==chain0:0 head==chain1:1 M-bM^@M^T a correct ring advances head to chain[1]
dfwb3: if_input: m=0xfffff8008979dc00 m_len=60 pkthdr.len=60 dst=ff:ff:ff:ff:ff:ff type=df67 (further normal deliveries suppressed in log)
dfwb3: A/B with ONE-TOKEN-FIXED links (simulated fix.diff): delivered=1 head==chain1:1 M-bM^@M^T the identical state now advances past slot 0
dfwb3: *** DF-4267 A/B: only the link words differ M-bM^@M^T the collapse is the ternary at if_wb.c:909 ***
dfwb3: MMIO WB_RXADDR=0x0541b100 (== vtophys(&wb_rx_list[0]): YES) M-bM^@M^T every RX (re)start fetches descriptor 0; with all wb_next words pointing back to 0 the chip suspends after ONE frame (per-frame RX restart, wb_intr:1137/wb_rxeoc:1030)
dfwb3: go4267 SURVIVED M-bM^@M^T guest stays up