From 9991c976ffb0c97e592f1ac5cfd08e387aa8e5ae Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adrien=20B=C3=A9raud?= Date: Fri, 15 Apr 2022 19:45:59 -0400 Subject: [PATCH] dht: prevent potential use-after-free in storageChanged --- src/dht.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/dht.cpp b/src/dht.cpp index fc9bc0ad..67c64f34 100644 --- a/src/dht.cpp +++ b/src/dht.cpp @@ -1282,9 +1282,13 @@ Dht::storageStore(const InfoHash& id, const Sp& value, time_point created vs->expiration_job = scheduler.add(expiration, std::bind(&Dht::expireStorage, this, id)); } if (total_store_size > max_store_size) { + auto value = vs->data; + auto value_diff = store.second.values_diff; expireStore(); + storageChanged(id, st->second, value, value_diff > 0); + } else { + storageChanged(id, st->second, vs->data, store.second.values_diff > 0); } - storageChanged(id, st->second, vs->data, store.second.values_diff > 0); } return std::get<0>(store);