From: Willem de Bruijn <willemdebruijn.ker...@gmail.com> Date: Wed, 6 Jun 2018 11:23:01 -0400
> From: Willem de Bruijn <will...@google.com> > > Tun, tap, virtio, packet and uml vector all use struct virtio_net_hdr > to communicate packet metadata to userspace. > > For skbuffs with vlan, the first two return the packet as it may have > existed on the wire, inserting the VLAN tag in the user buffer. Then > virtio_net_hdr.csum_start needs to be adjusted by VLAN_HLEN bytes. > > Commit f09e2249c4f5 ("macvtap: restore vlan header on user read") > added this feature to macvtap. Commit 3ce9b20f1971 ("macvtap: Fix > csum_start when VLAN tags are present") then fixed up csum_start. > > Virtio, packet and uml do not insert the vlan header in the user > buffer. > > When introducing virtio_net_hdr_from_skb to deduplicate filling in > the virtio_net_hdr, the variant from macvtap which adds VLAN_HLEN was > applied uniformly, breaking csum offset for packets with vlan on > virtio and packet. > > Make insertion of VLAN_HLEN optional. Convert the callers to pass it > when needed. > > Fixes: e858fae2b0b8f4 ("virtio_net: use common code for virtio_net_hdr and > skb GSO conversion") > Fixes: 1276f24eeef2 ("packet: use common code for virtio_net_hdr and skb GSO > conversion") > Signed-off-by: Willem de Bruijn <will...@google.com> Applied and queued up for -stable, thanks Willem.