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))

Reply via email to