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