diff options
Diffstat (limited to 'net/ipv4/ip_output.c')
| -rw-r--r-- | net/ipv4/ip_output.c | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/net/ipv4/ip_output.c b/net/ipv4/ip_output.c index daebd93fd8a0..760dc8238d65 100644 --- a/net/ipv4/ip_output.c +++ b/net/ipv4/ip_output.c | |||
| @@ -490,6 +490,14 @@ int ip_fragment(struct sk_buff *skb, int (*output)(struct sk_buff*)) | |||
| 490 | /* Partially cloned skb? */ | 490 | /* Partially cloned skb? */ |
| 491 | if (skb_shared(frag)) | 491 | if (skb_shared(frag)) |
| 492 | goto slow_path; | 492 | goto slow_path; |
| 493 | |||
| 494 | BUG_ON(frag->sk); | ||
| 495 | if (skb->sk) { | ||
| 496 | sock_hold(skb->sk); | ||
| 497 | frag->sk = skb->sk; | ||
| 498 | frag->destructor = sock_wfree; | ||
| 499 | skb->truesize -= frag->truesize; | ||
| 500 | } | ||
| 493 | } | 501 | } |
| 494 | 502 | ||
| 495 | /* Everything is OK. Generate! */ | 503 | /* Everything is OK. Generate! */ |
