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: Herbert Xu <herbert@gondor.apana.org.au>

Thanks,
Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
Herbert Xu 2009-05-22 22:11:37 +00:00 committed by David S. Miller
parent 45ea4ea2af
commit 82c49a352e
1 changed files with 9 additions and 5 deletions

View File

@ -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)
#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)
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));