ip_frag: fix double free of chained mbufs
The first mbuf and the last mbuf to be visited in the preceding loop are not set to NULL in the fragmentation table. This creates the possibility of a double free when the fragmentation table is later freed with rte_ip_frag_table_destroy(). Fixes: 95908f52393d ("ip_frag: free mbufs on reassembly table destroy") Cc: stable@dpdk.org Signed-off-by: Allain Legacy <allain.legacy@windriver.com> Acked-by: Konstantin Ananyev <konstantin.ananyev@intel.com>
This commit is contained in:
parent
85bf2b6001
commit
4f512a1919
@ -59,7 +59,9 @@ ipv4_frag_reassemble(struct ip_frag_pkt *fp)
|
||||
/* chain with the first fragment. */
|
||||
rte_pktmbuf_adj(m, (uint16_t)(m->l2_len + m->l3_len));
|
||||
rte_pktmbuf_chain(fp->frags[IP_FIRST_FRAG_IDX].mb, m);
|
||||
fp->frags[curr_idx].mb = NULL;
|
||||
m = fp->frags[IP_FIRST_FRAG_IDX].mb;
|
||||
fp->frags[IP_FIRST_FRAG_IDX].mb = NULL;
|
||||
|
||||
/* update mbuf fields for reassembled packet. */
|
||||
m->ol_flags |= PKT_TX_IP_CKSUM;
|
||||
|
@ -82,7 +82,9 @@ ipv6_frag_reassemble(struct ip_frag_pkt *fp)
|
||||
/* chain with the first fragment. */
|
||||
rte_pktmbuf_adj(m, (uint16_t)(m->l2_len + m->l3_len));
|
||||
rte_pktmbuf_chain(fp->frags[IP_FIRST_FRAG_IDX].mb, m);
|
||||
fp->frags[curr_idx].mb = NULL;
|
||||
m = fp->frags[IP_FIRST_FRAG_IDX].mb;
|
||||
fp->frags[IP_FIRST_FRAG_IDX].mb = NULL;
|
||||
|
||||
/* update mbuf fields for reassembled packet. */
|
||||
m->ol_flags |= PKT_TX_IP_CKSUM;
|
||||
|
Loading…
x
Reference in New Issue
Block a user