From 499b95da1cbaa0937c0d9074fc25379871282cd9 Mon Sep 17 00:00:00 2001 From: Jason Dellaluce Date: Tue, 28 Jan 2025 11:07:29 +0000 Subject: [PATCH] fix(libsinsp): do not postpone observing fd erasing Signed-off-by: Jason Dellaluce --- userspace/libsinsp/parsers.cpp | 15 +++------------ 1 file changed, 3 insertions(+), 12 deletions(-) diff --git a/userspace/libsinsp/parsers.cpp b/userspace/libsinsp/parsers.cpp index bc66c36960..f6212bcc04 100644 --- a/userspace/libsinsp/parsers.cpp +++ b/userspace/libsinsp/parsers.cpp @@ -3223,20 +3223,11 @@ void sinsp_parser::erase_fd(erase_fd_params *params) { } // - // If there's a listener, add a callback to later invoke it. + // If there's a listener, invoke the callback + // note: we avoid postponing this to avoid the risk of use-after-free // if(m_inspector->get_observer()) { - auto ts = params->m_ts; - auto remove_from_table = params->m_remove_from_table; - auto fd = params->m_fd; - auto tinfo = params->m_tinfo; - auto fdinfo = params->m_fdinfo; - m_inspector->m_post_process_cbs.emplace( - [ts, remove_from_table, fd, tinfo, fdinfo](sinsp_observer *observer, - sinsp_evt *evt) { - erase_fd_params p = {remove_from_table, fd, tinfo, fdinfo, ts}; - observer->on_erase_fd(&p); - }); + m_inspector->get_observer()->on_erase_fd(params); } }