netdev.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] ipv6: fix incorrent ipv6 ipsec packet fragment
@ 2012-03-16  8:57 Gao feng
  2012-03-17  4:58 ` David Miller
  2012-03-19  8:02 ` Steffen Klassert
  0 siblings, 2 replies; 10+ messages in thread
From: Gao feng @ 2012-03-16  8:57 UTC (permalink / raw)
  To: davem; +Cc: steffen.klassert, eric.dumazet, netdev, Gao feng

Since commit 299b0767(ipv6: Fix IPsec slowpath fragmentation problem)
In func ip6_append_data,after call skb_put(skb, fraglen + dst_exthdrlen)
the skb->len contains dst_exthdrlen,and we don't reduce dst_exthdrlen at last
This will make fraggap>0 in next "while cycle",and cause the size of skb incorrent

Call skb_pull reduce skb->len before next "while cycle"

Signed-off-by: Gao feng <gaofeng@cn.fujitsu.com>
---
 net/ipv6/ip6_output.c |    3 ++-
 1 files changed, 2 insertions(+), 1 deletions(-)

diff --git a/net/ipv6/ip6_output.c b/net/ipv6/ip6_output.c
index d97e071..f67f840 100644
--- a/net/ipv6/ip6_output.c
+++ b/net/ipv6/ip6_output.c
@@ -1450,7 +1450,8 @@ alloc_new_skb:
 				kfree_skb(skb);
 				goto error;
 			}
-
+
+			skb_pull(skb, dst_exthdrlen);
 			offset += copy;
 			length -= datalen - fraggap;
 			transhdrlen = 0;
-- 
1.7.5.4

^ permalink raw reply related	[flat|nested] 10+ messages in thread

* Re: [PATCH] ipv6: fix incorrent ipv6 ipsec packet fragment
  2012-03-16  8:57 [PATCH] ipv6: fix incorrent ipv6 ipsec packet fragment Gao feng
@ 2012-03-17  4:58 ` David Miller
  2012-03-19  8:02 ` Steffen Klassert
  1 sibling, 0 replies; 10+ messages in thread
From: David Miller @ 2012-03-17  4:58 UTC (permalink / raw)
  To: gaofeng; +Cc: steffen.klassert, eric.dumazet, netdev

From: Gao feng <gaofeng@cn.fujitsu.com>
Date: Fri, 16 Mar 2012 16:57:15 +0800

> Since commit 299b0767(ipv6: Fix IPsec slowpath fragmentation problem)
> In func ip6_append_data,after call skb_put(skb, fraglen + dst_exthdrlen)
> the skb->len contains dst_exthdrlen,and we don't reduce dst_exthdrlen at last
> This will make fraggap>0 in next "while cycle",and cause the size of skb incorrent
> 
> Call skb_pull reduce skb->len before next "while cycle"
> 
> Signed-off-by: Gao feng <gaofeng@cn.fujitsu.com>

Steffen please review this patch.

> ---
>  net/ipv6/ip6_output.c |    3 ++-
>  1 files changed, 2 insertions(+), 1 deletions(-)
> 
> diff --git a/net/ipv6/ip6_output.c b/net/ipv6/ip6_output.c
> index d97e071..f67f840 100644
> --- a/net/ipv6/ip6_output.c
> +++ b/net/ipv6/ip6_output.c
> @@ -1450,7 +1450,8 @@ alloc_new_skb:
>  				kfree_skb(skb);
>  				goto error;
>  			}
> -
> +
> +			skb_pull(skb, dst_exthdrlen);
>  			offset += copy;
>  			length -= datalen - fraggap;
>  			transhdrlen = 0;
> -- 
> 1.7.5.4

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH] ipv6: fix incorrent ipv6 ipsec packet fragment
  2012-03-16  8:57 [PATCH] ipv6: fix incorrent ipv6 ipsec packet fragment Gao feng
  2012-03-17  4:58 ` David Miller
@ 2012-03-19  8:02 ` Steffen Klassert
  2012-03-19 21:21   ` David Miller
                     ` (2 more replies)
  1 sibling, 3 replies; 10+ messages in thread
From: Steffen Klassert @ 2012-03-19  8:02 UTC (permalink / raw)
  To: Gao feng; +Cc: davem, eric.dumazet, netdev

On Fri, Mar 16, 2012 at 04:57:15PM +0800, Gao feng wrote:
> Since commit 299b0767(ipv6: Fix IPsec slowpath fragmentation problem)
> In func ip6_append_data,after call skb_put(skb, fraglen + dst_exthdrlen)
> the skb->len contains dst_exthdrlen,and we don't reduce dst_exthdrlen at last
> This will make fraggap>0 in next "while cycle",and cause the size of skb incorrent

Good catch!

> 
> Call skb_pull reduce skb->len before next "while cycle"

I think it would be better to just reserve headroom for
dst_exthdrlen instead of adding and removing data to/from
the skb.

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH] ipv6: fix incorrent ipv6 ipsec packet fragment
  2012-03-19  8:02 ` Steffen Klassert
@ 2012-03-19 21:21   ` David Miller
  2012-03-20  1:09   ` Gao feng
  2012-03-20  3:22   ` [PATCH v2] " Gao feng
  2 siblings, 0 replies; 10+ messages in thread
From: David Miller @ 2012-03-19 21:21 UTC (permalink / raw)
  To: steffen.klassert; +Cc: gaofeng, eric.dumazet, netdev

From: Steffen Klassert <steffen.klassert@secunet.com>
Date: Mon, 19 Mar 2012 09:02:20 +0100

> On Fri, Mar 16, 2012 at 04:57:15PM +0800, Gao feng wrote:
>> Call skb_pull reduce skb->len before next "while cycle"
> 
> I think it would be better to just reserve headroom for
> dst_exthdrlen instead of adding and removing data to/from
> the skb.

Agreed, that would be a lot nicer.

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH] ipv6: fix incorrent ipv6 ipsec packet fragment
  2012-03-19  8:02 ` Steffen Klassert
  2012-03-19 21:21   ` David Miller
@ 2012-03-20  1:09   ` Gao feng
  2012-03-20  3:22   ` [PATCH v2] " Gao feng
  2 siblings, 0 replies; 10+ messages in thread
From: Gao feng @ 2012-03-20  1:09 UTC (permalink / raw)
  To: Steffen Klassert; +Cc: davem, eric.dumazet, netdev

于 2012年03月19日 16:02, Steffen Klassert 写道:
> On Fri, Mar 16, 2012 at 04:57:15PM +0800, Gao feng wrote:
>> Since commit 299b0767(ipv6: Fix IPsec slowpath fragmentation problem)
>> In func ip6_append_data,after call skb_put(skb, fraglen + dst_exthdrlen)
>> the skb->len contains dst_exthdrlen,and we don't reduce dst_exthdrlen at last
>> This will make fraggap>0 in next "while cycle",and cause the size of skb incorrent
> 
> Good catch!
> 
>>
>> Call skb_pull reduce skb->len before next "while cycle"
> 
> I think it would be better to just reserve headroom for
> dst_exthdrlen instead of adding and removing data to/from
> the skb.
> 

Hi steffen & David:

Thanks for your comment.
Agree with you,I will send v2 patch.

^ permalink raw reply	[flat|nested] 10+ messages in thread

* [PATCH v2] ipv6: fix incorrent ipv6 ipsec packet fragment
  2012-03-19  8:02 ` Steffen Klassert
  2012-03-19 21:21   ` David Miller
  2012-03-20  1:09   ` Gao feng
@ 2012-03-20  3:22   ` Gao feng
  2012-03-20  7:58     ` Steffen Klassert
  2 siblings, 1 reply; 10+ messages in thread
From: Gao feng @ 2012-03-20  3:22 UTC (permalink / raw)
  To: steffen.klassert; +Cc: davem, netdev, Gao feng

Since commit 299b0767(ipv6: Fix IPsec slowpath fragmentation problem)
In func ip6_append_data,after call skb_put(skb, fraglen + dst_exthdrlen)
the skb->len contains dst_exthdrlen,and we don't reduce dst_exthdrlen at last
This will make fraggap>0 in next "while cycle",and cause the size of skb incorrent

Fix this by reserve headroom for dst_exthdrlen.

Signed-off-by: Gao feng <gaofeng@cn.fujitsu.com>
---
 net/ipv6/ip6_output.c |    8 +++++---
 1 files changed, 5 insertions(+), 3 deletions(-)

diff --git a/net/ipv6/ip6_output.c b/net/ipv6/ip6_output.c
index d97e071..8d5d204 100644
--- a/net/ipv6/ip6_output.c
+++ b/net/ipv6/ip6_output.c
@@ -1418,6 +1418,8 @@ alloc_new_skb:
 			skb->csum = 0;
 			/* reserve for fragmentation */
 			skb_reserve(skb, hh_len+sizeof(struct frag_hdr));
+			/* reserve for ipsec header */
+			skb_reserve(skb, dst_exthdrlen);
 
 			if (sk->sk_type == SOCK_DGRAM)
 				skb_shinfo(skb)->tx_flags = tx_flags;
@@ -1425,9 +1427,9 @@ alloc_new_skb:
 			/*
 			 *	Find where to start putting bytes
 			 */
-			data = skb_put(skb, fraglen + dst_exthdrlen);
-			skb_set_network_header(skb, exthdrlen + dst_exthdrlen);
-			data += fragheaderlen + dst_exthdrlen;
+			data = skb_put(skb, fraglen);
+			skb_set_network_header(skb, exthdrlen);
+			data += fragheaderlen;
 			skb->transport_header = (skb->network_header +
 						 fragheaderlen);
 			if (fraggap) {
-- 
1.7.7.6

^ permalink raw reply related	[flat|nested] 10+ messages in thread

* Re: [PATCH v2] ipv6: fix incorrent ipv6 ipsec packet fragment
  2012-03-20  3:22   ` [PATCH v2] " Gao feng
@ 2012-03-20  7:58     ` Steffen Klassert
  2012-03-20  8:36       ` [PATCH v3] " Gao feng
  0 siblings, 1 reply; 10+ messages in thread
From: Steffen Klassert @ 2012-03-20  7:58 UTC (permalink / raw)
  To: Gao feng; +Cc: davem, netdev

On Tue, Mar 20, 2012 at 11:22:59AM +0800, Gao feng wrote:
> Since commit 299b0767(ipv6: Fix IPsec slowpath fragmentation problem)
> In func ip6_append_data,after call skb_put(skb, fraglen + dst_exthdrlen)
> the skb->len contains dst_exthdrlen,and we don't reduce dst_exthdrlen at last
> This will make fraggap>0 in next "while cycle",and cause the size of skb incorrent
> 
> Fix this by reserve headroom for dst_exthdrlen.
> 
> Signed-off-by: Gao feng <gaofeng@cn.fujitsu.com>
> ---
>  net/ipv6/ip6_output.c |    8 +++++---
>  1 files changed, 5 insertions(+), 3 deletions(-)
> 
> diff --git a/net/ipv6/ip6_output.c b/net/ipv6/ip6_output.c
> index d97e071..8d5d204 100644
> --- a/net/ipv6/ip6_output.c
> +++ b/net/ipv6/ip6_output.c
> @@ -1418,6 +1418,8 @@ alloc_new_skb:
>  			skb->csum = 0;
>  			/* reserve for fragmentation */
>  			skb_reserve(skb, hh_len+sizeof(struct frag_hdr));
> +			/* reserve for ipsec header */
> +			skb_reserve(skb, dst_exthdrlen);

Why not 'reserve for fragmentation and ipsec header' instead
of calling skb_reserve() two times?

The rest of the patch looks good.

^ permalink raw reply	[flat|nested] 10+ messages in thread

* [PATCH v3] ipv6: fix incorrent ipv6 ipsec packet fragment
  2012-03-20  7:58     ` Steffen Klassert
@ 2012-03-20  8:36       ` Gao feng
  2012-03-20  8:54         ` Steffen Klassert
  0 siblings, 1 reply; 10+ messages in thread
From: Gao feng @ 2012-03-20  8:36 UTC (permalink / raw)
  To: davem; +Cc: steffen.klassert, netdev, Gao feng

Since commit 299b0767(ipv6: Fix IPsec slowpath fragmentation problem)
In func ip6_append_data,after call skb_put(skb, fraglen + dst_exthdrlen)
the skb->len contains dst_exthdrlen,and we don't reduce dst_exthdrlen at last
This will make fraggap>0 in next "while cycle",and cause the size of skb incorrent

Fix this by reserve headroom for dst_exthdrlen.

Signed-off-by: Gao feng <gaofeng@cn.fujitsu.com>
---
 net/ipv6/ip6_output.c |   11 ++++++-----
 1 files changed, 6 insertions(+), 5 deletions(-)

diff --git a/net/ipv6/ip6_output.c b/net/ipv6/ip6_output.c
index d97e071..ea58e27a 100644
--- a/net/ipv6/ip6_output.c
+++ b/net/ipv6/ip6_output.c
@@ -1416,8 +1416,9 @@ alloc_new_skb:
 			 */
 			skb->ip_summed = csummode;
 			skb->csum = 0;
-			/* reserve for fragmentation */
-			skb_reserve(skb, hh_len+sizeof(struct frag_hdr));
+			/* reserve for fragmentation and ipsec header */
+			skb_reserve(skb, hh_len + sizeof(struct frag_hdr) +
+				    dst_exthdrlen);
 
 			if (sk->sk_type == SOCK_DGRAM)
 				skb_shinfo(skb)->tx_flags = tx_flags;
@@ -1425,9 +1426,9 @@ alloc_new_skb:
 			/*
 			 *	Find where to start putting bytes
 			 */
-			data = skb_put(skb, fraglen + dst_exthdrlen);
-			skb_set_network_header(skb, exthdrlen + dst_exthdrlen);
-			data += fragheaderlen + dst_exthdrlen;
+			data = skb_put(skb, fraglen);
+			skb_set_network_header(skb, exthdrlen);
+			data += fragheaderlen;
 			skb->transport_header = (skb->network_header +
 						 fragheaderlen);
 			if (fraggap) {
-- 
1.7.7.6

^ permalink raw reply related	[flat|nested] 10+ messages in thread

* Re: [PATCH v3] ipv6: fix incorrent ipv6 ipsec packet fragment
  2012-03-20  8:36       ` [PATCH v3] " Gao feng
@ 2012-03-20  8:54         ` Steffen Klassert
  2012-03-20  9:40           ` David Miller
  0 siblings, 1 reply; 10+ messages in thread
From: Steffen Klassert @ 2012-03-20  8:54 UTC (permalink / raw)
  To: Gao feng; +Cc: davem, netdev

On Tue, Mar 20, 2012 at 04:36:10PM +0800, Gao feng wrote:
> Since commit 299b0767(ipv6: Fix IPsec slowpath fragmentation problem)
> In func ip6_append_data,after call skb_put(skb, fraglen + dst_exthdrlen)
> the skb->len contains dst_exthdrlen,and we don't reduce dst_exthdrlen at last
> This will make fraggap>0 in next "while cycle",and cause the size of skb incorrent
> 
> Fix this by reserve headroom for dst_exthdrlen.
> 
> Signed-off-by: Gao feng <gaofeng@cn.fujitsu.com>

Acked-by: Steffen Klassert <steffen.klassert@secunet.com>

Thanks a lot!

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH v3] ipv6: fix incorrent ipv6 ipsec packet fragment
  2012-03-20  8:54         ` Steffen Klassert
@ 2012-03-20  9:40           ` David Miller
  0 siblings, 0 replies; 10+ messages in thread
From: David Miller @ 2012-03-20  9:40 UTC (permalink / raw)
  To: steffen.klassert; +Cc: gaofeng, netdev

From: Steffen Klassert <steffen.klassert@secunet.com>
Date: Tue, 20 Mar 2012 09:54:05 +0100

> On Tue, Mar 20, 2012 at 04:36:10PM +0800, Gao feng wrote:
>> Since commit 299b0767(ipv6: Fix IPsec slowpath fragmentation problem)
>> In func ip6_append_data,after call skb_put(skb, fraglen + dst_exthdrlen)
>> the skb->len contains dst_exthdrlen,and we don't reduce dst_exthdrlen at last
>> This will make fraggap>0 in next "while cycle",and cause the size of skb incorrent
>> 
>> Fix this by reserve headroom for dst_exthdrlen.
>> 
>> Signed-off-by: Gao feng <gaofeng@cn.fujitsu.com>
> 
> Acked-by: Steffen Klassert <steffen.klassert@secunet.com>

Applied and queued up for -stable, thanks.

 

^ permalink raw reply	[flat|nested] 10+ messages in thread

end of thread, other threads:[~2012-03-20  9:40 UTC | newest]

Thread overview: 10+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-03-16  8:57 [PATCH] ipv6: fix incorrent ipv6 ipsec packet fragment Gao feng
2012-03-17  4:58 ` David Miller
2012-03-19  8:02 ` Steffen Klassert
2012-03-19 21:21   ` David Miller
2012-03-20  1:09   ` Gao feng
2012-03-20  3:22   ` [PATCH v2] " Gao feng
2012-03-20  7:58     ` Steffen Klassert
2012-03-20  8:36       ` [PATCH v3] " Gao feng
2012-03-20  8:54         ` Steffen Klassert
2012-03-20  9:40           ` David Miller

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).