--- x/net/core/sock.c
+++ y/net/core/sock.c
@@ -2160,11 +2160,6 @@ static void __sk_destruct(struct rcu_hea
 	put_cred(sk->sk_peer_cred);
 	put_pid(sk->sk_peer_pid);
 
-	if (likely(sk->sk_net_refcnt))
-		put_net_track(sock_net(sk), &sk->ns_tracker);
-	else
-		__netns_tracker_free(sock_net(sk), &sk->ns_tracker, false);
-
 	sk_prot_free(sk->sk_prot_creator, sk);
 }
 
@@ -2177,6 +2172,11 @@ void sk_destruct(struct sock *sk)
 		use_call_rcu = true;
 	}
 
+	if (likely(sk->sk_net_refcnt))
+		put_net_track(sock_net(sk), &sk->ns_tracker);
+	else
+		__netns_tracker_free(sock_net(sk), &sk->ns_tracker, false);
+
 	if (use_call_rcu)
 		call_rcu(&sk->sk_rcu, __sk_destruct);
 	else