* [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).