Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 28 Aug 2014 17:04:01 -0400
From:      Brian Rak <brak@gameservers.com>
To:        Bryan Venteicher <bryanv@daemoninthecloset.org>
Cc:        "freebsd-hackers@freebsd.org" <freebsd-hackers@freebsd.org>
Subject:   Re: Bug in FreeBSD VirtIO network driver (only with pf enabled)
Message-ID:  <53FF9941.20807@gameservers.com>
In-Reply-To: <CAMo0n6RkCB0aCx_G6ZMmJNXopfuAbyTw1=gnuUkTcpQxH3N%2BhQ@mail.gmail.com>
References:  <53FE2B37.7050309@gameservers.com> <CAMo0n6RkCB0aCx_G6ZMmJNXopfuAbyTw1=gnuUkTcpQxH3N%2BhQ@mail.gmail.com>

next in thread | previous in thread | raw e-mail | index | archive | help
Should I open a bug about this?

On 8/28/2014 12:35 AM, Bryan Venteicher wrote:
>
>
>
> On Wed, Aug 27, 2014 at 2:02 PM, Brian Rak <brak@gameservers.com 
> <mailto:brak@gameservers.com>> wrote:
>
>     I have a FreeBSD 10 x64 guest installed inside a KVM instance on
>     Linux.  When pf is active, and the server is sending data it
>     causes the Linux host to report warnings related to GSO.
>
>     I've talked to some Linux developers, and they believe it to be a
>     bug inside the FreeBSD VirtIO drivers.  Based on what I'm seeing,
>     I'm inclined to agree with them.
>
>     Reproduction is mildly annoying, you need:
>     1) A KVM guest setup with bridged networking, with FreeBSD running
>     side using the VirtIO network interface.  (We tested with CentOS,
>     but the exact distribution should not matter)
>     2) pf enabled (I'm using a single rule: "scrub in all")
>     3) Some method of sending a bit of traffic from the guest (I use
>     netcat)
>
>     So, when I do this:
>
>     # service pf start
>     # cat /root/test | nc vultr.com <http://vultr.com>; 80
>
>     The Linux kernel on the host will report:
>
>     kernel: WARNING: CPU: 7 PID: 7772 at net/core/dev.c:2246
>     skb_warn_bad_offload+0xc3/0xd0()
>     kernel: igb: caps=(0x0000000640114bb3, 0x0000000000000000)
>     len=1498 data_len=0 gso_size=1380 gso_type=5 ip_summed=0
>
>     If I do:
>
>     # service pf stop
>     # cat /root/test | nc vultr.com <http://vultr.com>; 80
>
>     No such warning is reported.  I can only reproduce this with pf
>     enabled.  The contents of the /root/test don't matter, I'm using
>     4k of data from /dev/urandom.  The test file just needs to be
>     bigger then the MTU of the host's network interface.
>
>     I was able to track this down to the virtio_net_hdr being sent by
>     the FreeBSD guest.  With pf enabled, this outbound traffic has the
>     following header:
>
>     flags =  0
>     gso_type = VIRTIO_NET_HDR_GSO_TCPV4
>     hdr_len = 66
>     gso_size =  1440
>     csum_start = 0
>     csum_offset = 0
>
>     But, this is not a valid configuration.  With
>     VIRTIO_NET_HDR_GSO_TCPV4 enabled, you should also be setting
>     VIRTIO_NET_HDR_F_NEEDS_CSUM and populating the csum_start and
>     csum_offset fields.
>
>
>
> ​It would appear that somewhere in pf the CSUM_TCP flag is getting 
> clear for CSUM_TSO packets. I don't believe the stack otherwise sets 
> CSUM_TSO without CSUM_TCP. Now, it is probably safe to assume CSUM_TCP 
> when CSUM_TSO is set: the mbuf's m_pkthdr.csum_data better be valid in 
> such cases though.
>
>     http://www.spinics.net/lists/netdev/msg293976.html gives more
>     detail on this.  I don't fully understand this, so I'd probably
>     mangle the explanation if I tried to give more detail.  I can
>     reproduce this at will now, but fixing it is beyond my abilities. 
>     Is there a better place to report this?  I'm not entirely sure who
>     is responsible for maintaining the virtio driver.
>     _______________________________________________
>     freebsd-hackers@freebsd.org <mailto:freebsd-hackers@freebsd.org>
>     mailing list
>     http://lists.freebsd.org/mailman/listinfo/freebsd-hackers
>     To unsubscribe, send any mail to
>     "freebsd-hackers-unsubscribe@freebsd.org
>     <mailto:freebsd-hackers-unsubscribe@freebsd.org>"
>
>




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?53FF9941.20807>