diff options
author | David Howells <dhowells@redhat.com> | 2018-03-30 22:05:44 +0200 |
---|---|---|
committer | David Howells <dhowells@redhat.com> | 2018-03-30 22:05:44 +0200 |
commit | 17226f1240381812c3a4927dc9da2814fb71c8ac (patch) | |
tree | 49ef90fafb4ae55ff13e0c373a81bbc509718bd8 /net/rxrpc/net_ns.c | |
parent | rxrpc: Add a tracepoint to track rxrpc_peer refcounting (diff) | |
download | linux-17226f1240381812c3a4927dc9da2814fb71c8ac.tar.xz linux-17226f1240381812c3a4927dc9da2814fb71c8ac.zip |
rxrpc: Fix leak of rxrpc_peer objects
When a new client call is requested, an rxrpc_conn_parameters struct object
is passed in with a bunch of parameters set, such as the local endpoint to
use. A pointer to the target peer record is also placed in there by
rxrpc_get_client_conn() - and this is removed if and only if a new
connection object is allocated. Thus it leaks if a new connection object
isn't allocated.
Fix this by putting any peer object attached to the rxrpc_conn_parameters
object in the function that allocated it.
Fixes: 19ffa01c9c45 ("rxrpc: Use structs to hold connection params and protocol info")
Signed-off-by: David Howells <dhowells@redhat.com>
Diffstat (limited to 'net/rxrpc/net_ns.c')
-rw-r--r-- | net/rxrpc/net_ns.c | 1 |
1 files changed, 1 insertions, 0 deletions
diff --git a/net/rxrpc/net_ns.c b/net/rxrpc/net_ns.c index fa9ce60e7bfa..c7a023fb22d0 100644 --- a/net/rxrpc/net_ns.c +++ b/net/rxrpc/net_ns.c @@ -118,6 +118,7 @@ static __net_exit void rxrpc_exit_net(struct net *net) cancel_work_sync(&rxnet->peer_keepalive_work); rxrpc_destroy_all_calls(rxnet); rxrpc_destroy_all_connections(rxnet); + rxrpc_destroy_all_peers(rxnet); rxrpc_destroy_all_locals(rxnet); proc_remove(rxnet->proc_net); } |