From: David Marchand Date: Thu, 25 Jul 2019 19:24:17 +0000 (+0200) Subject: net/pcap: fix Rx with small buffers X-Git-Url: http://git.droids-corp.org/?a=commitdiff_plain;h=6653d812c6d47f02ec6562a6118254299b0ffd5c;p=dpdk.git net/pcap: fix Rx with small buffers If the pkt pool contains only buffers smaller than the default headroom, then the driver will compute an invalid buffer size (negative value cast to an uint16_t). Rely on the mbuf api to check how much space is available in the mbuf. Fixes: 6eb0ae218a98 ("pcap: fix mbuf allocation") Cc: stable@dpdk.org Signed-off-by: David Marchand Acked-by: Ferruh Yigit --- diff --git a/drivers/net/pcap/rte_eth_pcap.c b/drivers/net/pcap/rte_eth_pcap.c index 322c18f75e..470867de67 100644 --- a/drivers/net/pcap/rte_eth_pcap.c +++ b/drivers/net/pcap/rte_eth_pcap.c @@ -242,7 +242,6 @@ eth_pcap_rx(void *queue, struct rte_mbuf **bufs, uint16_t nb_pkts) struct rte_mbuf *mbuf; struct pcap_rx_queue *pcap_q = queue; uint16_t num_rx = 0; - uint16_t buf_size; uint32_t rx_bytes = 0; pcap_t *pcap; @@ -265,11 +264,7 @@ eth_pcap_rx(void *queue, struct rte_mbuf **bufs, uint16_t nb_pkts) if (unlikely(mbuf == NULL)) break; - /* Now get the space available for data in the mbuf */ - buf_size = rte_pktmbuf_data_room_size(pcap_q->mb_pool) - - RTE_PKTMBUF_HEADROOM; - - if (header.caplen <= buf_size) { + if (header.caplen <= rte_pktmbuf_tailroom(mbuf)) { /* pcap packet will fit in the mbuf, can copy it */ rte_memcpy(rte_pktmbuf_mtod(mbuf, void *), packet, header.caplen);