[dpdk-stable] [PATCH] net/virtio: fix vectorized path receive oversized packets
Maxime Coquelin
maxime.coquelin at redhat.com
Fri Oct 15 14:20:06 CEST 2021
On 9/26/21 11:28, Marvin Liu wrote:
> 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])) {
>
Reviewed-by: Maxime Coquelin <maxime.coquelin at redhat.com>
Thanks,
Maxime
More information about the stable
mailing list