[PATCH] net/virtio: fix checksum offset check in Rx path

Maxime Coquelin maxime.coquelin at redhat.com
Tue Oct 20 11:38:20 CEST 2026


On Mon, Oct 19, 2026 at 3:57 PM Morten Brørup <mb at smartsharesystems.com> wrote:
>
> Writing the checksum in the packet needs room for 2 bytes, not 1 byte.
>
> Fixes: 96cb6711939e ("net/virtio: support Rx checksum offload")
> Fixes: 0eaf7fc2fe8e ("net/virtio: separate AVX Rx/Tx")
> Cc: stable at dpdk.org
>
> Signed-off-by: Morten Brørup <mb at smartsharesystems.com>
> ---
>  drivers/net/virtio/virtio_rxtx.c        | 2 +-
>  drivers/net/virtio/virtio_rxtx_packed.h | 2 +-
>  2 files changed, 2 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/net/virtio/virtio_rxtx.c b/drivers/net/virtio/virtio_rxtx.c
> index edecd2011f..1afb68bc69 100644
> --- a/drivers/net/virtio/virtio_rxtx.c
> +++ b/drivers/net/virtio/virtio_rxtx.c
> @@ -955,7 +955,7 @@ virtio_rx_offload(struct rte_mbuf *m, struct virtio_net_hdr *hdr)
>                         if (likely(csum != 0xffff))
>                                 csum = ~csum;
>                         off = hdr->csum_offset + hdr->csum_start;
> -                       if (rte_pktmbuf_data_len(m) >= off + 1)
> +                       if (rte_pktmbuf_data_len(m) >= off + sizeof(uint16_t))
>                                 *rte_pktmbuf_mtod_offset(m, uint16_t *,
>                                         off) = csum;
>                 }
> diff --git a/drivers/net/virtio/virtio_rxtx_packed.h b/drivers/net/virtio/virtio_rxtx_packed.h
> index f7cc60bb51..6501ede3f0 100644
> --- a/drivers/net/virtio/virtio_rxtx_packed.h
> +++ b/drivers/net/virtio/virtio_rxtx_packed.h
> @@ -185,7 +185,7 @@ virtio_vec_rx_offload(struct rte_mbuf *m, struct virtio_net_hdr *hdr)
>                         if (likely(csum != 0xffff))
>                                 csum = ~csum;
>                         off = hdr->csum_offset + hdr->csum_start;
> -                       if (rte_pktmbuf_data_len(m) >= off + 1)
> +                       if (rte_pktmbuf_data_len(m) >= off + sizeof(uint16_t))
>                                 *rte_pktmbuf_mtod_offset(m, uint16_t *,
>                                         off) = csum;
>                 }
> --
> 2.43.0
>

Reviewed-by: Maxime Coquelin <maxime.coquelin at redhat.com>



More information about the dev mailing list