[dpdk-stable] [PATCH] net/virtio: fix vectorized path receive oversized packets
Marvin Liu
yong.liu at intel.com
Sun Sep 26 11:28:42 CEST 2021
If packed ring size is not power of two, it is possible that remained
number less than one batch and meanwhile batch operation can pass.
This will cause incorrect remained number calculation and then lead to
receiving oversized packets. The patch fixed the issue by added
remained number check before batch operation.
Fixes: 77d66da83834 ("net/virtio: add vectorized packed ring Rx")
Cc: stable at dpdk.org
Signed-off-by: Marvin Liu <yong.liu at intel.com>
diff --git a/drivers/net/virtio/virtio_rxtx_packed.c b/drivers/net/virtio/virtio_rxtx_packed.c
index ab489a58af..45cf39df22 100644
--- a/drivers/net/virtio/virtio_rxtx_packed.c
+++ b/drivers/net/virtio/virtio_rxtx_packed.c
@@ -95,11 +95,13 @@ virtio_recv_pkts_packed_vec(void *rx_queue,
num = num - ((vq->vq_used_cons_idx + num) % PACKED_BATCH_SIZE);
while (num) {
- if (!virtqueue_dequeue_batch_packed_vec(rxvq,
- &rx_pkts[nb_rx])) {
- nb_rx += PACKED_BATCH_SIZE;
- num -= PACKED_BATCH_SIZE;
- continue;
+ if (num >= PACKED_BATCH_SIZE) {
+ if (!virtqueue_dequeue_batch_packed_vec(rxvq,
+ &rx_pkts[nb_rx])) {
+ nb_rx += PACKED_BATCH_SIZE;
+ num -= PACKED_BATCH_SIZE;
+ continue;
+ }
}
if (!virtqueue_dequeue_single_packed_vec(rxvq,
&rx_pkts[nb_rx])) {
--
2.17.1
More information about the stable
mailing list