[PATCH net 1/2] rxrpc: Fix rxrpc_peer leak in rxrpc_look_up_bundle()

Subsystems: networking [general], rxrpc sockets (af_rxrpc), the rest

STALE1720d

5 messages, 3 authors, 2021-11-24 · open the first message on its own page

[PATCH net 1/2] rxrpc: Fix rxrpc_peer leak in rxrpc_look_up_bundle()

From: Eiichi Tsukata <hidden>
Date: 2021-11-21 04:17:20

Need to call rxrpc_put_peer() for bundle candidate before kfree() as it
holds a ref to rxrpc_peer.

Fixes: 245500d853e9 ("rxrpc: Rewrite the client connection manager")
Signed-off-by: Eiichi Tsukata <redacted>
---
 net/rxrpc/conn_client.c | 1 +
 1 file changed, 1 insertion(+)
diff --git a/net/rxrpc/conn_client.c b/net/rxrpc/conn_client.c
index dbea0bfee48e..46dcb33888ff 100644
--- a/net/rxrpc/conn_client.c
+++ b/net/rxrpc/conn_client.c
@@ -328,6 +328,7 @@ static struct rxrpc_bundle *rxrpc_look_up_bundle(struct rxrpc_conn_parameters *c
 	return candidate;
 
 found_bundle_free:
+	rxrpc_put_peer(candidate->params.peer);
 	kfree(candidate);
 found_bundle:
 	rxrpc_get_bundle(bundle);
-- 
2.33.1

[PATCH net 2/2] rxrpc: Fix rxrpc_local leak in rxrpc_lookup_peer()

From: Eiichi Tsukata <hidden>
Date: 2021-11-21 04:17:20

Need to call rxrpc_put_local() for peer candidate before kfree() as it
holds a ref to rxrpc_local.

Fixes: 9ebeddef58c4 ("rxrpc: rxrpc_peer needs to hold a ref on the rxrpc_local record")
Signed-off-by: Eiichi Tsukata <redacted>
---
 net/rxrpc/peer_object.c | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)
diff --git a/net/rxrpc/peer_object.c b/net/rxrpc/peer_object.c
index 68396d052052..431b62bc1da2 100644
--- a/net/rxrpc/peer_object.c
+++ b/net/rxrpc/peer_object.c
@@ -364,10 +364,12 @@ struct rxrpc_peer *rxrpc_lookup_peer(struct rxrpc_sock *rx,
 
 		spin_unlock_bh(&rxnet->peer_hash_lock);
 
-		if (peer)
+		if (peer) {
+			rxrpc_put_local(candidate->local);
 			kfree(candidate);
-		else
+		} else {
 			peer = candidate;
+		}
 	}
 
 	_net("PEER %d {%pISp}", peer->debug_id, &peer->srx.transport);
-- 
2.33.1

Re: [PATCH net 2/2] rxrpc: Fix rxrpc_local leak in rxrpc_lookup_peer()

From: Marc Dionne <marc.dionne@auristor.com>
Date: 2021-11-23 14:12:05

On Sun, Nov 21, 2021 at 12:17 AM Eiichi Tsukata
[off-list ref] wrote:
quoted hunk
Need to call rxrpc_put_local() for peer candidate before kfree() as it
holds a ref to rxrpc_local.

Fixes: 9ebeddef58c4 ("rxrpc: rxrpc_peer needs to hold a ref on the rxrpc_local record")
Signed-off-by: Eiichi Tsukata <redacted>
---
 net/rxrpc/peer_object.c | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)
diff --git a/net/rxrpc/peer_object.c b/net/rxrpc/peer_object.c
index 68396d052052..431b62bc1da2 100644
--- a/net/rxrpc/peer_object.c
+++ b/net/rxrpc/peer_object.c
@@ -364,10 +364,12 @@ struct rxrpc_peer *rxrpc_lookup_peer(struct rxrpc_sock *rx,

                spin_unlock_bh(&rxnet->peer_hash_lock);

-               if (peer)
+               if (peer) {
+                       rxrpc_put_local(candidate->local);
                        kfree(candidate);
-               else
+               } else {
                        peer = candidate;
+               }
        }

        _net("PEER %d {%pISp}", peer->debug_id, &peer->srx.transport);
--
2.33.1
Reviewed-by: Marc Dionne <marc.dionne@auristor.com>

Marc

Re: [PATCH net 1/2] rxrpc: Fix rxrpc_peer leak in rxrpc_look_up_bundle()

From: Marc Dionne <marc.dionne@auristor.com>
Date: 2021-11-23 14:12:30

On Sun, Nov 21, 2021 at 12:17 AM Eiichi Tsukata
[off-list ref] wrote:
quoted hunk
Need to call rxrpc_put_peer() for bundle candidate before kfree() as it
holds a ref to rxrpc_peer.

Fixes: 245500d853e9 ("rxrpc: Rewrite the client connection manager")
Signed-off-by: Eiichi Tsukata <redacted>
---
 net/rxrpc/conn_client.c | 1 +
 1 file changed, 1 insertion(+)
diff --git a/net/rxrpc/conn_client.c b/net/rxrpc/conn_client.c
index dbea0bfee48e..46dcb33888ff 100644
--- a/net/rxrpc/conn_client.c
+++ b/net/rxrpc/conn_client.c
@@ -328,6 +328,7 @@ static struct rxrpc_bundle *rxrpc_look_up_bundle(struct rxrpc_conn_parameters *c
        return candidate;

 found_bundle_free:
+       rxrpc_put_peer(candidate->params.peer);
        kfree(candidate);
 found_bundle:
        rxrpc_get_bundle(bundle);
--
2.33.1
Reviewed-by: Marc Dionne <marc.dionne@auristor.com>

Marc

Re: [PATCH net 1/2] rxrpc: Fix rxrpc_peer leak in rxrpc_look_up_bundle()

From: David Howells <dhowells@redhat.com>
Date: 2021-11-24 14:22:54

Looks good, though I think a better way to do both of these cases is to
abstract out the freeing sequence into its own function.

David
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help