* [SK_BUFF]: Fix missing offset adjustment in skb_copy_expand
@ 2007-04-08 1:47 Patrick McHardy
2007-04-11 0:42 ` Patrick McHardy
0 siblings, 1 reply; 3+ messages in thread
From: Patrick McHardy @ 2007-04-08 1:47 UTC (permalink / raw)
To: David S. Miller; +Cc: Arnaldo Carvalho de Melo, Kernel Netdev Mailing List
[-- Attachment #1: Type: text/plain, Size: 0 bytes --]
[-- Attachment #2: 02.diff --]
[-- Type: text/plain, Size: 1670 bytes --]
[SK_BUFF]: Fix missing offset adjustment in skb_copy_expand
skb_copy_expand changes the headroom, so it needs to adjust the header
offsets by the difference between the old and the new value.
Signed-off-by: Patrick McHardy <kaber@trash.net>
---
commit 9cb76fae709a9303777286998baa457b0730a225
tree 2ea619c7daf9c5e6829dad6d502386eb9c922700
parent fb98b03719ad23840ca005edbba3c86ef1e3282c
author Patrick McHardy <kaber@trash.net> Sun, 08 Apr 2007 03:36:49 +0200
committer Patrick McHardy <kaber@trash.net> Sun, 08 Apr 2007 03:36:49 +0200
net/core/skbuff.c | 11 ++++++++++-
1 files changed, 10 insertions(+), 1 deletions(-)
diff --git a/net/core/skbuff.c b/net/core/skbuff.c
index 5c9ee94..f2cffd4 100644
--- a/net/core/skbuff.c
+++ b/net/core/skbuff.c
@@ -794,7 +794,9 @@ struct sk_buff *skb_copy_expand(const struct sk_buff *skb,
*/
struct sk_buff *n = alloc_skb(newheadroom + skb->len + newtailroom,
gfp_mask);
+ int oldheadroom = skb_headroom(skb);
int head_copy_len, head_copy_off;
+ int off = 0;
if (!n)
return NULL;
@@ -804,7 +806,7 @@ struct sk_buff *skb_copy_expand(const struct sk_buff *skb,
/* Set the tail pointer and length */
skb_put(n, skb->len);
- head_copy_len = skb_headroom(skb);
+ head_copy_len = oldheadroom;
head_copy_off = 0;
if (newheadroom <= head_copy_len)
head_copy_len = newheadroom;
@@ -818,6 +820,13 @@ struct sk_buff *skb_copy_expand(const struct sk_buff *skb,
copy_skb_header(n, skb);
+#ifdef NET_SKBUFF_DATA_USES_OFFSET
+ off = newheadroom - oldheadroom;
+#endif
+ n->transport_header += off;
+ n->network_header += off;
+ n->mac_header += off;
+
return n;
}
^ permalink raw reply related [flat|nested] 3+ messages in thread
* Re: [SK_BUFF]: Fix missing offset adjustment in skb_copy_expand
2007-04-08 1:47 [SK_BUFF]: Fix missing offset adjustment in skb_copy_expand Patrick McHardy
@ 2007-04-11 0:42 ` Patrick McHardy
2007-04-11 1:31 ` David Miller
0 siblings, 1 reply; 3+ messages in thread
From: Patrick McHardy @ 2007-04-11 0:42 UTC (permalink / raw)
To: David S. Miller; +Cc: Arnaldo Carvalho de Melo, Kernel Netdev Mailing List
[-- Attachment #1: Type: text/plain, Size: 310 bytes --]
Hi Dave,
Patrick McHardy wrote:
> [SK_BUFF]: Fix missing offset adjustment in skb_copy_expand
>
> skb_copy_expand changes the headroom, so it needs to adjust the header
> offsets by the difference between the old and the new value.
it seems like you missed this one. Attached again for your convenience.
[-- Attachment #2: 02.diff --]
[-- Type: text/x-diff, Size: 1671 bytes --]
[SK_BUFF]: Fix missing offset adjustment in skb_copy_expand
skb_copy_expand changes the headroom, so it needs to adjust the header
offsets by the difference between the old and the new value.
Signed-off-by: Patrick McHardy <kaber@trash.net>
---
commit 9cb76fae709a9303777286998baa457b0730a225
tree 2ea619c7daf9c5e6829dad6d502386eb9c922700
parent fb98b03719ad23840ca005edbba3c86ef1e3282c
author Patrick McHardy <kaber@trash.net> Sun, 08 Apr 2007 03:36:49 +0200
committer Patrick McHardy <kaber@trash.net> Sun, 08 Apr 2007 03:36:49 +0200
net/core/skbuff.c | 11 ++++++++++-
1 files changed, 10 insertions(+), 1 deletions(-)
diff --git a/net/core/skbuff.c b/net/core/skbuff.c
index 5c9ee94..f2cffd4 100644
--- a/net/core/skbuff.c
+++ b/net/core/skbuff.c
@@ -794,7 +794,9 @@ struct sk_buff *skb_copy_expand(const struct sk_buff *skb,
*/
struct sk_buff *n = alloc_skb(newheadroom + skb->len + newtailroom,
gfp_mask);
+ int oldheadroom = skb_headroom(skb);
int head_copy_len, head_copy_off;
+ int off = 0;
if (!n)
return NULL;
@@ -804,7 +806,7 @@ struct sk_buff *skb_copy_expand(const struct sk_buff *skb,
/* Set the tail pointer and length */
skb_put(n, skb->len);
- head_copy_len = skb_headroom(skb);
+ head_copy_len = oldheadroom;
head_copy_off = 0;
if (newheadroom <= head_copy_len)
head_copy_len = newheadroom;
@@ -818,6 +820,13 @@ struct sk_buff *skb_copy_expand(const struct sk_buff *skb,
copy_skb_header(n, skb);
+#ifdef NET_SKBUFF_DATA_USES_OFFSET
+ off = newheadroom - oldheadroom;
+#endif
+ n->transport_header += off;
+ n->network_header += off;
+ n->mac_header += off;
+
return n;
}
^ permalink raw reply related [flat|nested] 3+ messages in thread
* Re: [SK_BUFF]: Fix missing offset adjustment in skb_copy_expand
2007-04-11 0:42 ` Patrick McHardy
@ 2007-04-11 1:31 ` David Miller
0 siblings, 0 replies; 3+ messages in thread
From: David Miller @ 2007-04-11 1:31 UTC (permalink / raw)
To: kaber; +Cc: acme, netdev
From: Patrick McHardy <kaber@trash.net>
Date: Wed, 11 Apr 2007 02:42:59 +0200
> Hi Dave,
>
> Patrick McHardy wrote:
> > [SK_BUFF]: Fix missing offset adjustment in skb_copy_expand
> >
> > skb_copy_expand changes the headroom, so it needs to adjust the header
> > offsets by the difference between the old and the new value.
>
>
> it seems like you missed this one. Attached again for your convenience.
Thanks a lot Patrick, applied.
I know what happened, I applied the pskb_copy_expand() patch and then
deleted this one by accident since the subject lines looked so
similar and I figured I was just getting a second copy of the same
patch :-)
Thanks again!
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2007-04-11 1:31 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2007-04-08 1:47 [SK_BUFF]: Fix missing offset adjustment in skb_copy_expand Patrick McHardy
2007-04-11 0:42 ` Patrick McHardy
2007-04-11 1:31 ` 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).