diff options
author | David S. Miller <davem@davemloft.net> | 2022-01-17 13:07:47 +0000 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2022-01-17 13:07:47 +0000 |
commit | 9ea674d7ca4f6ce080b813ac2d9a9397f13d2427 (patch) | |
tree | 4dd25b42974029832f25bbe6ac1ec4e9e60a713b | |
parent | c0b7f7d7e0ad44f35745c01964b3fa2833e298cb (diff) | |
parent | 79074a72d335dbd021a716d8cc65cba3b2f706ab (diff) | |
download | linux-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.c | 3 | ||||
-rw-r--r-- | net/tls/tls_sw.c | 1 |
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; } |