Index: sys/dev/e1000/if_igb.c =================================================================== --- sys/dev/e1000/if_igb.c (revision 253364) +++ sys/dev/e1000/if_igb.c (working copy) @@ -4786,7 +4786,7 @@ igb_rxeof(struct igb_queue *que, int count, int *d /* Make sure all segments of a bad packet are discarded */ if (((staterr & E1000_RXDEXT_ERR_FRAME_ERR_MASK) != 0) || - (rxr->discard)) { + (rxr->discard) || rxr->rx_buffers[i].m_pack == NULL) { adapter->dropped_pkts++; ++rxr->rx_discarded; if (!eop) /* Catch subsequent segs */ Index: sys/dev/e1000/if_em.c =================================================================== --- sys/dev/e1000/if_em.c (revision 253364) +++ sys/dev/e1000/if_em.c (working copy) @@ -4456,7 +4456,7 @@ em_rxeof(struct rx_ring *rxr, int count, int *done eop = (status & E1000_RXD_STAT_EOP) != 0; if ((cur->errors & E1000_RXD_ERR_FRAME_ERR_MASK) || - (rxr->discard == TRUE)) { + (rxr->discard == TRUE) || rxr->rx_buffers[i].m_head == NULL) { adapter->dropped_pkts++; ++rxr->rx_discarded; if (!eop) /* Catch subsequent segs */ Index: sys/dev/ixgbe/ixgbe.c =================================================================== --- sys/dev/ixgbe/ixgbe.c (revision 253364) +++ sys/dev/ixgbe/ixgbe.c (working copy) @@ -4432,7 +4432,7 @@ ixgbe_rxeof(struct ix_queue *que) /* Make sure bad packets are discarded */ if (((staterr & IXGBE_RXDADV_ERR_FRAME_ERR_MASK) != 0) || - (rxr->discard)) { + (rxr->discard) || mp == NULL) { rxr->rx_discarded++; if (eop) rxr->discard = FALSE;