summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDavid S. Miller <davem@davemloft.net>2022-01-17 13:07:47 +0000
committerDavid S. Miller <davem@davemloft.net>2022-01-17 13:07:47 +0000
commit9ea674d7ca4f6ce080b813ac2d9a9397f13d2427 (patch)
tree4dd25b42974029832f25bbe6ac1ec4e9e60a713b
parentc0b7f7d7e0ad44f35745c01964b3fa2833e298cb (diff)
parent79074a72d335dbd021a716d8cc65cba3b2f706ab (diff)
downloadlinux-stable-9ea674d7ca4f6ce080b813ac2d9a9397f13d2427.tar.gz
linux-stable-9ea674d7ca4f6ce080b813ac2d9a9397f13d2427.tar.bz2
linux-stable-9ea674d7ca4f6ce080b813ac2d9a9397f13d2427.zip
Merge branch 'skb-leak-fixes'
Gal Pressman says: ==================== net: Couple of skb memory leak fixes As discussed in: https://lore.kernel.org/netdev/20220102081253.9123-1-gal@nvidia.com/ These are the two followup suggestions from Eric and Jakub. Patch #1 adds a sk_defer_free_flush() call to the kTLS splice_read handler. Patch #2 verifies the defer list is empty on socket destroy, and calls a defer free flush as well. ==================== Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r--net/core/sock.c3
-rw-r--r--net/tls/tls_sw.c1
2 files changed, 4 insertions, 0 deletions
diff --git a/net/core/sock.c b/net/core/sock.c
index f32ec08a0c37..4ff806d71921 100644
--- a/net/core/sock.c
+++ b/net/core/sock.c
@@ -2049,6 +2049,9 @@ void sk_destruct(struct sock *sk)
{
bool use_call_rcu = sock_flag(sk, SOCK_RCU_FREE);
+ WARN_ON_ONCE(!llist_empty(&sk->defer_list));
+ sk_defer_free_flush(sk);
+
if (rcu_access_pointer(sk->sk_reuseport_cb)) {
reuseport_detach_sock(sk);
use_call_rcu = true;
diff --git a/net/tls/tls_sw.c b/net/tls/tls_sw.c
index 95e774f1b91f..efc84845bb6b 100644
--- a/net/tls/tls_sw.c
+++ b/net/tls/tls_sw.c
@@ -2059,6 +2059,7 @@ ssize_t tls_sw_splice_read(struct socket *sock, loff_t *ppos,
splice_read_end:
release_sock(sk);
+ sk_defer_free_flush(sk);
return copied ? : err;
}