Merge tag 'for-netdev' of https://git.kernel.org/pub/scm/linux/kernel/git/bpf/bpf...
[linux-2.6-microblaze.git] / net / core / sock.c
index 0a7f46c..88bf810 100644 (file)
@@ -2583,8 +2583,18 @@ EXPORT_SYMBOL(sock_efree);
 #ifdef CONFIG_INET
 void sock_pfree(struct sk_buff *skb)
 {
-       if (sk_is_refcounted(skb->sk))
-               sock_gen_put(skb->sk);
+       struct sock *sk = skb->sk;
+
+       if (!sk_is_refcounted(sk))
+               return;
+
+       if (sk->sk_state == TCP_NEW_SYN_RECV && inet_reqsk(sk)->syncookie) {
+               inet_reqsk(sk)->rsk_listener = NULL;
+               reqsk_free(inet_reqsk(sk));
+               return;
+       }
+
+       sock_gen_put(sk);
 }
 EXPORT_SYMBOL(sock_pfree);
 #endif /* CONFIG_INET */