From c8eb704a92aea507571761444aa2f936940f1258 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adrien=20B=C3=A9raud?= <adrien.beraud@savoirfairelinux.com> Date: Tue, 19 Apr 2022 14:51:24 -0400 Subject: [PATCH] dhtrunner: prevent integer underflow in UDP rx callback --- src/dhtrunner.cpp | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/src/dhtrunner.cpp b/src/dhtrunner.cpp index 5b790c80..62b290af 100644 --- a/src/dhtrunner.cpp +++ b/src/dhtrunner.cpp @@ -163,14 +163,15 @@ DhtRunner::run(const Config& config, Context&& context) net::PacketList ret; { std::lock_guard<std::mutex> lck(sock_mtx); - auto maxSize = net::RX_QUEUE_MAX_SIZE - pkts.size(); - while (rcv.size() > maxSize) { - if (logger_) - logger_->e("Dropping packet: queue is full!"); + rcv.splice(rcv.end(), std::move(pkts)); + size_t dropped = 0; + while (rcv.size() > net::RX_QUEUE_MAX_SIZE) { rcv.pop_front(); + dropped++; + } + if (dropped and logger_) { + logger_->w("[runner %p] dropped %zu packets: queue is full!", this, dropped); } - - rcv.splice(rcv.end(), std::move(pkts)); ret = std::move(rcv_free); } cv.notify_all(); -- GitLab