DF-3778 / manifest.json
{ "finding_id": "DF-3778", "file": "sys/dev/netif/jme/if_jme.c", "verdict": "inconclusive", "impact_class": "none", "reproduce": { "build": "n/a (analysis-only trigger.c; fix compile-validated via incremental nativekernel build, fix_build.log)", "run": "vm.sh run_root 'ifconfig -l; pciconf -l | grep -i -E \"jmicron|JMC\" || echo NO_JMICRON_PCI; kldstat -v | grep -E \"jme/miibus|pci/if_jme\"; grep -n \"jme_rxeof(rdata\" /usr/src/sys/dev/netif/jme/if_jme.c; grep -cn process_limit /usr/src/sys/dev/netif/jme/if_jme.c'", "expected": "Source-level certain: jme_rxeof (sys/dev/netif/jme/if_jme.c:2494-2562) has one work bound (count, :2496) and every interrupt-context call site passes -1 (jme_rx_intr :3500, jme_msix_rx :3845, jme_rx_restart :3882) while the driver's own ifpoll path passes a real bound (:3341, cycle) and no bound knob exists (process_limit: 0 hits). Per-iteration work (m_getcl + dmamap load + if_input, :3061-3082/:2474) exceeds the 672ns 64-byte 1GbE line-rate inter-arrival budget, so a remote unauthenticated line-rate small-packet flood keeps the ring perpetually non-empty and the interrupt handler spins forever holding its serializer (ring serializer under MSI-X; MAIN serializer under legacy/MSI - wedging the whole interface including ifconfig-down recovery). Runtime hardware-gated: guest has no JMicron NIC (presence probe in run.log; if_jme compiled into the running kernel) -> inconclusive per family convention (DF-3761/alc precedent)." }, "kernel_refs": [ "sys/dev/netif/jme/if_jme.c:2494", "sys/dev/netif/jme/if_jme.c:2496", "sys/dev/netif/jme/if_jme.c:3341", "sys/dev/netif/jme/if_jme.c:3500", "sys/dev/netif/jme/if_jme.c:3845", "sys/dev/netif/jme/if_jme.c:3882", "sys/dev/netif/jme/if_jme.c:2150", "sys/dev/netif/jme/if_jme.c:3912", "sys/dev/netif/jme/if_jme.c:3672", "sys/dev/netif/jme/if_jme.c:3061" ], "artifacts": [ "README.md", "VERDICT.md", "trigger.c", "run.log", "fix_build.log", "env.txt", "fix.diff", "manifest.json", "verdict.json" ] } |