From: Emmanuel Roullit Date: Tue, 24 Jan 2017 20:36:03 +0000 (+0100) Subject: vhost: do not GSO when no header is present X-Git-Tag: spdx-start~4634 X-Git-Url: http://git.droids-corp.org/?a=commitdiff_plain;h=5c1f70daafbca24fe10dc21afe44320e323d2f8f;p=dpdk.git vhost: do not GSO when no header is present Found with clang static analysis: lib/librte_vhost/virtio_net.c:723:17: warning: Access to field 'data_off' results in a dereference of a null pointer (loaded from variable 'tcp_hdr') m->l4_len = (tcp_hdr->data_off & 0xf0) >> 2; ^~~~~~~~~~~~~~~~~ Fixes: d0cf91303d73 ("vhost: add Tx offload capabilities") Cc: stable@dpdk.org Signed-off-by: Emmanuel Roullit Acked-by: Yuanhan Liu --- diff --git a/lib/librte_vhost/virtio_net.c b/lib/librte_vhost/virtio_net.c index 143c0fa731..337470d64a 100644 --- a/lib/librte_vhost/virtio_net.c +++ b/lib/librte_vhost/virtio_net.c @@ -679,6 +679,7 @@ parse_ethernet(struct rte_mbuf *m, uint16_t *l4_proto, void **l4_hdr) default: m->l3_len = 0; *l4_proto = 0; + *l4_hdr = NULL; break; } } @@ -715,7 +716,7 @@ vhost_dequeue_offload(struct virtio_net_hdr *hdr, struct rte_mbuf *m) } } - if (hdr->gso_type != VIRTIO_NET_HDR_GSO_NONE) { + if (l4_hdr && hdr->gso_type != VIRTIO_NET_HDR_GSO_NONE) { switch (hdr->gso_type & ~VIRTIO_NET_HDR_GSO_ECN) { case VIRTIO_NET_HDR_GSO_TCPV4: case VIRTIO_NET_HDR_GSO_TCPV6: