diff --git a/net/ipv4/tcp.c b/net/ipv4/tcp.c index 288693981b00..5d2587cd1920 100644 --- a/net/ipv4/tcp.c +++ b/net/ipv4/tcp.c @@ -4704,6 +4704,7 @@ int tcp_abort(struct sock *sk, int err) bh_unlock_sock(sk); local_bh_enable(); tcp_write_queue_purge(sk); + printk("%s, %p\n", __func__, sk); release_sock(sk); return 0; } diff --git a/net/ipv4/tcp_ipv4.c b/net/ipv4/tcp_ipv4.c index ea370afa70ed..562fb2b89494 100644 --- a/net/ipv4/tcp_ipv4.c +++ b/net/ipv4/tcp_ipv4.c @@ -1246,6 +1246,7 @@ int tcp_md5_do_add(struct sock *sk, const union tcp_md5_addr *addr, md5sig = rcu_dereference_protected(tp->md5sig_info, lockdep_sock_is_held(sk)); rcu_assign_pointer(tp->md5sig_info, NULL); kfree_rcu(md5sig, rcu); + printk("%s, %p \n", __func__, md5sig); return -EUSERS; } } @@ -1271,6 +1272,7 @@ int tcp_md5_key_copy(struct sock *sk, const union tcp_md5_addr *addr, md5sig = rcu_dereference_protected(tp->md5sig_info, lockdep_sock_is_held(sk)); net_warn_ratelimited("Too many TCP-MD5 keys in the system\n"); rcu_assign_pointer(tp->md5sig_info, NULL); + printk("%s, %p \n", __func__, md5sig); kfree_rcu(md5sig, rcu); return -EUSERS; } @@ -1292,6 +1294,7 @@ int tcp_md5_do_del(struct sock *sk, const union tcp_md5_addr *addr, int family, return -ENOENT; hlist_del_rcu(&key->node); atomic_sub(sizeof(*key), &sk->sk_omem_alloc); + printk("%s, %p \n", __func__, key); kfree_rcu(key, rcu); return 0; } @@ -1309,6 +1312,7 @@ static void tcp_clear_md5_list(struct sock *sk) hlist_for_each_entry_safe(key, n, &md5sig->head, node) { hlist_del_rcu(&key->node); atomic_sub(sizeof(*key), &sk->sk_omem_alloc); + printk("%s, %p \n", __func__, key); kfree_rcu(key, rcu); } } @@ -2310,9 +2314,12 @@ void tcp_v4_destroy_sock(struct sock *sk) #ifdef CONFIG_TCP_MD5SIG /* Clean up the MD5 key list, if any */ if (tp->md5sig_info) { + struct tcp_md5sig_info *md5sig; tcp_clear_md5_list(sk); - kfree_rcu(rcu_dereference_protected(tp->md5sig_info, 1), rcu); - tp->md5sig_info = NULL; + md5sig = rcu_dereference_protected(tp->md5sig_info, 1); + printk("%s, %p, %p \n", __func__, tp->md5sig_info, md5sig); + rcu_assign_pointer(tp->md5sig_info, NULL); + kfree_rcu(md5sig, rcu); static_branch_slow_dec_deferred(&tcp_md5_needed); } #endif diff --git a/net/ipv4/tcp_output.c b/net/ipv4/tcp_output.c index 71d01cf3c13e..1c0c50027c48 100644 --- a/net/ipv4/tcp_output.c +++ b/net/ipv4/tcp_output.c @@ -1091,6 +1091,7 @@ void tcp_release_cb(struct sock *sk) tcp_tsq_write(sk); __sock_put(sk); } + printk("%p, %s\n", sk, __func__); /* Here begins the tricky part : * We are called from release_sock() with : * 1) BH disabled