Commit 82c49a35 authored by Herbert Xu's avatar Herbert Xu Committed by David S. Miller

skbuff: Move new code into __copy_skb_header

Hi:

skbuff: Move new __skb_clone code into __copy_skb_header

It seems that people just keep on adding stuff to __skb_clone
instead __copy_skb_header.  This is wrong as it means your brand-new
attributes won't always get copied as you intended.

This patch moves them to the right place, and adds a comment to
prevent this from happening again.
Signed-off-by: default avatarHerbert Xu <herbert@gondor.apana.org.au>

Thanks,
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 45ea4ea2
...@@ -538,6 +538,7 @@ static void __copy_skb_header(struct sk_buff *new, const struct sk_buff *old) ...@@ -538,6 +538,7 @@ static void __copy_skb_header(struct sk_buff *new, const struct sk_buff *old)
#endif #endif
new->protocol = old->protocol; new->protocol = old->protocol;
new->mark = old->mark; new->mark = old->mark;
new->iif = old->iif;
__nf_copy(new, old); __nf_copy(new, old);
#if defined(CONFIG_NETFILTER_XT_TARGET_TRACE) || \ #if defined(CONFIG_NETFILTER_XT_TARGET_TRACE) || \
defined(CONFIG_NETFILTER_XT_TARGET_TRACE_MODULE) defined(CONFIG_NETFILTER_XT_TARGET_TRACE_MODULE)
...@@ -550,10 +551,18 @@ static void __copy_skb_header(struct sk_buff *new, const struct sk_buff *old) ...@@ -550,10 +551,18 @@ static void __copy_skb_header(struct sk_buff *new, const struct sk_buff *old)
#endif #endif
#endif #endif
new->vlan_tci = old->vlan_tci; new->vlan_tci = old->vlan_tci;
#if defined(CONFIG_MAC80211) || defined(CONFIG_MAC80211_MODULE)
new->do_not_encrypt = old->do_not_encrypt;
new->requeue = old->requeue;
#endif
skb_copy_secmark(new, old); skb_copy_secmark(new, old);
} }
/*
* You should not add any new code to this function. Add it to
* __copy_skb_header above instead.
*/
static struct sk_buff *__skb_clone(struct sk_buff *n, struct sk_buff *skb) static struct sk_buff *__skb_clone(struct sk_buff *n, struct sk_buff *skb)
{ {
#define C(x) n->x = skb->x #define C(x) n->x = skb->x
...@@ -569,16 +578,11 @@ static struct sk_buff *__skb_clone(struct sk_buff *n, struct sk_buff *skb) ...@@ -569,16 +578,11 @@ static struct sk_buff *__skb_clone(struct sk_buff *n, struct sk_buff *skb)
n->cloned = 1; n->cloned = 1;
n->nohdr = 0; n->nohdr = 0;
n->destructor = NULL; n->destructor = NULL;
C(iif);
C(tail); C(tail);
C(end); C(end);
C(head); C(head);
C(data); C(data);
C(truesize); C(truesize);
#if defined(CONFIG_MAC80211) || defined(CONFIG_MAC80211_MODULE)
C(do_not_encrypt);
C(requeue);
#endif
atomic_set(&n->users, 1); atomic_set(&n->users, 1);
atomic_inc(&(skb_shinfo(skb)->dataref)); atomic_inc(&(skb_shinfo(skb)->dataref));
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment