Hi,
I put here a bug among others:
-------------------------- sys/dev/pci/if_bnx.c ------------------------
if ((status & L2_FHDR_STATUS_L2_VLAN_TAG) &&
!(sc->rx_mode & BNX_EMAC_RX_MODE_KEEP_VLAN_TAG)) {
#if NVLAN > 0
DBPRINT(sc, BNX_VERBOSE_SEND,
"%s(): VLAN tag = 0x%04X\n",
__FUNCTION__,
l2fhdr->l2_fhdr_vlan_tag);
m->m_pkthdr.ether_vtag =
l2fhdr->l2_fhdr_vlan_tag;
m->m_flags |= M_VLANTAG;
#else
m_freem(m);
goto bnx_rx_int_next_rx;
#endif
}
bnx_rx_int_next_rx:
sw_prod = NEXT_RX_BD(sw_prod);
}
sw_cons = NEXT_RX_BD(sw_cons);
/* If we have a packet, pass it up the stack */
if (m) {
sc->rx_cons = sw_cons;
DBPRINT(sc, BNX_VERBOSE_RECV,
"%s(): Passing received frame up.\n", __FUNCTION__);
ml_enqueue(&ml, m);
DBRUNIF(1, sc->rx_mbuf_alloc--);
sw_cons = sc->rx_cons;
}
------------------------------------------------------------------------
Use-after-free with 'm'.
Found by The Brainy Code Scanner.
Maxime