net/virtio: fix oversized packets in vectorized Rx
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: 77d66da838
("net/virtio: add vectorized packed ring Rx")
Cc: stable@dpdk.org
Signed-off-by: Marvin Liu <yong.liu@intel.com>
Reviewed-by: Maxime Coquelin <maxime.coquelin@redhat.com>
This commit is contained in:
parent
8011a09add
commit
99ebada2d6
@ -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])) {
|
||||
|
Loading…
Reference in New Issue
Block a user