I had the misfortune of hitting a KASSERT in dwge:
panic: kernel diagnostic assertion "len > 0" failed: file "/usr/src/sys/dev/fdt
/if_dwge.c", line 1102
Stopped at panic+0x106: addi a0,zero,256 TID PID UID PR
FLAGS PFLAGS CPU COMMAND
*405136 98879 1500 0x3 0 0 git
301471 67731 0 0x14000 0x200 1 softnet0
panic() at panic+0x106
panic() at panic
dwge_rx_proc() at dwge_rx_proc+0x1d4
dwge_intr() at dwge_intr+0x4e
plic_irq_dispatch() at plic_irq_dispatch+0xec
plic_irq_handler() at plic_irq_handler+0x56
riscv_cpu_intr() at riscv_cpu_intr+0x22
cpu_exception_handler_supervisor() at cpu_exception_handler_supervisor+0x7a
pmap_copy_page() at pmap_copy_page+0x94
uvm_pagerealloc_multi() at uvm_pagerealloc_multi+0x24e
buf_realloc_pages() at buf_realloc_pages+0xa0
buf_flip_high() at buf_flip_high+0x64
bufcache_recover_dmapages() at bufcache_recover_dmapages+0x13a
buf_get() at buf_get+0xec
end trace frame: 0xffffffc04d9ac870, count: 0
The following diff should count the error and skirt the panic.
Index: if_dwge.c
===================================================================
RCS file: /OpenBSD/src/sys/dev/fdt/if_dwge.c,v
retrieving revision 1.19
diff -u -p -r1.19 if_dwge.c
--- if_dwge.c 15 Aug 2023 08:27:30 -0000 1.19
+++ if_dwge.c 18 Oct 2023 16:37:59 -0000
@@ -1099,13 +1101,15 @@ dwge_rx_proc(struct dwge_softc *sc)
/* Strip off CRC. */
len -= ETHER_CRC_LEN;
- KASSERT(len > 0);
-
- m = rxb->tb_m;
- rxb->tb_m = NULL;
- m->m_pkthdr.len = m->m_len = len;
+ if (len <= 0) {
+ ifp->if_ierrors++;
+ } else {
+ m = rxb->tb_m;
+ rxb->tb_m = NULL;
+ m->m_pkthdr.len = m->m_len = len;
- ml_enqueue(&ml, m);
+ ml_enqueue(&ml, m);
+ }
put++;
if (sc->sc_rx_cons == (DWGE_NRXDESC - 1))