From f0f834df3d62cbcb17c67225ce09303847eebb6f Mon Sep 17 00:00:00 2001 From: Adrien Beraud <adrien.beraud@savoirfairelinux.com> Date: Fri, 17 Jan 2025 11:38:33 -0500 Subject: [PATCH] multiplexed socket: avoid use-after-free Change-Id: I0c093ea4e1834866fd08abb30d51d5043fe1f455 --- src/multiplexed_socket.cpp | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/src/multiplexed_socket.cpp b/src/multiplexed_socket.cpp index 6d1e002..8dbf786 100644 --- a/src/multiplexed_socket.cpp +++ b/src/multiplexed_socket.cpp @@ -226,11 +226,15 @@ public: void MultiplexedSocket::Impl::eventLoop() { - endpoint->setOnStateChange([this](tls::TlsSessionState state) { - if (state == tls::TlsSessionState::SHUTDOWN && !isShutdown_) { - if (logger_) - logger_->debug("Tls endpoint is down, shutdown multiplexed socket"); - shutdown(); + endpoint->setOnStateChange([w = parent_.weak_from_this()](tls::TlsSessionState state) { + auto ssock = w.lock(); + if (!ssock) + return false; + auto& this_ = *ssock->pimpl_; + if (state == tls::TlsSessionState::SHUTDOWN && !this_.isShutdown_) { + if (this_.logger_) + this_.logger_->debug("Tls endpoint is down, shutdown multiplexed socket"); + this_.shutdown(); return false; } return true; -- GitLab