aboutsummaryrefslogtreecommitdiffstats
path: root/net/ipv6/ip6_output.c
diff options
context:
space:
mode:
Diffstat (limited to 'net/ipv6/ip6_output.c')
-rw-r--r--net/ipv6/ip6_output.c17
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);