diff options
Diffstat (limited to 'net/ipv6/ip6_output.c')
-rw-r--r-- | net/ipv6/ip6_output.c | 17 |
1 files changed, 8 insertions, 9 deletions
diff --git a/net/ipv6/ip6_output.c b/net/ipv6/ip6_output.c index 0f0711417c9d..06e7cdaeedc5 100644 --- a/net/ipv6/ip6_output.c +++ b/net/ipv6/ip6_output.c | |||
@@ -484,9 +484,6 @@ static void ip6_copy_metadata(struct sk_buff *to, struct sk_buff *from) | |||
484 | to->nf_bridge = from->nf_bridge; | 484 | to->nf_bridge = from->nf_bridge; |
485 | nf_bridge_get(to->nf_bridge); | 485 | nf_bridge_get(to->nf_bridge); |
486 | #endif | 486 | #endif |
487 | #ifdef CONFIG_NETFILTER_DEBUG | ||
488 | to->nf_debug = from->nf_debug; | ||
489 | #endif | ||
490 | #endif | 487 | #endif |
491 | } | 488 | } |
492 | 489 | ||
@@ -552,13 +549,17 @@ static int ip6_fragment(struct sk_buff *skb, int (*output)(struct sk_buff *)) | |||
552 | skb_headroom(frag) < hlen) | 549 | skb_headroom(frag) < hlen) |
553 | goto slow_path; | 550 | goto slow_path; |
554 | 551 | ||
555 | /* Correct socket ownership. */ | ||
556 | if (frag->sk == NULL) | ||
557 | goto slow_path; | ||
558 | |||
559 | /* Partially cloned skb? */ | 552 | /* Partially cloned skb? */ |
560 | if (skb_shared(frag)) | 553 | if (skb_shared(frag)) |
561 | goto slow_path; | 554 | goto slow_path; |
555 | |||
556 | BUG_ON(frag->sk); | ||
557 | if (skb->sk) { | ||
558 | sock_hold(skb->sk); | ||
559 | frag->sk = skb->sk; | ||
560 | frag->destructor = sock_wfree; | ||
561 | skb->truesize -= frag->truesize; | ||
562 | } | ||
562 | } | 563 | } |
563 | 564 | ||
564 | err = 0; | 565 | err = 0; |
@@ -1116,12 +1117,10 @@ int ip6_push_pending_frames(struct sock *sk) | |||
1116 | tail_skb = &(tmp_skb->next); | 1117 | tail_skb = &(tmp_skb->next); |
1117 | skb->len += tmp_skb->len; | 1118 | skb->len += tmp_skb->len; |
1118 | skb->data_len += tmp_skb->len; | 1119 | skb->data_len += tmp_skb->len; |
1119 | #if 0 /* Logically correct, but useless work, ip_fragment() will have to undo */ | ||
1120 | skb->truesize += tmp_skb->truesize; | 1120 | skb->truesize += tmp_skb->truesize; |
1121 | __sock_put(tmp_skb->sk); | 1121 | __sock_put(tmp_skb->sk); |
1122 | tmp_skb->destructor = NULL; | 1122 | tmp_skb->destructor = NULL; |
1123 | tmp_skb->sk = NULL; | 1123 | tmp_skb->sk = NULL; |
1124 | #endif | ||
1125 | } | 1124 | } |
1126 | 1125 | ||
1127 | ipv6_addr_copy(final_dst, &fl->fl6_dst); | 1126 | ipv6_addr_copy(final_dst, &fl->fl6_dst); |