From 2941237d3642c1f506781ffb2081cf223645c92b Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?S=C3=A9bastien=20Blin?=
 <sebastien.blin@savoirfairelinux.com>
Date: Mon, 6 Nov 2023 10:07:25 -0500
Subject: [PATCH] swarm_manager: avoid use-after-free

routing_table.hasNode() may occur while routing_table.removeNode()
is called, causing a use-after-free.
Avoid this

Change-Id: I84c8ac87716ea4abf64ad41de85985d242161f34
---
 src/jamidht/swarm/swarm_manager.cpp | 7 +++----
 1 file changed, 3 insertions(+), 4 deletions(-)

diff --git a/src/jamidht/swarm/swarm_manager.cpp b/src/jamidht/swarm/swarm_manager.cpp
index 01291a1337..1ebb21731d 100644
--- a/src/jamidht/swarm/swarm_manager.cpp
+++ b/src/jamidht/swarm/swarm_manager.cpp
@@ -90,11 +90,10 @@ SwarmManager::addChannel(const std::shared_ptr<dhtnet::ChannelSocketInterface>&
 void
 SwarmManager::removeNode(const NodeId& nodeId)
 {
+    std::unique_lock<std::mutex> lk(mutex);
     if (isConnectedWith(nodeId)) {
-        {
-            std::lock_guard<std::mutex> lock(mutex);
-            removeNodeInternal(nodeId);
-        }
+        removeNodeInternal(nodeId);
+        lk.unlock();
         maintainBuckets();
     }
 }
-- 
GitLab