net: properly release sk_frag.page
[firefly-linux-kernel-4.4.55.git] / net / core / sock.c
index f4c0917e66b5f8cad1cec9a7b93e84b67cfe1006..9f4c4473156a3caa3b50831f6e9410aa295c1417 100644 (file)
@@ -1459,6 +1459,11 @@ void sk_destruct(struct sock *sk)
                pr_debug("%s: optmem leakage (%d bytes) detected\n",
                         __func__, atomic_read(&sk->sk_omem_alloc));
 
+       if (sk->sk_frag.page) {
+               put_page(sk->sk_frag.page);
+               sk->sk_frag.page = NULL;
+       }
+
        if (sk->sk_peer_cred)
                put_cred(sk->sk_peer_cred);
        put_pid(sk->sk_peer_pid);
@@ -2691,11 +2696,6 @@ void sk_common_release(struct sock *sk)
 
        sk_refcnt_debug_release(sk);
 
-       if (sk->sk_frag.page) {
-               put_page(sk->sk_frag.page);
-               sk->sk_frag.page = NULL;
-       }
-
        sock_put(sk);
 }
 EXPORT_SYMBOL(sk_common_release);