[dpdk-stable] [PATCH] net/virtio: fix vectorized path receive oversized packets

Maxime Coquelin maxime.coquelin at redhat.com
Thu Oct 21 14:28:04 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])) {
> 


Applied to dpdk-next-virtio/main.

Thanks,
Maxime



More information about the stable mailing list