diff mbox

skb_segment() questions

Message ID 20090329020701.GA9983@gondor.apana.org.au
State Accepted, archived
Delegated to: David Miller
Headers show

Commit Message

Herbert Xu March 29, 2009, 2:07 a.m. UTC
On Wed, Mar 04, 2009 at 07:12:40PM -0800, James Huang wrote:
>
> (2) What is the purpose of the this check?
> 
> `    if (pos >= offset + len)
>         continue;
> 
>      If the payload in the head buffer of skb has at least mss bytes, this
> check will succeed and no payload in skb’s head buffer will be copy into
> nskb
> through a call to skb_copy_from_linear_data_offset(). Something seems to be
> wrong here.

Indeed.  This breaks linear packets, which unfortunately older
versions of tun likes to construct.

gso: Fix support for linear packets

When GRO/frag_list support was added to GSO, I made an error
which broke the support for segmenting linear GSO packets (GSO
packets are normally non-linear in the payload).

These days most of these packets are constructed by the tun
driver, which prefers to allocate linear memory if possible.
This is fixed in the latest kernel, but for 2.6.29 and earlier
it is still the norm.

Therefore this bug causes failures with GSO when used with tun
in 2.6.29.

Reported-by: James Huang <jamesclhuang@gmail.com>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>


Thanks,

Comments

David Miller March 29, 2009, 6:39 a.m. UTC | #1
From: Herbert Xu <herbert@gondor.apana.org.au>
Date: Sun, 29 Mar 2009 10:07:01 +0800

> gso: Fix support for linear packets
> 
> When GRO/frag_list support was added to GSO, I made an error
> which broke the support for segmenting linear GSO packets (GSO
> packets are normally non-linear in the payload).
> 
> These days most of these packets are constructed by the tun
> driver, which prefers to allocate linear memory if possible.
> This is fixed in the latest kernel, but for 2.6.29 and earlier
> it is still the norm.
> 
> Therefore this bug causes failures with GSO when used with tun
> in 2.6.29.
> 
> Reported-by: James Huang <jamesclhuang@gmail.com>
> Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>

Applied, thanks.
--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Mark McLoughlin March 30, 2009, 8:50 a.m. UTC | #2
On Sat, 2009-03-28 at 23:39 -0700, David Miller wrote:
> From: Herbert Xu <herbert@gondor.apana.org.au>
> Date: Sun, 29 Mar 2009 10:07:01 +0800
> 
> > gso: Fix support for linear packets
> > 
> > When GRO/frag_list support was added to GSO, I made an error
> > which broke the support for segmenting linear GSO packets (GSO
> > packets are normally non-linear in the payload).
> > 
> > These days most of these packets are constructed by the tun
> > driver, which prefers to allocate linear memory if possible.
> > This is fixed in the latest kernel, but for 2.6.29 and earlier
> > it is still the norm.
> > 
> > Therefore this bug causes failures with GSO when used with tun
> > in 2.6.29.
> > 
> > Reported-by: James Huang <jamesclhuang@gmail.com>
> > Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
> 
> Applied, thanks.

This is needed in -stable too, fwiw. Fixes e.g. virtio guest->remote
with 2.6.29 host:

  https://bugzilla.redhat.com/490266

Cheers,
Mark.

--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
David Miller March 30, 2009, 8:57 p.m. UTC | #3
From: Mark McLoughlin <markmc@redhat.com>
Date: Mon, 30 Mar 2009 09:50:45 +0100

> On Sat, 2009-03-28 at 23:39 -0700, David Miller wrote:
> > From: Herbert Xu <herbert@gondor.apana.org.au>
> > Date: Sun, 29 Mar 2009 10:07:01 +0800
> > 
> > > gso: Fix support for linear packets
> > > 
> > > When GRO/frag_list support was added to GSO, I made an error
> > > which broke the support for segmenting linear GSO packets (GSO
> > > packets are normally non-linear in the payload).
> > > 
> > > These days most of these packets are constructed by the tun
> > > driver, which prefers to allocate linear memory if possible.
> > > This is fixed in the latest kernel, but for 2.6.29 and earlier
> > > it is still the norm.
> > > 
> > > Therefore this bug causes failures with GSO when used with tun
> > > in 2.6.29.
> > > 
> > > Reported-by: James Huang <jamesclhuang@gmail.com>
> > > Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
> > 
> > Applied, thanks.
> 
> This is needed in -stable too, fwiw. Fixes e.g. virtio guest->remote
> with 2.6.29 host:
> 
>   https://bugzilla.redhat.com/490266

I know, I'll queue it up.
--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Mark McLoughlin April 20, 2009, 11:12 a.m. UTC | #4
On Mon, 2009-03-30 at 13:57 -0700, David Miller wrote:
> From: Mark McLoughlin <markmc@redhat.com>
> Date: Mon, 30 Mar 2009 09:50:45 +0100
> 
> > On Sat, 2009-03-28 at 23:39 -0700, David Miller wrote:
> > > From: Herbert Xu <herbert@gondor.apana.org.au>
> > > Date: Sun, 29 Mar 2009 10:07:01 +0800
> > > 
> > > > gso: Fix support for linear packets
> > > > 
> > > > When GRO/frag_list support was added to GSO, I made an error
> > > > which broke the support for segmenting linear GSO packets (GSO
> > > > packets are normally non-linear in the payload).
> > > > 
> > > > These days most of these packets are constructed by the tun
> > > > driver, which prefers to allocate linear memory if possible.
> > > > This is fixed in the latest kernel, but for 2.6.29 and earlier
> > > > it is still the norm.
> > > > 
> > > > Therefore this bug causes failures with GSO when used with tun
> > > > in 2.6.29.
> > > > 
> > > > Reported-by: James Huang <jamesclhuang@gmail.com>
> > > > Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
> > > 
> > > Applied, thanks.
> > 
> > This is needed in -stable too, fwiw. Fixes e.g. virtio guest->remote
> > with 2.6.29 host:
> > 
> >   https://bugzilla.redhat.com/490266
> 
> I know, I'll queue it up.

This hasn't made it yet? Just had another report on kvm list about it.

(Can't seem to find anywhere to check whether it's queued)

Cheers,
Mark.

--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
David Miller April 20, 2009, 11:57 a.m. UTC | #5
From: Mark McLoughlin <markmc@redhat.com>
Date: Mon, 20 Apr 2009 12:12:10 +0100

> On Mon, 2009-03-30 at 13:57 -0700, David Miller wrote:
>> I know, I'll queue it up.
> 
> This hasn't made it yet? Just had another report on kvm list about it.
> 
> (Can't seem to find anywhere to check whether it's queued)

Sorry, it's in my backlog, I'll take care of it tomorr.w
--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
diff mbox

Patch

diff --git a/net/core/skbuff.c b/net/core/skbuff.c
index 6acbf9e..ce6356c 100644
--- a/net/core/skbuff.c
+++ b/net/core/skbuff.c
@@ -2579,7 +2579,7 @@  struct sk_buff *skb_segment(struct sk_buff *skb, int features)
 					  skb_network_header_len(skb));
 		skb_copy_from_linear_data(skb, nskb->data, doffset);
 
-		if (pos >= offset + len)
+		if (fskb != skb_shinfo(skb)->frag_list)
 			continue;
 
 		if (!sg) {