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

Reply via email to