Subject: Re: [PATCH 2/3] virtio: Net header needs gso_hdr_len

From: Rusty Russell <[email-masked]>
Date: Wed, 16 Jan 2008 15:19:03 +1100

On Wednesday 16 January 2008 11:06:21 Herbert Xu wrote:
> Rusty Russell <[email-masked]> wrote:
> > It's far easier to deal with GSO if we don't have to parse the packet
> > to figure out the header length.  Add the field to the virtio_net_hdr
> > struct (and fix the spaces that somehow crept in there).
> >
> > Signed-off-by: Rusty Russell <[email-masked]>
> > ---
> > drivers/net/virtio_net.c   |    4 +++-
> > include/linux/virtio_net.h |   11 ++++++-----
> > 2 files changed, 9 insertions(+), 6 deletions(-)
> >
> > diff -r 24ef33a4ab14 drivers/net/virtio_net.c
> > --- a/drivers/net/virtio_net.c  Tue Jan 15 16:59:58 2008 +1100
> > +++ b/drivers/net/virtio_net.c  Tue Jan 15 21:21:40 2008 +1100
> > @@ -126,6 +126,7 @@ static void receive_skb(struct net_devic
> >                /* Header must be checked, and gso_segs computed. */
> >                skb_shinfo(skb)->gso_type |= SKB_GSO_DODGY;
> >                skb_shinfo(skb)->gso_segs = 0;
> > +               skb_set_transport_header(skb, hdr->gso_hdr_len);
>
> Why do we need this? When receiving GSO packets from an untrusted
> source the network stack will fill in the transport header offset
> after verifying that the headers are sane.

Thanks for clarifying; it simplifies things.

I'll re-test and resend.
Rusty.