net: Preserve netfilter attributes in skb_gso_segment using __copy_skb_header
skb_gso_segment didn't preserve some attributes in the original skb such as the netfilter fields. This was harmless until they were used which is the case for packets going through lo. This patch makes it call __copy_skb_header which also picks up some other missing attributes. Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
7447ef63cf
commit
6f85a124d8
1 changed files with 2 additions and 10 deletions
|
@ -2256,14 +2256,7 @@ struct sk_buff *skb_segment(struct sk_buff *skb, int features)
|
|||
segs = nskb;
|
||||
tail = nskb;
|
||||
|
||||
nskb->dev = skb->dev;
|
||||
skb_copy_queue_mapping(nskb, skb);
|
||||
nskb->priority = skb->priority;
|
||||
nskb->protocol = skb->protocol;
|
||||
nskb->vlan_tci = skb->vlan_tci;
|
||||
nskb->dst = dst_clone(skb->dst);
|
||||
memcpy(nskb->cb, skb->cb, sizeof(skb->cb));
|
||||
nskb->pkt_type = skb->pkt_type;
|
||||
__copy_skb_header(nskb, skb);
|
||||
nskb->mac_len = skb->mac_len;
|
||||
|
||||
skb_reserve(nskb, headroom);
|
||||
|
@ -2274,6 +2267,7 @@ struct sk_buff *skb_segment(struct sk_buff *skb, int features)
|
|||
skb_copy_from_linear_data(skb, skb_put(nskb, doffset),
|
||||
doffset);
|
||||
if (!sg) {
|
||||
nskb->ip_summed = CHECKSUM_NONE;
|
||||
nskb->csum = skb_copy_and_csum_bits(skb, offset,
|
||||
skb_put(nskb, len),
|
||||
len, 0);
|
||||
|
@ -2283,8 +2277,6 @@ struct sk_buff *skb_segment(struct sk_buff *skb, int features)
|
|||
frag = skb_shinfo(nskb)->frags;
|
||||
k = 0;
|
||||
|
||||
nskb->ip_summed = CHECKSUM_PARTIAL;
|
||||
nskb->csum = skb->csum;
|
||||
skb_copy_from_linear_data_offset(skb, offset,
|
||||
skb_put(nskb, hsize), hsize);
|
||||
|
||||
|
|
Loading…
Reference in a new issue