aboutsummaryrefslogtreecommitdiffstats
path: root/net/ipv4/ip_fragment.c
diff options
context:
space:
mode:
Diffstat (limited to 'net/ipv4/ip_fragment.c')
-rw-r--r--net/ipv4/ip_fragment.c12
1 files changed, 8 insertions, 4 deletions
diff --git a/net/ipv4/ip_fragment.c b/net/ipv4/ip_fragment.c
index 9b0158fa431f..d6ee343fdb86 100644
--- a/net/ipv4/ip_fragment.c
+++ b/net/ipv4/ip_fragment.c
@@ -722,10 +722,14 @@ struct sk_buff *ip_check_defrag(struct net *net, struct sk_buff *skb, u32 user)
722 if (ip_is_fragment(&iph)) { 722 if (ip_is_fragment(&iph)) {
723 skb = skb_share_check(skb, GFP_ATOMIC); 723 skb = skb_share_check(skb, GFP_ATOMIC);
724 if (skb) { 724 if (skb) {
725 if (!pskb_may_pull(skb, netoff + iph.ihl * 4)) 725 if (!pskb_may_pull(skb, netoff + iph.ihl * 4)) {
726 return skb; 726 kfree_skb(skb);
727 if (pskb_trim_rcsum(skb, netoff + len)) 727 return NULL;
728 return skb; 728 }
729 if (pskb_trim_rcsum(skb, netoff + len)) {
730 kfree_skb(skb);
731 return NULL;
732 }
729 memset(IPCB(skb), 0, sizeof(struct inet_skb_parm)); 733 memset(IPCB(skb), 0, sizeof(struct inet_skb_parm));
730 if (ip_defrag(net, skb, user)) 734 if (ip_defrag(net, skb, user))
731 return NULL; 735 return NULL;