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: 6eb0ae218a
("pcap: fix mbuf allocation")
Cc: stable@dpdk.org
Signed-off-by: David Marchand <david.marchand@redhat.com>
Acked-by: Ferruh Yigit <ferruh.yigit@intel.com>
This commit is contained in:
parent
6a0276241d
commit
6653d812c6
@ -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);
|
||||
|
Loading…
Reference in New Issue
Block a user