openbmc / dbus-sensors

D-Bus configurable sensor scanning applications
Apache License 2.0
27 stars 45 forks source link

ASAN reports use-after-free in hwmontempsensor #20

Closed zevweiss closed 2 years ago

zevweiss commented 2 years ago

I'm working on some patches to allow dbus-sensors daemons to manage driver binding/unbinding on host power state transitions, which involves an increase in the amount of sensor object creation & destruction at runtime (post initialization), and started seeing some ASAN reports that didn't seem to be coming from my local changes; after some investigation I think there's a latent bug in the existing upstream code that just requires a bit more activity to trigger.

I reduced my local patch to the following, just enabling ASAN and adding a dbus method to trigger a createSensors() call:

diff --git a/meson.build b/meson.build
index 8b29e64aa4a5..dd675b8c98de 100644
--- a/meson.build
+++ b/meson.build
@@ -24,6 +24,7 @@ uring_args = [
 add_project_arguments(
     '-Wno-psabi',
     '-Wuninitialized',
+    '-fsanitize=address',
     '-DBOOST_SYSTEM_NO_DEPRECATED',
     '-DBOOST_ERROR_CODE_HEADER_ONLY',
     '-DBOOST_NO_RTTI',
diff --git a/src/HwmonTempMain.cpp b/src/HwmonTempMain.cpp
index d1d50d6a47c9..36b96b0fc05a 100644
--- a/src/HwmonTempMain.cpp
+++ b/src/HwmonTempMain.cpp
@@ -583,5 +583,15 @@ int main()

     matches.emplace_back(std::move(ifaceRemovedMatch));

+    std::shared_ptr<sdbusplus::asio::dbus_interface> debugIface =
+      objectServer.add_interface("/xyz/openbmc_project/sensors/temperature",
+                                 "xyz.openbmc_project.Debug");
+    debugIface->register_method("Rebuild", [&]() {
+      std::cerr << "Rebuilding sensors...\n";
+      createSensors(io, objectServer, sensors, systemBus, nullptr);
+      std::cerr << "...done.\n";
+    });
+    debugIface->initialize();
+
     io.run();
 }
diff --git a/src/meson.build b/src/meson.build
index 4c3d61cd6886..e340bb084655 100644
--- a/src/meson.build
+++ b/src/meson.build
@@ -85,6 +85,7 @@ if get_option('hwmon-temp').enabled()
             thresholds_dep,
             utils_dep,
         ],
+        link_args: '-fsanitize=address',
         cpp_args: uring_args,
         implicit_include_directories: false,
         include_directories: '../include',

With another shell open manually running a sequence of busctl call xyz.openbmc_project.HwmonTempSensor /xyz/openbmc_project/sensors/temperature xyz.openbmc_project.Debug Rebuild calls, I got the following ASAN dump:

root@romed8hm3-d05099f41e18:~# LD_LIBRARY_PATH=/tmp /tmp/hwmontempsensor
error getting  SpecialMode status No route to host
Rebuilding sensors...
...done.
Rebuilding sensors...
...done.
Rebuilding sensors...
...done.
Rebuilding sensors...
...done.
Rebuilding sensors...
...done.
=================================================================
==30937==ERROR: AddressSanitizer: heap-use-after-free on address 0x73d46080 at pc 0x006107f0 bp 0x7ef5e34c sp 0x7ef5e338
READ of size 1 at 0x73d46080 thread T0
    #0 0x6107ec in bool __gnu_cxx::__ops::_Iter_equals_val<char const>::operator()<boost::asio::buffers_iterator<boost::asio::const_buffers_1, char> >(boost::asio::buffers_iterator<boost::asio::const_buffers_1, char>) /usr/include/c++/11.3.0/bits/predefined_ops.h:270
    #1 0x6107ec in boost::asio::buffers_iterator<boost::asio::const_buffers_1, char> std::__find_if<boost::asio::buffers_iterator<boost::asio::const_buffers_1, char>, __gnu_cxx::__ops::_Iter_equals_val<char const> >(boost::asio::buffers_iterator<boost::asio::const_buffers_1, char>, boost::asio::buffers_iterator<boost::asio::const_buffers_1, char>, __gnu_cxx::__ops::_Iter_equals_val<char const>, std::random_access_iterator_tag) /usr/include/c++/11.3.0/bits/stl_algobase.h:2069
    #2 0x6107ec in boost::asio::buffers_iterator<boost::asio::const_buffers_1, char> std::__find_if<boost::asio::buffers_iterator<boost::asio::const_buffers_1, char>, __gnu_cxx::__ops::_Iter_equals_val<char const> >(boost::asio::buffers_iterator<boost::asio::const_buffers_1, char>, boost::asio::buffers_iterator<boost::asio::const_buffers_1, char>, __gnu_cxx::__ops::_Iter_equals_val<char const>) /usr/include/c++/11.3.0/bits/stl_algobase.h:2114
    #3 0x6107ec in boost::asio::buffers_iterator<boost::asio::const_buffers_1, char> std::find<boost::asio::buffers_iterator<boost::asio::const_buffers_1, char>, char>(boost::asio::buffers_iterator<boost::asio::const_buffers_1, char>, boost::asio::buffers_iterator<boost::asio::const_buffers_1, char>, char const&) /usr/include/c++/11.3.0/bits/stl_algo.h:3884
    #4 0x6107ec in operator() /usr/include/boost/asio/impl/read_until.hpp:874
    #5 0x615944 in operator() /usr/include/boost/asio/detail/bind_handler.hpp:289
    #6 0x615944 in asio_handler_invoke<boost::asio::detail::binder2<boost::asio::detail::read_until_delim_op_v1<boost::asio::posix::basic_stream_descriptor<>, boost::asio::basic_streambuf_ref<std::allocator<char> >, HwmonTempSensor::setupRead()::<lambda(const boost::system::error_code&, std::size_t)> >, boost::system::error_code, unsigned int> > /usr/include/boost/asio/handler_invoke_hook.hpp:88
    #7 0x615944 in invoke<boost::asio::detail::binder2<boost::asio::detail::read_until_delim_op_v1<boost::asio::posix::basic_stream_descriptor<>, boost::asio::basic_streambuf_ref<std::allocator<char> >, HwmonTempSensor::setupRead()::<lambda(const boost::system::error_code&, std::size_t)> >, boost::system::error_code, unsigned int>, HwmonTempSensor::setupRead()::<lambda(const boost::system::error_code&, std::size_t)> > /usr/include/boost/asio/detail/handler_invoke_helpers.hpp:54
    #8 0x615944 in asio_handler_invoke<boost::asio::detail::binder2<boost::asio::detail::read_until_delim_op_v1<boost::asio::posix::basic_stream_descriptor<>, boost::asio::basic_streambuf_ref<std::allocator<char> >, HwmonTempSensor::setupRead()::<lambda(const boost::system::error_code&, std::size_t)> >, boost::system::error_code, unsigned int>, boost::asio::posix::basic_stream_descriptor<>, boost::asio::basic_streambuf_ref<std::allocator<char> >, HwmonTempSensor::setupRead()::<lambda(const boost::system::error_code&, std::size_t)> > /usr/include/boost/asio/impl/read_until.hpp:993
    #9 0x615944 in invoke<boost::asio::detail::binder2<boost::asio::detail::read_until_delim_op_v1<boost::asio::posix::basic_stream_descriptor<>, boost::asio::basic_streambuf_ref<std::allocator<char> >, HwmonTempSensor::setupRead()::<lambda(const boost::system::error_code&, std::size_t)> >, boost::system::error_code, unsigned int>, boost::asio::detail::read_until_delim_op_v1<boost::asio::posix::basic_stream_descriptor<>, boost::asio::basic_streambuf_ref<std::allocator<char> >, HwmonTempSensor::setupRead()::<lambda(const boost::system::error_code&, std::size_t)> > > /usr/include/boost/asio/detail/handler_invoke_helpers.hpp:54
    #10 0x615944 in asio_handler_invoke<boost::asio::detail::binder2<boost::asio::detail::read_until_delim_op_v1<boost::asio::posix::basic_stream_descriptor<>, boost::asio::basic_streambuf_ref<std::allocator<char> >, HwmonTempSensor::setupRead()::<lambda(const boost::system::error_code&, std::size_t)> >, boost::system::error_code, unsigned int>, boost::asio::detail::read_until_delim_op_v1<boost::asio::posix::basic_stream_descriptor<>, boost::asio::basic_streambuf_ref<std::allocator<char> >, HwmonTempSensor::setupRead()::<lambda(const boost::system::error_code&, std::size_t)> >, boost::system::error_code, unsigned int> /usr/include/boost/asio/detail/bind_handler.hpp:344
    #11 0x615944 in invoke<boost::asio::detail::binder2<boost::asio::detail::read_until_delim_op_v1<boost::asio::posix::basic_stream_descriptor<>, boost::asio::basic_streambuf_ref<std::allocator<char> >, HwmonTempSensor::setupRead()::<lambda(const boost::system::error_code&, std::size_t)> >, boost::system::error_code, unsigned int>, boost::asio::detail::binder2<boost::asio::detail::read_until_delim_op_v1<boost::asio::posix::basic_stream_descriptor<>, boost::asio::basic_streambuf_ref<std::allocator<char> >, HwmonTempSensor::setupRead()::<lambda(const boost::system::error_code&, std::size_t)> >, boost::system::error_code, unsigned int> > /usr/include/boost/asio/detail/handler_invoke_helpers.hpp:54
    #12 0x615944 in complete<boost::asio::detail::binder2<boost::asio::detail::read_until_delim_op_v1<boost::asio::posix::basic_stream_descriptor<>, boost::asio::basic_streambuf_ref<std::allocator<char> >, HwmonTempSensor::setupRead()::<lambda(const boost::system::error_code&, std::size_t)> >, boost::system::error_code, unsigned int>, std::allocator<void> > /usr/include/boost/asio/detail/executor_function.hpp:116
    #13 0x613f98 in boost::asio::detail::executor_function::operator()() /usr/include/boost/asio/detail/executor_function.hpp:64
    #14 0x613f98 in void boost::asio::asio_handler_invoke<boost::asio::detail::executor_function>(boost::asio::detail::executor_function&, ...) /usr/include/boost/asio/handler_invoke_hook.hpp:88
    #15 0x613f98 in void boost_asio_handler_invoke_helpers::invoke<boost::asio::detail::executor_function, boost::asio::detail::executor_function>(boost::asio::detail::executor_function&, boost::asio::detail::executor_function&) /usr/include/boost/asio/detail/handler_invoke_helpers.hpp:54
    #16 0x613f98 in void boost::asio::io_context::basic_executor_type<std::allocator<void>, 0u>::dispatch<boost::asio::detail::executor_function, std::allocator<void> >(boost::asio::detail::executor_function&&, std::allocator<void> const&) const /usr/include/boost/asio/impl/io_context.hpp:354
    #17 0x613f98 in boost::asio::executor::impl<boost::asio::io_context::basic_executor_type<std::allocator<void>, 0u>, std::allocator<void> >::dispatch(boost::asio::detail::executor_function&&) /usr/include/boost/asio/impl/executor.hpp:93
    #18 0x613f98 in dispatch<boost::asio::detail::binder2<boost::asio::detail::read_until_delim_op_v1<boost::asio::posix::basic_stream_descriptor<>, boost::asio::basic_streambuf_ref<std::allocator<char> >, HwmonTempSensor::setupRead()::<lambda(const boost::system::error_code&, std::size_t)> >, boost::system::error_code, unsigned int>, std::allocator<void> > /usr/include/boost/asio/impl/executor.hpp:262
    #19 0x613f98 in dispatch<boost::asio::detail::binder2<boost::asio::detail::read_until_delim_op_v1<boost::asio::posix::basic_stream_descriptor<>, boost::asio::basic_streambuf_ref<std::allocator<char> >, HwmonTempSensor::setupRead()::<lambda(const boost::system::error_code&, std::size_t)> >, boost::system::error_code, unsigned int>, boost::asio::detail::read_until_delim_op_v1<boost::asio::posix::basic_stream_descriptor<>, boost::asio::basic_streambuf_ref<std::allocator<char> >, HwmonTempSensor::setupRead()::<lambda(const boost::system::error_code&, std::size_t)> > > /usr/include/boost/asio/detail/handler_work.hpp:281
    #20 0x613f98 in complete<boost::asio::detail::binder2<boost::asio::detail::read_until_delim_op_v1<boost::asio::posix::basic_stream_descriptor<>, boost::asio::basic_streambuf_ref<std::allocator<char> >, HwmonTempSensor::setupRead()::<lambda(const boost::system::error_code&, std::size_t)> >, boost::system::error_code, unsigned int> > /usr/include/boost/asio/detail/handler_work.hpp:516
    #21 0x613f98 in do_complete /usr/include/boost/asio/detail/io_uring_descriptor_read_op.hpp:169
    #22 0x4f57d8 in boost::asio::detail::scheduler_operation::complete(void*, boost::system::error_code const&, unsigned int) /usr/include/boost/asio/detail/scheduler_operation.hpp:40
    #23 0x4f57d8 in boost::asio::detail::io_uring_service::io_queue::do_complete(void*, boost::asio::detail::scheduler_operation*, boost::system::error_code const&, unsigned int) /usr/include/boost/asio/detail/impl/io_uring_service.ipp:864
    #24 0x4f57d8 in boost::asio::detail::io_uring_service::io_queue::do_complete(void*, boost::asio::detail::scheduler_operation*, boost::system::error_code const&, unsigned int) /usr/include/boost/asio/detail/impl/io_uring_service.ipp:855
    #25 0x4de56c in boost::asio::detail::scheduler_operation::complete(void*, boost::system::error_code const&, unsigned int) /usr/include/boost/asio/detail/scheduler_operation.hpp:40
    #26 0x4de56c in boost::asio::detail::scheduler::do_run_one(boost::asio::detail::conditionally_enabled_mutex::scoped_lock&, boost::asio::detail::scheduler_thread_info&, boost::system::error_code const&) /usr/include/boost/asio/detail/impl/scheduler.ipp:492
    #27 0x4de56c in boost::asio::detail::scheduler::run(boost::system::error_code&) /usr/include/boost/asio/detail/impl/scheduler.ipp:210
    #28 0x4de56c in boost::asio::io_context::run() /usr/include/boost/asio/impl/io_context.ipp:63
    #29 0x4de56c in main ../../../../../../workspace/sources/dbus-sensors/src/HwmonTempMain.cpp:596
    #30 0x765c18cc  (/lib/libc.so.6+0x218cc)
    #31 0x765c19d4 in __libc_start_main (/lib/libc.so.6+0x219d4)

0x73d46080 is located 0 bytes inside of 512-byte region [0x73d46080,0x73d46280)
freed by thread T0 here:
    #0 0x76add800 in operator delete(void*, unsigned int) (/tmp/libasan.so.6+0xbd800)
    #1 0x5d89dc in __gnu_cxx::new_allocator<char>::deallocate(char*, unsigned int) /usr/include/c++/11.3.0/ext/new_allocator.h:145
    #2 0x5d89dc in std::allocator<char>::deallocate(char*, unsigned int) /usr/include/c++/11.3.0/bits/allocator.h:199
    #3 0x5d89dc in std::allocator_traits<std::allocator<char> >::deallocate(std::allocator<char>&, char*, unsigned int) /usr/include/c++/11.3.0/bits/alloc_traits.h:496
    #4 0x5d89dc in std::_Vector_base<char, std::allocator<char> >::_M_deallocate(char*, unsigned int) /usr/include/c++/11.3.0/bits/stl_vector.h:354
    #5 0x5d89dc in std::_Vector_base<char, std::allocator<char> >::~_Vector_base() /usr/include/c++/11.3.0/bits/stl_vector.h:335
    #6 0x5d89dc in std::vector<char, std::allocator<char> >::~vector() /usr/include/c++/11.3.0/bits/stl_vector.h:683
    #7 0x5d89dc in boost::asio::basic_streambuf<std::allocator<char> >::~basic_streambuf() /usr/include/boost/asio/basic_streambuf.hpp:111
    #8 0x5d89dc in HwmonTempSensor::~HwmonTempSensor() ../../../../../../workspace/sources/dbus-sensors/src/HwmonTempSensor.cpp:89
    #9 0x524e60 in std::_Sp_counted_base<(__gnu_cxx::_Lock_policy)2>::_M_release() /usr/include/c++/11.3.0/bits/shared_ptr_base.h:168
    #10 0x52a4bc in std::__shared_count<(__gnu_cxx::_Lock_policy)2>::~__shared_count() /usr/include/c++/11.3.0/bits/shared_ptr_base.h:705
    #11 0x52a4bc in std::__shared_ptr<HwmonTempSensor, (__gnu_cxx::_Lock_policy)2>::~__shared_ptr() /usr/include/c++/11.3.0/bits/shared_ptr_base.h:1154
    #12 0x52a4bc in std::__shared_ptr<HwmonTempSensor, (__gnu_cxx::_Lock_policy)2>::operator=(std::__shared_ptr<HwmonTempSensor, (__gnu_cxx::_Lock_policy)2>&&) /usr/include/c++/11.3.0/bits/shared_ptr_base.h:1250
    #13 0x52a4bc in std::shared_ptr<HwmonTempSensor>::operator=(std::shared_ptr<HwmonTempSensor>&&) /usr/include/c++/11.3.0/bits/shared_ptr.h:385
    #14 0x52a4bc in operator() ../../../../../../workspace/sources/dbus-sensors/src/HwmonTempMain.cpp:407
    #15 0x5c8d80 in std::function<void (sdbusplus::message::message&)>::operator()(sdbusplus::message::message&) const /usr/include/c++/11.3.0/bits/std_function.h:590
    #16 0x5c8d80 in GetSensorConfiguration::~GetSensorConfiguration() ../../../../../../workspace/sources/dbus-sensors/include/Utils.hpp:321
    #17 0x5c8d80 in void std::destroy_at<GetSensorConfiguration>(GetSensorConfiguration*) /usr/include/c++/11.3.0/bits/stl_construct.h:88
    #18 0x5c8d80 in void std::allocator_traits<std::allocator<GetSensorConfiguration> >::destroy<GetSensorConfiguration>(std::allocator<GetSensorConfiguration>&, GetSensorConfiguration*) /usr/include/c++/11.3.0/bits/alloc_traits.h:537
    #19 0x5c8d80 in std::_Sp_counted_ptr_inplace<GetSensorConfiguration, std::allocator<GetSensorConfiguration>, (__gnu_cxx::_Lock_policy)2>::_M_dispose() /usr/include/c++/11.3.0/bits/shared_ptr_base.h:528
    #20 0x524e60 in std::_Sp_counted_base<(__gnu_cxx::_Lock_policy)2>::_M_release() /usr/include/c++/11.3.0/bits/shared_ptr_base.h:168
    #21 0x557618 in std::__shared_count<(__gnu_cxx::_Lock_policy)2>::~__shared_count() /usr/include/c++/11.3.0/bits/shared_ptr_base.h:705
    #22 0x557618 in std::__shared_ptr<GetSensorConfiguration, (__gnu_cxx::_Lock_policy)2>::~__shared_ptr() /usr/include/c++/11.3.0/bits/shared_ptr_base.h:1154
    #23 0x557618 in std::shared_ptr<GetSensorConfiguration>::~shared_ptr() /usr/include/c++/11.3.0/bits/shared_ptr.h:122
    #24 0x557618 in GetSensorConfiguration::getPath(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, unsigned int)::{lambda(boost::system::error_code, boost::container::flat_map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::variant<std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, long long, unsigned long long, double, int, unsigned int, short, unsigned short, unsigned char, bool>, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, void>&)#1}::~flat_map() ../../../../../../workspace/sources/dbus-sensors/include/Utils.hpp:227
    #25 0x557618 in sdbusplus::asio::connection::async_method_call_timed<GetSensorConfiguration::getPath(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, unsigned int)::{lambda(boost::system::error_code, boost::container::flat_map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::variant<std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, long long, unsigned long long, double, int, unsigned int, short, unsigned short, unsigned char, bool>, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, void>&)#1}, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >(GetSensorConfiguration::getPath(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, unsigned int)::{lambda(boost::system::error_code, boost::container::flat_map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::variant<std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, long long, unsigned long long, double, int, unsigned int, short, unsigned short, unsigned char, bool>, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, void>&)#1}&&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, unsigned long long, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)::{lambda(boost::system::error_code, sdbusplus::message::message&)#2}::~message() /usr/include/sdbusplus/asio/connection.hpp:144
    #26 0x557618 in sdbusplus::asio::detail::async_send_handler<sdbusplus::asio::connection::async_method_call_timed<GetSensorConfiguration::getPath(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, unsigned int)::{lambda(boost::system::error_code, boost::container::flat_map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::variant<std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, long long, unsigned long long, double, int, unsigned int, short, unsigned short, unsigned char, bool>, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, void>&)#1}, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >(GetSensorConfiguration::getPath(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, unsigned int)::{lambda(boost::system::error_code, boost::container::flat_map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::variant<std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, long long, unsigned long long, double, int, unsigned int, short, unsigned short, unsigned char, bool>, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, void>&)#1}&&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, unsigned long long, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)::{lambda(boost::system::error_code, sdbusplus::message::message&)#2}>::~async_send_handler() /usr/include/sdbusplus/asio/detail/async_send_handler.hpp:31
    #27 0x557618 in std::default_delete<sdbusplus::asio::detail::async_send_handler<sdbusplus::asio::connection::async_method_call_timed<GetSensorConfiguration::getPath(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, unsigned int)::{lambda(boost::system::error_code, boost::container::flat_map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::variant<std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, long long, unsigned long long, double, int, unsigned int, short, unsigned short, unsigned char, bool>, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, void>&)#1}, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >(GetSensorConfiguration::getPath(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, unsigned int)::{lambda(boost::system::error_code, boost::container::flat_map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::variant<std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, long long, unsigned long long, double, int, unsigned int, short, unsigned short, unsigned char, bool>, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, void>&)#1}&&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, unsigned long long, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)::{lambda(boost::system::error_code, sdbusplus::message::message&)#2}> >::operator()(sdbusplus::asio::detail::async_send_handler<sdbusplus::asio::connection::async_method_call_timed<GetSensorConfiguration::getPath(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, unsigned int)::{lambda(boost::system::error_code, boost::container::flat_map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::variant<std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, long long, unsigned long long, double, int, unsigned int, short, unsigned short, unsigned char, bool>, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, void>&)#1}, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >(GetSensorConfiguration::getPath(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, unsigned int)::{lambda(boost::system::error_code, boost::container::flat_map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::variant<std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, long long, unsigned long long, double, int, unsigned int, short, unsigned short, unsigned char, bool>, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, void>&)#1}&&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, unsigned long long, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)::{lambda(boost::system::error_code, sdbusplus::message::message&)#2}>*) const /usr/include/c++/11.3.0/bits/unique_ptr.h:85
    #28 0x557618 in std::default_delete<sdbusplus::asio::detail::async_send_handler<sdbusplus::asio::connection::async_method_call_timed<GetSensorConfiguration::getPath(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, unsigned int)::{lambda(boost::system::error_code, boost::container::flat_map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::variant<std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, long long, unsigned long long, double, int, unsigned int, short, unsigned short, unsigned char, bool>, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, void>&)#1}, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >(GetSensorConfiguration::getPath(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, unsigned int)::{lambda(boost::system::error_code, boost::container::flat_map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::variant<std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, long long, unsigned long long, double, int, unsigned int, short, unsigned short, unsigned char, bool>, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, void>&)#1}&&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, unsigned long long, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)::{lambda(boost::system::error_code, sdbusplus::message::message&)#2}> >::operator()(sdbusplus::asio::detail::async_send_handler<sdbusplus::asio::connection::async_method_call_timed<GetSensorConfiguration::getPath(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, unsigned int)::{lambda(boost::system::error_code, boost::container::flat_map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::variant<std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, long long, unsigned long long, double, int, unsigned int, short, unsigned short, unsigned char, bool>, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, void>&)#1}, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >(GetSensorConfiguration::getPath(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, unsigned int)::{lambda(boost::system::error_code, boost::container::flat_map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::variant<std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, long long, unsigned long long, double, int, unsigned int, short, unsigned short, unsigned char, bool>, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, void>&)#1}&&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, unsigned long long, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)::{lambda(boost::system::error_code, sdbusplus::message::message&)#2}>*) const /usr/include/c++/11.3.0/bits/unique_ptr.h:79
    #29 0x557618 in std::unique_ptr<sdbusplus::asio::detail::async_send_handler<sdbusplus::asio::connection::async_method_call_timed<GetSensorConfiguration::getPath(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, unsigned int)::{lambda(boost::system::error_code, boost::container::flat_map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::variant<std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, long long, unsigned long long, double, int, unsigned int, short, unsigned short, unsigned char, bool>, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, void>&)#1}, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >(GetSensorConfiguration::getPath(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, unsigned int)::{lambda(boost::system::error_code, boost::container::flat_map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::variant<std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, long long, unsigned long long, double, int, unsigned int, short, unsigned short, unsigned char, bool>, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, void>&)#1}&&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, unsigned long long, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)::{lambda(boost::system::error_code, sdbusplus::message::message&)#2}>, std::default_delete<sdbusplus::asio::detail::async_send_handler<sdbusplus::asio::connection::async_method_call_timed<GetSensorConfiguration::getPath(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, unsigned int)::{lambda(boost::system::error_code, boost::container::flat_map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::variant<std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, long long, unsigned long long, double, int, unsigned int, short, unsigned short, unsigned char, bool>, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, void>&)#1}, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >(GetSensorConfiguration::getPath(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, unsigned int)::{lambda(boost::system::error_code, boost::container::flat_map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::variant<std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, long long, unsigned long long, double, int, unsigned int, short, unsigned short, unsigned char, bool>, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, void>&)#1}&&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, unsigned long long, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)::{lambda(boost::system::error_code, sdbusplus::message::message&)#2}> > >::~unique_ptr() /usr/include/c++/11.3.0/bits/unique_ptr.h:361
    #30 0x557618 in sdbusplus::asio::detail::async_send_handler<sdbusplus::asio::connection::async_method_call_timed<GetSensorConfiguration::getPath(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, unsigned int)::{lambda(boost::system::error_code, boost::container::flat_map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::variant<std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, long long, unsigned long long, double, int, unsigned int, short, unsigned short, unsigned char, bool>, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, void>&)#1}, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >(GetSensorConfiguration::getPath(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, unsigned int)::{lambda(boost::system::error_code, boost::container::flat_map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::variant<std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, long long, unsigned long long, double, int, unsigned int, short, unsigned short, unsigned char, bool>, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, void>&)#1}&&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, unsigned long long, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)::{lambda(boost::system::error_code, sdbusplus::message::message&)#2}>::callback(sd_bus_message*, void*, sd_bus_error*) /usr/include/sdbusplus/asio/detail/async_send_handler.hpp:66

previously allocated by thread T0 here:
    #0 0x76adc784 in operator new(unsigned int) (/tmp/libasan.so.6+0xbc784)
    #1 0x5ea398 in __gnu_cxx::new_allocator<char>::allocate(unsigned int, void const*) /usr/include/c++/11.3.0/ext/new_allocator.h:127
    #2 0x5ea398 in std::allocator<char>::allocate(unsigned int) /usr/include/c++/11.3.0/bits/allocator.h:185
    #3 0x5ea398 in std::allocator_traits<std::allocator<char> >::allocate(std::allocator<char>&, unsigned int) /usr/include/c++/11.3.0/bits/alloc_traits.h:464
    #4 0x5ea398 in std::_Vector_base<char, std::allocator<char> >::_M_allocate(unsigned int) /usr/include/c++/11.3.0/bits/stl_vector.h:346
    #5 0x5ea398 in std::_Vector_base<char, std::allocator<char> >::_M_allocate(unsigned int) /usr/include/c++/11.3.0/bits/stl_vector.h:343
    #6 0x5ea398 in std::vector<char, std::allocator<char> >::_M_default_append(unsigned int) /usr/include/c++/11.3.0/bits/vector.tcc:635
    #7 0x5f82b4 in std::vector<char, std::allocator<char> >::resize(unsigned int) /usr/include/c++/11.3.0/bits/stl_vector.h:940
    #8 0x5f82b4 in boost::asio::basic_streambuf<std::allocator<char> >::reserve(unsigned int) /usr/include/boost/asio/basic_streambuf.hpp:335
    #9 0x60ca90 in boost::asio::basic_streambuf<std::allocator<char> >::prepare(unsigned int) /usr/include/boost/asio/basic_streambuf.hpp:217
    #10 0x60ca90 in boost::asio::basic_streambuf_ref<std::allocator<char> >::prepare(unsigned int) /usr/include/boost/asio/basic_streambuf.hpp:428
    #11 0x60ca90 in operator() /usr/include/boost/asio/impl/read_until.hpp:910
    #12 0x5e9668 in operator()<HwmonTempSensor::setupRead()::<lambda(const boost::system::error_code&, std::size_t)>, boost::asio::basic_streambuf_ref<std::allocator<char> > > /usr/include/boost/asio/impl/read_until.hpp:1044
    #13 0x5e9668 in initiate<boost::asio::detail::initiate_async_read_until_delim_v1<boost::asio::posix::basic_stream_descriptor<> >, HwmonTempSensor::setupRead()::<lambda(const boost::system::error_code&, std::size_t)>, boost::asio::basic_streambuf_ref<std::allocator<char> >, char&> /usr/include/boost/asio/async_result.hpp:482
    #14 0x5e9668 in async_initiate<HwmonTempSensor::setupRead()::<lambda(const boost::system::error_code&, std::size_t)>, void(boost::system::error_code, unsigned int), boost::asio::detail::initiate_async_read_until_delim_v1<boost::asio::posix::basic_stream_descriptor<> >, boost::asio::basic_streambuf_ref<std::allocator<char> >, char&> /usr/include/boost/asio/async_result.hpp:862
    #15 0x5e9668 in async_read_until<boost::asio::posix::basic_stream_descriptor<>, boost::asio::basic_streambuf_ref<std::allocator<char> >, HwmonTempSensor::setupRead()::<lambda(const boost::system::error_code&, std::size_t)> > /usr/include/boost/asio/impl/read_until.hpp:1090
    #16 0x5e9668 in async_read_until<boost::asio::posix::basic_stream_descriptor<>, std::allocator<char>, HwmonTempSensor::setupRead()::<lambda(const boost::system::error_code&, std::size_t)> > /usr/include/boost/asio/impl/read_until.hpp:2028
    #17 0x5e9668 in HwmonTempSensor::setupRead() ../../../../../../workspace/sources/dbus-sensors/src/HwmonTempSensor.cpp:113
    #18 0x5ea040 in operator() ../../../../../../workspace/sources/dbus-sensors/src/HwmonTempSensor.cpp:138
    #19 0x5f7890 in operator() /usr/include/boost/asio/detail/bind_handler.hpp:171
    #20 0x5f7890 in asio_handler_invoke<boost::asio::detail::binder1<HwmonTempSensor::restartRead()::<lambda(const boost::system::error_code&)>, boost::system::error_code> > /usr/include/boost/asio/handler_invoke_hook.hpp:88
    #21 0x5f7890 in invoke<boost::asio::detail::binder1<HwmonTempSensor::restartRead()::<lambda(const boost::system::error_code&)>, boost::system::error_code>, HwmonTempSensor::restartRead()::<lambda(const boost::system::error_code&)> > /usr/include/boost/asio/detail/handler_invoke_helpers.hpp:54
    #22 0x5f7890 in asio_handler_invoke<boost::asio::detail::binder1<HwmonTempSensor::restartRead()::<lambda(const boost::system::error_code&)>, boost::system::error_code>, HwmonTempSensor::restartRead()::<lambda(const boost::system::error_code&)>, boost::system::error_code> /usr/include/boost/asio/detail/bind_handler.hpp:224
    #23 0x5f7890 in invoke<boost::asio::detail::binder1<HwmonTempSensor::restartRead()::<lambda(const boost::system::error_code&)>, boost::system::error_code>, boost::asio::detail::binder1<HwmonTempSensor::restartRead()::<lambda(const boost::system::error_code&)>, boost::system::error_code> > /usr/include/boost/asio/detail/handler_invoke_helpers.hpp:54
    #24 0x5f7890 in complete<boost::asio::detail::binder1<HwmonTempSensor::restartRead()::<lambda(const boost::system::error_code&)>, boost::system::error_code>, std::allocator<void> > /usr/include/boost/asio/detail/executor_function.hpp:116
    #25 0x600e1c in boost::asio::detail::executor_function::operator()() /usr/include/boost/asio/detail/executor_function.hpp:64
    #26 0x600e1c in void boost::asio::asio_handler_invoke<boost::asio::detail::executor_function>(boost::asio::detail::executor_function&, ...) /usr/include/boost/asio/handler_invoke_hook.hpp:88
    #27 0x600e1c in void boost_asio_handler_invoke_helpers::invoke<boost::asio::detail::executor_function, boost::asio::detail::executor_function>(boost::asio::detail::executor_function&, boost::asio::detail::executor_function&) /usr/include/boost/asio/detail/handler_invoke_helpers.hpp:54
    #28 0x600e1c in void boost::asio::io_context::basic_executor_type<std::allocator<void>, 0u>::dispatch<boost::asio::detail::executor_function, std::allocator<void> >(boost::asio::detail::executor_function&&, std::allocator<void> const&) const /usr/include/boost/asio/impl/io_context.hpp:354
    #29 0x600e1c in boost::asio::executor::impl<boost::asio::io_context::basic_executor_type<std::allocator<void>, 0u>, std::allocator<void> >::dispatch(boost::asio::detail::executor_function&&) /usr/include/boost/asio/impl/executor.hpp:93
    #30 0x600e1c in dispatch<boost::asio::detail::binder1<HwmonTempSensor::restartRead()::<lambda(const boost::system::error_code&)>, boost::system::error_code>, std::allocator<void> > /usr/include/boost/asio/impl/executor.hpp:262
    #31 0x600e1c in dispatch<boost::asio::detail::binder1<HwmonTempSensor::restartRead()::<lambda(const boost::system::error_code&)>, boost::system::error_code>, HwmonTempSensor::restartRead()::<lambda(const boost::system::error_code&)> > /usr/include/boost/asio/detail/handler_work.hpp:281
    #32 0x600e1c in complete<boost::asio::detail::binder1<HwmonTempSensor::restartRead()::<lambda(const boost::system::error_code&)>, boost::system::error_code> > /usr/include/boost/asio/detail/handler_work.hpp:516
    #33 0x600e1c in do_complete /usr/include/boost/asio/detail/wait_handler.hpp:76
    #34 0x4de56c in boost::asio::detail::scheduler_operation::complete(void*, boost::system::error_code const&, unsigned int) /usr/include/boost/asio/detail/scheduler_operation.hpp:40
    #35 0x4de56c in boost::asio::detail::scheduler::do_run_one(boost::asio::detail::conditionally_enabled_mutex::scoped_lock&, boost::asio::detail::scheduler_thread_info&, boost::system::error_code const&) /usr/include/boost/asio/detail/impl/scheduler.ipp:492
    #36 0x4de56c in boost::asio::detail::scheduler::run(boost::system::error_code&) /usr/include/boost/asio/detail/impl/scheduler.ipp:210
    #37 0x4de56c in boost::asio::io_context::run() /usr/include/boost/asio/impl/io_context.ipp:63
    #38 0x4de56c in main ../../../../../../workspace/sources/dbus-sensors/src/HwmonTempMain.cpp:596
    #39 0x765c18cc  (/lib/libc.so.6+0x218cc)
    #40 0x765c19d4 in __libc_start_main (/lib/libc.so.6+0x219d4)

SUMMARY: AddressSanitizer: heap-use-after-free /usr/include/c++/11.3.0/bits/predefined_ops.h:270 in bool __gnu_cxx::__ops::_Iter_equals_val<char const>::operator()<boost::asio::buffers_iterator<boost::asio::const_buffers_1, char> >(boost::asio::buffers_iterator<boost::asio::const_buffers_1, char>)
Shadow bytes around the buggy address:
  0x2e7a8bc0: fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd
  0x2e7a8bd0: fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd
  0x2e7a8be0: fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd
  0x2e7a8bf0: fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd
  0x2e7a8c00: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
=>0x2e7a8c10:[fd]fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd
  0x2e7a8c20: fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd
  0x2e7a8c30: fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd
  0x2e7a8c40: fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd
  0x2e7a8c50: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
  0x2e7a8c60: fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd
Shadow byte legend (one shadow byte represents 8 application bytes):
  Addressable:           00
  Partially addressable: 01 02 03 04 05 06 07
  Heap left redzone:       fa
  Freed heap region:       fd
  Stack left redzone:      f1
  Stack mid redzone:       f2
  Stack right redzone:     f3
  Stack after return:      f5
  Stack use after scope:   f8
  Global redzone:          f9
  Global init order:       f6
  Poisoned by user:        f7
  Container overflow:      fc
  Array cookie:            ac
  Intra object redzone:    bb
  ASan internal:           fe
  Left alloca redzone:     ca
  Right alloca redzone:    cb
  Shadow gap:              cc
==30937==ABORTING

(The LD_LIBRARY_PATH setting is just to allow it to find libasan.so.6, which I manually copied in after building the gcc-sanitizers package.)

zevweiss commented 2 years ago

On a suggestion from @edtanous I tried applying the following patch so that the readBuf destructor is ordered after the inputDev destructor:

diff --git a/include/HwmonTempSensor.hpp b/include/HwmonTempSensor.hpp
index 5cf77c384db0..8e478fca280a 100644
--- a/include/HwmonTempSensor.hpp
+++ b/include/HwmonTempSensor.hpp
@@ -36,9 +36,9 @@ class HwmonTempSensor :

   private:
     sdbusplus::asio::object_server& objServer;
+    boost::asio::streambuf readBuf;
     boost::asio::posix::stream_descriptor inputDev;
     boost::asio::deadline_timer waitTimer;
-    boost::asio::streambuf readBuf;
     std::string path;
     double offsetValue;
     double scaleValue;

I was still able to reproduce the problem, however (I believe this is functionally pretty much identical to the dump above, but I'll preserve it here in case there's a difference I've missed):

root@romed8hm3-d05099f41e18:~# LD_LIBRARY_PATH=/tmp /tmp/hwmontempsensor
error getting  SpecialMode status No route to host
Rebuilding sensors...
...done.
Rebuilding sensors...
...done.
Rebuilding sensors...
...done.
Rebuilding sensors...
...done.
Rebuilding sensors...
...done.
Rebuilding sensors...
...done.
Rebuilding sensors...
...done.
Rebuilding sensors...
...done.
Rebuilding sensors...
...done.
Rebuilding sensors...
...done.
Rebuilding sensors...
...done.
Rebuilding sensors...
...done.
=================================================================
==31018==ERROR: AddressSanitizer: heap-use-after-free on address 0x73c85280 at pc 0x005e06d8 bp 0x7ee1034c sp 0x7ee10338
READ of size 1 at 0x73c85280 thread T0
    #0 0x5e06d4 in bool __gnu_cxx::__ops::_Iter_equals_val<char const>::operator()<boost::asio::buffers_iterator<boost::asio::const_buffers_1, char> >(boost::asio::buffers_iterator<boost::asio::const_buffers_1, char>) /usr/include/c++/11.3.0/bits/predefined_ops.h:270
    #1 0x5e06d4 in boost::asio::buffers_iterator<boost::asio::const_buffers_1, char> std::__find_if<boost::asio::buffers_iterator<boost::asio::const_buffers_1, char>, __gnu_cxx::__ops::_Iter_equals_val<char const> >(boost::asio::buffers_iterator<boost::asio::const_buffers_1, char>, boost::asio::buffers_iterator<boost::asio::const_buffers_1, char>, __gnu_cxx::__ops::_Iter_equals_val<char const>, std::random_access_iterator_tag) /usr/include/c++/11.3.0/bits/stl_algobase.h:2069
    #2 0x5e06d4 in boost::asio::buffers_iterator<boost::asio::const_buffers_1, char> std::__find_if<boost::asio::buffers_iterator<boost::asio::const_buffers_1, char>, __gnu_cxx::__ops::_Iter_equals_val<char const> >(boost::asio::buffers_iterator<boost::asio::const_buffers_1, char>, boost::asio::buffers_iterator<boost::asio::const_buffers_1, char>, __gnu_cxx::__ops::_Iter_equals_val<char const>) /usr/include/c++/11.3.0/bits/stl_algobase.h:2114
    #3 0x5e06d4 in boost::asio::buffers_iterator<boost::asio::const_buffers_1, char> std::find<boost::asio::buffers_iterator<boost::asio::const_buffers_1, char>, char>(boost::asio::buffers_iterator<boost::asio::const_buffers_1, char>, boost::asio::buffers_iterator<boost::asio::const_buffers_1, char>, char const&) /usr/include/c++/11.3.0/bits/stl_algo.h:3884
    #4 0x5e06d4 in operator() /usr/include/boost/asio/impl/read_until.hpp:874
    #5 0x5e582c in operator() /usr/include/boost/asio/detail/bind_handler.hpp:289
    #6 0x5e582c in asio_handler_invoke<boost::asio::detail::binder2<boost::asio::detail::read_until_delim_op_v1<boost::asio::posix::basic_stream_descriptor<>, boost::asio::basic_streambuf_ref<std::allocator<char> >, HwmonTempSensor::setupRead()::<lambda(const boost::system::error_code&, std::size_t)> >, boost::system::error_code, unsigned int> > /usr/include/boost/asio/handler_invoke_hook.hpp:88
    #7 0x5e582c in invoke<boost::asio::detail::binder2<boost::asio::detail::read_until_delim_op_v1<boost::asio::posix::basic_stream_descriptor<>, boost::asio::basic_streambuf_ref<std::allocator<char> >, HwmonTempSensor::setupRead()::<lambda(const boost::system::error_code&, std::size_t)> >, boost::system::error_code, unsigned int>, HwmonTempSensor::setupRead()::<lambda(const boost::system::error_code&, std::size_t)> > /usr/include/boost/asio/detail/handler_invoke_helpers.hpp:54
    #8 0x5e582c in asio_handler_invoke<boost::asio::detail::binder2<boost::asio::detail::read_until_delim_op_v1<boost::asio::posix::basic_stream_descriptor<>, boost::asio::basic_streambuf_ref<std::allocator<char> >, HwmonTempSensor::setupRead()::<lambda(const boost::system::error_code&, std::size_t)> >, boost::system::error_code, unsigned int>, boost::asio::posix::basic_stream_descriptor<>, boost::asio::basic_streambuf_ref<std::allocator<char> >, HwmonTempSensor::setupRead()::<lambda(const boost::system::error_code&, std::size_t)> > /usr/include/boost/asio/impl/read_until.hpp:993
    #9 0x5e582c in invoke<boost::asio::detail::binder2<boost::asio::detail::read_until_delim_op_v1<boost::asio::posix::basic_stream_descriptor<>, boost::asio::basic_streambuf_ref<std::allocator<char> >, HwmonTempSensor::setupRead()::<lambda(const boost::system::error_code&, std::size_t)> >, boost::system::error_code, unsigned int>, boost::asio::detail::read_until_delim_op_v1<boost::asio::posix::basic_stream_descriptor<>, boost::asio::basic_streambuf_ref<std::allocator<char> >, HwmonTempSensor::setupRead()::<lambda(const boost::system::error_code&, std::size_t)> > > /usr/include/boost/asio/detail/handler_invoke_helpers.hpp:54
    #10 0x5e582c in asio_handler_invoke<boost::asio::detail::binder2<boost::asio::detail::read_until_delim_op_v1<boost::asio::posix::basic_stream_descriptor<>, boost::asio::basic_streambuf_ref<std::allocator<char> >, HwmonTempSensor::setupRead()::<lambda(const boost::system::error_code&, std::size_t)> >, boost::system::error_code, unsigned int>, boost::asio::detail::read_until_delim_op_v1<boost::asio::posix::basic_stream_descriptor<>, boost::asio::basic_streambuf_ref<std::allocator<char> >, HwmonTempSensor::setupRead()::<lambda(const boost::system::error_code&, std::size_t)> >, boost::system::error_code, unsigned int> /usr/include/boost/asio/detail/bind_handler.hpp:344
    #11 0x5e582c in invoke<boost::asio::detail::binder2<boost::asio::detail::read_until_delim_op_v1<boost::asio::posix::basic_stream_descriptor<>, boost::asio::basic_streambuf_ref<std::allocator<char> >, HwmonTempSensor::setupRead()::<lambda(const boost::system::error_code&, std::size_t)> >, boost::system::error_code, unsigned int>, boost::asio::detail::binder2<boost::asio::detail::read_until_delim_op_v1<boost::asio::posix::basic_stream_descriptor<>, boost::asio::basic_streambuf_ref<std::allocator<char> >, HwmonTempSensor::setupRead()::<lambda(const boost::system::error_code&, std::size_t)> >, boost::system::error_code, unsigned int> > /usr/include/boost/asio/detail/handler_invoke_helpers.hpp:54
    #12 0x5e582c in complete<boost::asio::detail::binder2<boost::asio::detail::read_until_delim_op_v1<boost::asio::posix::basic_stream_descriptor<>, boost::asio::basic_streambuf_ref<std::allocator<char> >, HwmonTempSensor::setupRead()::<lambda(const boost::system::error_code&, std::size_t)> >, boost::system::error_code, unsigned int>, std::allocator<void> > /usr/include/boost/asio/detail/executor_function.hpp:116
    #13 0x5e3e80 in boost::asio::detail::executor_function::operator()() /usr/include/boost/asio/detail/executor_function.hpp:64
    #14 0x5e3e80 in void boost::asio::asio_handler_invoke<boost::asio::detail::executor_function>(boost::asio::detail::executor_function&, ...) /usr/include/boost/asio/handler_invoke_hook.hpp:88
    #15 0x5e3e80 in void boost_asio_handler_invoke_helpers::invoke<boost::asio::detail::executor_function, boost::asio::detail::executor_function>(boost::asio::detail::executor_function&, boost::asio::detail::executor_function&) /usr/include/boost/asio/detail/handler_invoke_helpers.hpp:54
    #16 0x5e3e80 in void boost::asio::io_context::basic_executor_type<std::allocator<void>, 0u>::dispatch<boost::asio::detail::executor_function, std::allocator<void> >(boost::asio::detail::executor_function&&, std::allocator<void> const&) const /usr/include/boost/asio/impl/io_context.hpp:354
    #17 0x5e3e80 in boost::asio::executor::impl<boost::asio::io_context::basic_executor_type<std::allocator<void>, 0u>, std::allocator<void> >::dispatch(boost::asio::detail::executor_function&&) /usr/include/boost/asio/impl/executor.hpp:93
    #18 0x5e3e80 in dispatch<boost::asio::detail::binder2<boost::asio::detail::read_until_delim_op_v1<boost::asio::posix::basic_stream_descriptor<>, boost::asio::basic_streambuf_ref<std::allocator<char> >, HwmonTempSensor::setupRead()::<lambda(const boost::system::error_code&, std::size_t)> >, boost::system::error_code, unsigned int>, std::allocator<void> > /usr/include/boost/asio/impl/executor.hpp:262
    #19 0x5e3e80 in dispatch<boost::asio::detail::binder2<boost::asio::detail::read_until_delim_op_v1<boost::asio::posix::basic_stream_descriptor<>, boost::asio::basic_streambuf_ref<std::allocator<char> >, HwmonTempSensor::setupRead()::<lambda(const boost::system::error_code&, std::size_t)> >, boost::system::error_code, unsigned int>, boost::asio::detail::read_until_delim_op_v1<boost::asio::posix::basic_stream_descriptor<>, boost::asio::basic_streambuf_ref<std::allocator<char> >, HwmonTempSensor::setupRead()::<lambda(const boost::system::error_code&, std::size_t)> > > /usr/include/boost/asio/detail/handler_work.hpp:281
    #20 0x5e3e80 in complete<boost::asio::detail::binder2<boost::asio::detail::read_until_delim_op_v1<boost::asio::posix::basic_stream_descriptor<>, boost::asio::basic_streambuf_ref<std::allocator<char> >, HwmonTempSensor::setupRead()::<lambda(const boost::system::error_code&, std::size_t)> >, boost::system::error_code, unsigned int> > /usr/include/boost/asio/detail/handler_work.hpp:516
    #21 0x5e3e80 in do_complete /usr/include/boost/asio/detail/io_uring_descriptor_read_op.hpp:169
    #22 0x4c57d8 in boost::asio::detail::scheduler_operation::complete(void*, boost::system::error_code const&, unsigned int) /usr/include/boost/asio/detail/scheduler_operation.hpp:40
    #23 0x4c57d8 in boost::asio::detail::io_uring_service::io_queue::do_complete(void*, boost::asio::detail::scheduler_operation*, boost::system::error_code const&, unsigned int) /usr/include/boost/asio/detail/impl/io_uring_service.ipp:864
    #24 0x4c57d8 in boost::asio::detail::io_uring_service::io_queue::do_complete(void*, boost::asio::detail::scheduler_operation*, boost::system::error_code const&, unsigned int) /usr/include/boost/asio/detail/impl/io_uring_service.ipp:855
    #25 0x4ae56c in boost::asio::detail::scheduler_operation::complete(void*, boost::system::error_code const&, unsigned int) /usr/include/boost/asio/detail/scheduler_operation.hpp:40
    #26 0x4ae56c in boost::asio::detail::scheduler::do_run_one(boost::asio::detail::conditionally_enabled_mutex::scoped_lock&, boost::asio::detail::scheduler_thread_info&, boost::system::error_code const&) /usr/include/boost/asio/detail/impl/scheduler.ipp:492
    #27 0x4ae56c in boost::asio::detail::scheduler::run(boost::system::error_code&) /usr/include/boost/asio/detail/impl/scheduler.ipp:210
    #28 0x4ae56c in boost::asio::io_context::run() /usr/include/boost/asio/impl/io_context.ipp:63
    #29 0x4ae56c in main ../../../../../../workspace/sources/dbus-sensors/src/HwmonTempMain.cpp:596
    #30 0x765318cc  (/lib/libc.so.6+0x218cc)
    #31 0x765319d4 in __libc_start_main (/lib/libc.so.6+0x219d4)

0x73c85280 is located 0 bytes inside of 512-byte region [0x73c85280,0x73c85480)
freed by thread T0 here:
    #0 0x76a4d800 in operator delete(void*, unsigned int) (/tmp/libasan.so.6+0xbd800)
    #1 0x5a97bc in __gnu_cxx::new_allocator<char>::deallocate(char*, unsigned int) /usr/include/c++/11.3.0/ext/new_allocator.h:145
    #2 0x5a97bc in std::allocator<char>::deallocate(char*, unsigned int) /usr/include/c++/11.3.0/bits/allocator.h:199
    #3 0x5a97bc in std::allocator_traits<std::allocator<char> >::deallocate(std::allocator<char>&, char*, unsigned int) /usr/include/c++/11.3.0/bits/alloc_traits.h:496
    #4 0x5a97bc in std::_Vector_base<char, std::allocator<char> >::_M_deallocate(char*, unsigned int) /usr/include/c++/11.3.0/bits/stl_vector.h:354
    #5 0x5a97bc in std::_Vector_base<char, std::allocator<char> >::~_Vector_base() /usr/include/c++/11.3.0/bits/stl_vector.h:335
    #6 0x5a97bc in std::vector<char, std::allocator<char> >::~vector() /usr/include/c++/11.3.0/bits/stl_vector.h:683
    #7 0x5a97bc in boost::asio::basic_streambuf<std::allocator<char> >::~basic_streambuf() /usr/include/boost/asio/basic_streambuf.hpp:111
    #8 0x5a97bc in HwmonTempSensor::~HwmonTempSensor() ../../../../../../workspace/sources/dbus-sensors/src/HwmonTempSensor.cpp:89
    #9 0x4f4c48 in std::_Sp_counted_base<(__gnu_cxx::_Lock_policy)2>::_M_release() /usr/include/c++/11.3.0/bits/shared_ptr_base.h:168
    #10 0x4fccac in std::__shared_count<(__gnu_cxx::_Lock_policy)2>::~__shared_count() /usr/include/c++/11.3.0/bits/shared_ptr_base.h:705
    #11 0x4fccac in std::__shared_ptr<HwmonTempSensor, (__gnu_cxx::_Lock_policy)2>::~__shared_ptr() /usr/include/c++/11.3.0/bits/shared_ptr_base.h:1154
    #12 0x4fccac in std::__shared_ptr<HwmonTempSensor, (__gnu_cxx::_Lock_policy)2>::operator=(std::__shared_ptr<HwmonTempSensor, (__gnu_cxx::_Lock_policy)2>&&) /usr/include/c++/11.3.0/bits/shared_ptr_base.h:1250
    #13 0x4fccac in std::shared_ptr<HwmonTempSensor>::operator=(std::shared_ptr<HwmonTempSensor>&&) /usr/include/c++/11.3.0/bits/shared_ptr.h:385
    #14 0x4fccac in operator() ../../../../../../workspace/sources/dbus-sensors/src/HwmonTempMain.cpp:462
    #15 0x598b68 in std::function<void (sdbusplus::message::message&)>::operator()(sdbusplus::message::message&) const /usr/include/c++/11.3.0/bits/std_function.h:590
    #16 0x598b68 in GetSensorConfiguration::~GetSensorConfiguration() ../../../../../../workspace/sources/dbus-sensors/include/Utils.hpp:321
    #17 0x598b68 in void std::destroy_at<GetSensorConfiguration>(GetSensorConfiguration*) /usr/include/c++/11.3.0/bits/stl_construct.h:88
    #18 0x598b68 in void std::allocator_traits<std::allocator<GetSensorConfiguration> >::destroy<GetSensorConfiguration>(std::allocator<GetSensorConfiguration>&, GetSensorConfiguration*) /usr/include/c++/11.3.0/bits/alloc_traits.h:537
    #19 0x598b68 in std::_Sp_counted_ptr_inplace<GetSensorConfiguration, std::allocator<GetSensorConfiguration>, (__gnu_cxx::_Lock_policy)2>::_M_dispose() /usr/include/c++/11.3.0/bits/shared_ptr_base.h:528
    #20 0x4f4c48 in std::_Sp_counted_base<(__gnu_cxx::_Lock_policy)2>::_M_release() /usr/include/c++/11.3.0/bits/shared_ptr_base.h:168
    #21 0x527400 in std::__shared_count<(__gnu_cxx::_Lock_policy)2>::~__shared_count() /usr/include/c++/11.3.0/bits/shared_ptr_base.h:705
    #22 0x527400 in std::__shared_ptr<GetSensorConfiguration, (__gnu_cxx::_Lock_policy)2>::~__shared_ptr() /usr/include/c++/11.3.0/bits/shared_ptr_base.h:1154
    #23 0x527400 in std::shared_ptr<GetSensorConfiguration>::~shared_ptr() /usr/include/c++/11.3.0/bits/shared_ptr.h:122
    #24 0x527400 in GetSensorConfiguration::getPath(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, unsigned int)::{lambda(boost::system::error_code, boost::container::flat_map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::variant<std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, long long, unsigned long long, double, int, unsigned int, short, unsigned short, unsigned char, bool>, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, void>&)#1}::~flat_map() ../../../../../../workspace/sources/dbus-sensors/include/Utils.hpp:227
    #25 0x527400 in sdbusplus::asio::connection::async_method_call_timed<GetSensorConfiguration::getPath(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, unsigned int)::{lambda(boost::system::error_code, boost::container::flat_map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::variant<std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, long long, unsigned long long, double, int, unsigned int, short, unsigned short, unsigned char, bool>, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, void>&)#1}, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >(GetSensorConfiguration::getPath(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, unsigned int)::{lambda(boost::system::error_code, boost::container::flat_map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::variant<std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, long long, unsigned long long, double, int, unsigned int, short, unsigned short, unsigned char, bool>, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, void>&)#1}&&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, unsigned long long, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)::{lambda(boost::system::error_code, sdbusplus::message::message&)#2}::~message() /usr/include/sdbusplus/asio/connection.hpp:144
    #26 0x527400 in sdbusplus::asio::detail::async_send_handler<sdbusplus::asio::connection::async_method_call_timed<GetSensorConfiguration::getPath(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, unsigned int)::{lambda(boost::system::error_code, boost::container::flat_map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::variant<std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, long long, unsigned long long, double, int, unsigned int, short, unsigned short, unsigned char, bool>, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, void>&)#1}, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >(GetSensorConfiguration::getPath(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, unsigned int)::{lambda(boost::system::error_code, boost::container::flat_map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::variant<std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, long long, unsigned long long, double, int, unsigned int, short, unsigned short, unsigned char, bool>, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, void>&)#1}&&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, unsigned long long, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)::{lambda(boost::system::error_code, sdbusplus::message::message&)#2}>::~async_send_handler() /usr/include/sdbusplus/asio/detail/async_send_handler.hpp:31
    #27 0x527400 in std::default_delete<sdbusplus::asio::detail::async_send_handler<sdbusplus::asio::connection::async_method_call_timed<GetSensorConfiguration::getPath(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, unsigned int)::{lambda(boost::system::error_code, boost::container::flat_map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::variant<std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, long long, unsigned long long, double, int, unsigned int, short, unsigned short, unsigned char, bool>, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, void>&)#1}, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >(GetSensorConfiguration::getPath(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, unsigned int)::{lambda(boost::system::error_code, boost::container::flat_map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::variant<std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, long long, unsigned long long, double, int, unsigned int, short, unsigned short, unsigned char, bool>, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, void>&)#1}&&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, unsigned long long, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)::{lambda(boost::system::error_code, sdbusplus::message::message&)#2}> >::operator()(sdbusplus::asio::detail::async_send_handler<sdbusplus::asio::connection::async_method_call_timed<GetSensorConfiguration::getPath(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, unsigned int)::{lambda(boost::system::error_code, boost::container::flat_map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::variant<std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, long long, unsigned long long, double, int, unsigned int, short, unsigned short, unsigned char, bool>, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, void>&)#1}, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >(GetSensorConfiguration::getPath(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, unsigned int)::{lambda(boost::system::error_code, boost::container::flat_map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::variant<std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, long long, unsigned long long, double, int, unsigned int, short, unsigned short, unsigned char, bool>, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, void>&)#1}&&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, unsigned long long, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)::{lambda(boost::system::error_code, sdbusplus::message::message&)#2}>*) const /usr/include/c++/11.3.0/bits/unique_ptr.h:85
    #28 0x527400 in std::default_delete<sdbusplus::asio::detail::async_send_handler<sdbusplus::asio::connection::async_method_call_timed<GetSensorConfiguration::getPath(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, unsigned int)::{lambda(boost::system::error_code, boost::container::flat_map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::variant<std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, long long, unsigned long long, double, int, unsigned int, short, unsigned short, unsigned char, bool>, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, void>&)#1}, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >(GetSensorConfiguration::getPath(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, unsigned int)::{lambda(boost::system::error_code, boost::container::flat_map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::variant<std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, long long, unsigned long long, double, int, unsigned int, short, unsigned short, unsigned char, bool>, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, void>&)#1}&&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, unsigned long long, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)::{lambda(boost::system::error_code, sdbusplus::message::message&)#2}> >::operator()(sdbusplus::asio::detail::async_send_handler<sdbusplus::asio::connection::async_method_call_timed<GetSensorConfiguration::getPath(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, unsigned int)::{lambda(boost::system::error_code, boost::container::flat_map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::variant<std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, long long, unsigned long long, double, int, unsigned int, short, unsigned short, unsigned char, bool>, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, void>&)#1}, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >(GetSensorConfiguration::getPath(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, unsigned int)::{lambda(boost::system::error_code, boost::container::flat_map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::variant<std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, long long, unsigned long long, double, int, unsigned int, short, unsigned short, unsigned char, bool>, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, void>&)#1}&&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, unsigned long long, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)::{lambda(boost::system::error_code, sdbusplus::message::message&)#2}>*) const /usr/include/c++/11.3.0/bits/unique_ptr.h:79
    #29 0x527400 in std::unique_ptr<sdbusplus::asio::detail::async_send_handler<sdbusplus::asio::connection::async_method_call_timed<GetSensorConfiguration::getPath(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, unsigned int)::{lambda(boost::system::error_code, boost::container::flat_map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::variant<std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, long long, unsigned long long, double, int, unsigned int, short, unsigned short, unsigned char, bool>, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, void>&)#1}, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >(GetSensorConfiguration::getPath(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, unsigned int)::{lambda(boost::system::error_code, boost::container::flat_map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::variant<std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, long long, unsigned long long, double, int, unsigned int, short, unsigned short, unsigned char, bool>, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, void>&)#1}&&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, unsigned long long, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)::{lambda(boost::system::error_code, sdbusplus::message::message&)#2}>, std::default_delete<sdbusplus::asio::detail::async_send_handler<sdbusplus::asio::connection::async_method_call_timed<GetSensorConfiguration::getPath(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, unsigned int)::{lambda(boost::system::error_code, boost::container::flat_map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::variant<std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, long long, unsigned long long, double, int, unsigned int, short, unsigned short, unsigned char, bool>, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, void>&)#1}, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >(GetSensorConfiguration::getPath(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, unsigned int)::{lambda(boost::system::error_code, boost::container::flat_map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::variant<std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, long long, unsigned long long, double, int, unsigned int, short, unsigned short, unsigned char, bool>, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, void>&)#1}&&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, unsigned long long, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)::{lambda(boost::system::error_code, sdbusplus::message::message&)#2}> > >::~unique_ptr() /usr/include/c++/11.3.0/bits/unique_ptr.h:361
    #30 0x527400 in sdbusplus::asio::detail::async_send_handler<sdbusplus::asio::connection::async_method_call_timed<GetSensorConfiguration::getPath(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, unsigned int)::{lambda(boost::system::error_code, boost::container::flat_map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::variant<std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, long long, unsigned long long, double, int, unsigned int, short, unsigned short, unsigned char, bool>, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, void>&)#1}, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >(GetSensorConfiguration::getPath(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, unsigned int)::{lambda(boost::system::error_code, boost::container::flat_map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::variant<std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, long long, unsigned long long, double, int, unsigned int, short, unsigned short, unsigned char, bool>, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, void>&)#1}&&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, unsigned long long, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)::{lambda(boost::system::error_code, sdbusplus::message::message&)#2}>::callback(sd_bus_message*, void*, sd_bus_error*) /usr/include/sdbusplus/asio/detail/async_send_handler.hpp:66

previously allocated by thread T0 here:
    #0 0x76a4c784 in operator new(unsigned int) (/tmp/libasan.so.6+0xbc784)
    #1 0x5ba280 in __gnu_cxx::new_allocator<char>::allocate(unsigned int, void const*) /usr/include/c++/11.3.0/ext/new_allocator.h:127
    #2 0x5ba280 in std::allocator<char>::allocate(unsigned int) /usr/include/c++/11.3.0/bits/allocator.h:185
    #3 0x5ba280 in std::allocator_traits<std::allocator<char> >::allocate(std::allocator<char>&, unsigned int) /usr/include/c++/11.3.0/bits/alloc_traits.h:464
    #4 0x5ba280 in std::_Vector_base<char, std::allocator<char> >::_M_allocate(unsigned int) /usr/include/c++/11.3.0/bits/stl_vector.h:346
    #5 0x5ba280 in std::_Vector_base<char, std::allocator<char> >::_M_allocate(unsigned int) /usr/include/c++/11.3.0/bits/stl_vector.h:343
    #6 0x5ba280 in std::vector<char, std::allocator<char> >::_M_default_append(unsigned int) /usr/include/c++/11.3.0/bits/vector.tcc:635
    #7 0x5c819c in std::vector<char, std::allocator<char> >::resize(unsigned int) /usr/include/c++/11.3.0/bits/stl_vector.h:940
    #8 0x5c819c in boost::asio::basic_streambuf<std::allocator<char> >::reserve(unsigned int) /usr/include/boost/asio/basic_streambuf.hpp:335
    #9 0x5dc978 in boost::asio::basic_streambuf<std::allocator<char> >::prepare(unsigned int) /usr/include/boost/asio/basic_streambuf.hpp:217
    #10 0x5dc978 in boost::asio::basic_streambuf_ref<std::allocator<char> >::prepare(unsigned int) /usr/include/boost/asio/basic_streambuf.hpp:428
    #11 0x5dc978 in operator() /usr/include/boost/asio/impl/read_until.hpp:910
    #12 0x5b9550 in operator()<HwmonTempSensor::setupRead()::<lambda(const boost::system::error_code&, std::size_t)>, boost::asio::basic_streambuf_ref<std::allocator<char> > > /usr/include/boost/asio/impl/read_until.hpp:1044
    #13 0x5b9550 in initiate<boost::asio::detail::initiate_async_read_until_delim_v1<boost::asio::posix::basic_stream_descriptor<> >, HwmonTempSensor::setupRead()::<lambda(const boost::system::error_code&, std::size_t)>, boost::asio::basic_streambuf_ref<std::allocator<char> >, char&> /usr/include/boost/asio/async_result.hpp:482
    #14 0x5b9550 in async_initiate<HwmonTempSensor::setupRead()::<lambda(const boost::system::error_code&, std::size_t)>, void(boost::system::error_code, unsigned int), boost::asio::detail::initiate_async_read_until_delim_v1<boost::asio::posix::basic_stream_descriptor<> >, boost::asio::basic_streambuf_ref<std::allocator<char> >, char&> /usr/include/boost/asio/async_result.hpp:862
    #15 0x5b9550 in async_read_until<boost::asio::posix::basic_stream_descriptor<>, boost::asio::basic_streambuf_ref<std::allocator<char> >, HwmonTempSensor::setupRead()::<lambda(const boost::system::error_code&, std::size_t)> > /usr/include/boost/asio/impl/read_until.hpp:1090
    #16 0x5b9550 in async_read_until<boost::asio::posix::basic_stream_descriptor<>, std::allocator<char>, HwmonTempSensor::setupRead()::<lambda(const boost::system::error_code&, std::size_t)> > /usr/include/boost/asio/impl/read_until.hpp:2028
    #17 0x5b9550 in HwmonTempSensor::setupRead() ../../../../../../workspace/sources/dbus-sensors/src/HwmonTempSensor.cpp:113
    #18 0x4fd324 in operator() ../../../../../../workspace/sources/dbus-sensors/src/HwmonTempMain.cpp:468
    #19 0x598b68 in std::function<void (sdbusplus::message::message&)>::operator()(sdbusplus::message::message&) const /usr/include/c++/11.3.0/bits/std_function.h:590
    #20 0x598b68 in GetSensorConfiguration::~GetSensorConfiguration() ../../../../../../workspace/sources/dbus-sensors/include/Utils.hpp:321
    #21 0x598b68 in void std::destroy_at<GetSensorConfiguration>(GetSensorConfiguration*) /usr/include/c++/11.3.0/bits/stl_construct.h:88
    #22 0x598b68 in void std::allocator_traits<std::allocator<GetSensorConfiguration> >::destroy<GetSensorConfiguration>(std::allocator<GetSensorConfiguration>&, GetSensorConfiguration*) /usr/include/c++/11.3.0/bits/alloc_traits.h:537
    #23 0x598b68 in std::_Sp_counted_ptr_inplace<GetSensorConfiguration, std::allocator<GetSensorConfiguration>, (__gnu_cxx::_Lock_policy)2>::_M_dispose() /usr/include/c++/11.3.0/bits/shared_ptr_base.h:528
    #24 0x4f4c48 in std::_Sp_counted_base<(__gnu_cxx::_Lock_policy)2>::_M_release() /usr/include/c++/11.3.0/bits/shared_ptr_base.h:168
    #25 0x527400 in std::__shared_count<(__gnu_cxx::_Lock_policy)2>::~__shared_count() /usr/include/c++/11.3.0/bits/shared_ptr_base.h:705
    #26 0x527400 in std::__shared_ptr<GetSensorConfiguration, (__gnu_cxx::_Lock_policy)2>::~__shared_ptr() /usr/include/c++/11.3.0/bits/shared_ptr_base.h:1154
    #27 0x527400 in std::shared_ptr<GetSensorConfiguration>::~shared_ptr() /usr/include/c++/11.3.0/bits/shared_ptr.h:122
    #28 0x527400 in GetSensorConfiguration::getPath(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, unsigned int)::{lambda(boost::system::error_code, boost::container::flat_map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::variant<std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, long long, unsigned long long, double, int, unsigned int, short, unsigned short, unsigned char, bool>, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, void>&)#1}::~flat_map() ../../../../../../workspace/sources/dbus-sensors/include/Utils.hpp:227
    #29 0x527400 in sdbusplus::asio::connection::async_method_call_timed<GetSensorConfiguration::getPath(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, unsigned int)::{lambda(boost::system::error_code, boost::container::flat_map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::variant<std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, long long, unsigned long long, double, int, unsigned int, short, unsigned short, unsigned char, bool>, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, void>&)#1}, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >(GetSensorConfiguration::getPath(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, unsigned int)::{lambda(boost::system::error_code, boost::container::flat_map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::variant<std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, long long, unsigned long long, double, int, unsigned int, short, unsigned short, unsigned char, bool>, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, void>&)#1}&&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, unsigned long long, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)::{lambda(boost::system::error_code, sdbusplus::message::message&)#2}::~message() /usr/include/sdbusplus/asio/connection.hpp:144
    #30 0x527400 in sdbusplus::asio::detail::async_send_handler<sdbusplus::asio::connection::async_method_call_timed<GetSensorConfiguration::getPath(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, unsigned int)::{lambda(boost::system::error_code, boost::container::flat_map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::variant<std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, long long, unsigned long long, double, int, unsigned int, short, unsigned short, unsigned char, bool>, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, void>&)#1}, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >(GetSensorConfiguration::getPath(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, unsigned int)::{lambda(boost::system::error_code, boost::container::flat_map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::variant<std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, long long, unsigned long long, double, int, unsigned int, short, unsigned short, unsigned char, bool>, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, void>&)#1}&&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, unsigned long long, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)::{lambda(boost::system::error_code, sdbusplus::message::message&)#2}>::~async_send_handler() /usr/include/sdbusplus/asio/detail/async_send_handler.hpp:31
    #31 0x527400 in std::default_delete<sdbusplus::asio::detail::async_send_handler<sdbusplus::asio::connection::async_method_call_timed<GetSensorConfiguration::getPath(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, unsigned int)::{lambda(boost::system::error_code, boost::container::flat_map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::variant<std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, long long, unsigned long long, double, int, unsigned int, short, unsigned short, unsigned char, bool>, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, void>&)#1}, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >(GetSensorConfiguration::getPath(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, unsigned int)::{lambda(boost::system::error_code, boost::container::flat_map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::variant<std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, long long, unsigned long long, double, int, unsigned int, short, unsigned short, unsigned char, bool>, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, void>&)#1}&&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, unsigned long long, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)::{lambda(boost::system::error_code, sdbusplus::message::message&)#2}> >::operator()(sdbusplus::asio::detail::async_send_handler<sdbusplus::asio::connection::async_method_call_timed<GetSensorConfiguration::getPath(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, unsigned int)::{lambda(boost::system::error_code, boost::container::flat_map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::variant<std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, long long, unsigned long long, double, int, unsigned int, short, unsigned short, unsigned char, bool>, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, void>&)#1}, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >(GetSensorConfiguration::getPath(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, unsigned int)::{lambda(boost::system::error_code, boost::container::flat_map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::variant<std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, long long, unsigned long long, double, int, unsigned int, short, unsigned short, unsigned char, bool>, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, void>&)#1}&&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, unsigned long long, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)::{lambda(boost::system::error_code, sdbusplus::message::message&)#2}>*) const /usr/include/c++/11.3.0/bits/unique_ptr.h:85
    #32 0x527400 in std::default_delete<sdbusplus::asio::detail::async_send_handler<sdbusplus::asio::connection::async_method_call_timed<GetSensorConfiguration::getPath(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, unsigned int)::{lambda(boost::system::error_code, boost::container::flat_map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::variant<std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, long long, unsigned long long, double, int, unsigned int, short, unsigned short, unsigned char, bool>, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, void>&)#1}, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >(GetSensorConfiguration::getPath(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, unsigned int)::{lambda(boost::system::error_code, boost::container::flat_map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::variant<std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, long long, unsigned long long, double, int, unsigned int, short, unsigned short, unsigned char, bool>, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, void>&)#1}&&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, unsigned long long, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)::{lambda(boost::system::error_code, sdbusplus::message::message&)#2}> >::operator()(sdbusplus::asio::detail::async_send_handler<sdbusplus::asio::connection::async_method_call_timed<GetSensorConfiguration::getPath(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, unsigned int)::{lambda(boost::system::error_code, boost::container::flat_map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::variant<std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, long long, unsigned long long, double, int, unsigned int, short, unsigned short, unsigned char, bool>, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, void>&)#1}, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >(GetSensorConfiguration::getPath(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, unsigned int)::{lambda(boost::system::error_code, boost::container::flat_map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::variant<std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, long long, unsigned long long, double, int, unsigned int, short, unsigned short, unsigned char, bool>, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, void>&)#1}&&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, unsigned long long, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)::{lambda(boost::system::error_code, sdbusplus::message::message&)#2}>*) const /usr/include/c++/11.3.0/bits/unique_ptr.h:79
    #33 0x527400 in std::unique_ptr<sdbusplus::asio::detail::async_send_handler<sdbusplus::asio::connection::async_method_call_timed<GetSensorConfiguration::getPath(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, unsigned int)::{lambda(boost::system::error_code, boost::container::flat_map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::variant<std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, long long, unsigned long long, double, int, unsigned int, short, unsigned short, unsigned char, bool>, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, void>&)#1}, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >(GetSensorConfiguration::getPath(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, unsigned int)::{lambda(boost::system::error_code, boost::container::flat_map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::variant<std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, long long, unsigned long long, double, int, unsigned int, short, unsigned short, unsigned char, bool>, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, void>&)#1}&&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, unsigned long long, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)::{lambda(boost::system::error_code, sdbusplus::message::message&)#2}>, std::default_delete<sdbusplus::asio::detail::async_send_handler<sdbusplus::asio::connection::async_method_call_timed<GetSensorConfiguration::getPath(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, unsigned int)::{lambda(boost::system::error_code, boost::container::flat_map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::variant<std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, long long, unsigned long long, double, int, unsigned int, short, unsigned short, unsigned char, bool>, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, void>&)#1}, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >(GetSensorConfiguration::getPath(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, unsigned int)::{lambda(boost::system::error_code, boost::container::flat_map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::variant<std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, long long, unsigned long long, double, int, unsigned int, short, unsigned short, unsigned char, bool>, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, void>&)#1}&&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, unsigned long long, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)::{lambda(boost::system::error_code, sdbusplus::message::message&)#2}> > >::~unique_ptr() /usr/include/c++/11.3.0/bits/unique_ptr.h:361
    #34 0x527400 in sdbusplus::asio::detail::async_send_handler<sdbusplus::asio::connection::async_method_call_timed<GetSensorConfiguration::getPath(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, unsigned int)::{lambda(boost::system::error_code, boost::container::flat_map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::variant<std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, long long, unsigned long long, double, int, unsigned int, short, unsigned short, unsigned char, bool>, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, void>&)#1}, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >(GetSensorConfiguration::getPath(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, unsigned int)::{lambda(boost::system::error_code, boost::container::flat_map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::variant<std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, long long, unsigned long long, double, int, unsigned int, short, unsigned short, unsigned char, bool>, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, void>&)#1}&&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, unsigned long long, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)::{lambda(boost::system::error_code, sdbusplus::message::message&)#2}>::callback(sd_bus_message*, void*, sd_bus_error*) /usr/include/sdbusplus/asio/detail/async_send_handler.hpp:66

SUMMARY: AddressSanitizer: heap-use-after-free /usr/include/c++/11.3.0/bits/predefined_ops.h:270 in bool __gnu_cxx::__ops::_Iter_equals_val<char const>::operator()<boost::asio::buffers_iterator<boost::asio::const_buffers_1, char> >(boost::asio::buffers_iterator<boost::asio::const_buffers_1, char>)
Shadow bytes around the buggy address:
  0x2e790a00: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
  0x2e790a10: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
  0x2e790a20: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
  0x2e790a30: 00 00 00 00 00 00 00 00 00 00 fa fa fa fa fa fa
  0x2e790a40: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
=>0x2e790a50:[fd]fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd
  0x2e790a60: fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd
  0x2e790a70: fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd
  0x2e790a80: fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd
  0x2e790a90: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
  0x2e790aa0: fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd
Shadow byte legend (one shadow byte represents 8 application bytes):
  Addressable:           00
  Partially addressable: 01 02 03 04 05 06 07
  Heap left redzone:       fa
  Freed heap region:       fd
  Stack left redzone:      f1
  Stack mid redzone:       f2
  Stack right redzone:     f3
  Stack after return:      f5
  Stack use after scope:   f8
  Global redzone:          f9
  Global init order:       f6
  Poisoned by user:        f7
  Container overflow:      fc
  Array cookie:            ac
  Intra object redzone:    bb
  ASan internal:           fe
  Left alloca redzone:     ca
  Right alloca redzone:    cb
  Shadow gap:              cc
==31018==ABORTING
zevweiss commented 2 years ago

I reproduced it again with the following patch to add some tracking of what's going on:

diff --git a/meson.build b/meson.build
index dd675b8c98de..19001f01f907 100644
--- a/meson.build
+++ b/meson.build
@@ -32,6 +32,7 @@ add_project_arguments(
     '-DBOOST_ALL_NO_LIB',
     '-DBOOST_ASIO_DISABLE_THREADS',
     '-DBOOST_ALLOW_DEPRECATED_HEADERS',
+    '-DBOOST_ASIO_ENABLE_HANDLER_TRACKING',
     language: 'cpp',
 )

diff --git a/src/HwmonTempSensor.cpp b/src/HwmonTempSensor.cpp
index 7eb5e8fc1196..f34fe01efa1c 100644
--- a/src/HwmonTempSensor.cpp
+++ b/src/HwmonTempSensor.cpp
@@ -88,6 +88,7 @@ HwmonTempSensor::HwmonTempSensor(

 HwmonTempSensor::~HwmonTempSensor()
 {
+    fprintf(stderr, "~HwmonTempSensor(%p, inputDev=%p)\n", (void*)this, (void*)&inputDev);
     // close the input dev to cancel async operations
     inputDev.close();
     waitTimer.cancel();
@@ -97,6 +98,7 @@ HwmonTempSensor::~HwmonTempSensor()
     }
     objServer.remove_interface(sensorInterface);
     objServer.remove_interface(association);
+    fprintf(stderr, "~HwmonTempSensor(%p) done\n", (void*)this);
 }

 void HwmonTempSensor::setupRead(void)

The full resulting dump is attached here. Annotating a relevant-looking portion toward the end:

...
    420 @asio|1658780727.500022|>99|ec=system:0
    421 @asio|1658780727.500369|99^117|in 'async_read_until' (/usr/src/debug/dbus-sensors/0.1+git999-r0/recipe-sysroot/usr/include/boost/asio/:909)
    422 @asio|1658780727.500369|99*117|descriptor@0x73c0ea5c.async_read_some # handler 117 created
    423 @asio|1658780727.500793|<99|
    424 @asio|1658780727.511663|>113|
    425 ~HwmonTempSensor(0x73c0f810, inputDev=0x73c0f958)
    426 @asio|1658780745.566319|113|descriptor@0x73c0f95c.close
    427 @asio|1658780745.568109|113|deadline_timer@0x73c0f978.cancel
    428 ~HwmonTempSensor(0x73c0f810) done
    429 @asio|1658780746.800263|113^118|in 'async_read_until' (/usr/src/debug/dbus-sensors/0.1+git999-r0/recipe-sysroot/usr/include/boost/asio/:909)
    430 @asio|1658780746.800263|113*118|descriptor@0x73c1a35c.async_read_some
    431 ~HwmonTempSensor(0x73c0e910, inputDev=0x73c0ea58)
    432 @asio|1658780746.801711|113|descriptor@0x73c0ea5c.close # descriptor for handler 117 closed
    433 @asio|1658780746.815146|113|deadline_timer@0x73c0ea78.cancel
    434 ~HwmonTempSensor(0x73c0e910) done
    435 @asio|1658780747.881132|113^119|in 'async_read_until' (/usr/src/debug/dbus-sensors/0.1+git999-r0/recipe-sysroot/usr/include/boost/asio/:909)
    436 @asio|1658780747.881132|113*119|descriptor@0x73c1945c.async_read_some
    437 ~HwmonTempSensor(0x73c0dc90, inputDev=0x73c0ddd8)
    438 @asio|1658780748.012149|113|descriptor@0x73c0dddc.close
    439 @asio|1658780748.012529|113|deadline_timer@0x73c0ddf8.cancel
    440 ~HwmonTempSensor(0x73c0dc90) done
    441 @asio|1658780749.360577|113^120|in 'async_read_until' (/usr/src/debug/dbus-sensors/0.1+git999-r0/recipe-sysroot/usr/include/boost/asio/:909)
    442 @asio|1658780749.360577|113*120|descriptor@0x73c187dc.async_read_some
    443 ~HwmonTempSensor(0x73c0cb10, inputDev=0x73c0cc58)
    444 @asio|1658780749.362053|113|descriptor@0x73c0cc5c.close
    445 @asio|1658780749.362425|113|deadline_timer@0x73c0cc78.cancel
    446 ~HwmonTempSensor(0x73c0cb10) done
    447 @asio|1658780750.406205|113^121|in 'async_read_until' (/usr/src/debug/dbus-sensors/0.1+git999-r0/recipe-sysroot/usr/include/boost/asio/:909)
    448 @asio|1658780750.406205|113*121|descriptor@0x73c178dc.async_read_some
    449 ~HwmonTempSensor(0x73c0c110, inputDev=0x73c0c258)
    450 @asio|1658780750.407679|113|descriptor@0x73c0c25c.close
    451 @asio|1658780750.408051|113|deadline_timer@0x73c0c278.cancel
    452 ~HwmonTempSensor(0x73c0c110) done
    453 @asio|1658780751.444188|113^122|in 'async_read_until' (/usr/src/debug/dbus-sensors/0.1+git999-r0/recipe-sysroot/usr/include/boost/asio/:909)
    454 @asio|1658780751.444188|113*122|descriptor@0x73c1ebdc.async_read_some
    455 ~HwmonTempSensor(0x73c13190, inputDev=0x73c132d8)
    456 @asio|1658780751.561851|113|descriptor@0x73c132dc.close
    457 @asio|1658780751.562224|113|deadline_timer@0x73c132f8.cancel
    458 ~HwmonTempSensor(0x73c13190) done
    459 @asio|1658780752.380922|113^123|in 'async_read_until' (/usr/src/debug/dbus-sensors/0.1+git999-r0/recipe-sysroot/usr/include/boost/asio/:909)
    460 @asio|1658780752.380922|113*123|descriptor@0x73c1df5c.async_read_some
    461 ~HwmonTempSensor(0x73c11b10, inputDev=0x73c11c58)
    462 @asio|1658780752.387451|113|descriptor@0x73c11c5c.close
    463 @asio|1658780752.387824|113|deadline_timer@0x73c11c78.cancel
    464 ~HwmonTempSensor(0x73c11b10) done
    465 @asio|1658780752.999959|113^124|in 'async_read_until' (/usr/src/debug/dbus-sensors/0.1+git999-r0/recipe-sysroot/usr/include/boost/asio/:909)
    466 @asio|1658780752.999959|113*124|descriptor@0x73c1cb5c.async_read_some
    467 @asio|1658780753.113799|113*125|io_context@0x7eb068b0.execute
    468 @asio|1658780753.114080|<113|
    469 @asio|1658780753.114522|>117|ec=system:0,bytes_transferred=6 # handler 117 entered
    470 =================================================================
    471 ==1593==ERROR: AddressSanitizer: heap-use-after-free on address 0x73c0df00 at pc 0x005c2294 bp 0x7eb0514c sp 0x7eb05138
...

So:

  1. At line 422 we see handler 117 created for descriptor 0x73c0ea5c
  2. At line 432 we see descriptor 0x73c0ea5c closed
  3. At line 469 handler 117 is invoked

It looks like the documented behavior of boost::asio::posix::stream_descriptor::close() isn't actually happening, as far as I can see? (No ~ actions or handlers receiving boost::asio::error::operation_aborted in the asio trace.)

zevweiss commented 2 years ago

As an experiment I tried running with the following patch to re-do hwmontempsensor's read buffering as in this patch by @edtanous and have thus far been unable to reproduce the problem.

diff --git a/include/HwmonTempSensor.hpp b/include/HwmonTempSensor.hpp
index 8e478fca280a..ee26b24a5f08 100644
--- a/include/HwmonTempSensor.hpp
+++ b/include/HwmonTempSensor.hpp
@@ -1,7 +1,7 @@
 #pragma once

 #include <Thresholds.hpp>
-#include <boost/asio/streambuf.hpp>
+#include <boost/asio/random_access_file.hpp>
 #include <sdbusplus/asio/object_server.hpp>
 #include <sensor.hpp>

@@ -36,15 +36,15 @@ class HwmonTempSensor :

   private:
     sdbusplus::asio::object_server& objServer;
-    boost::asio::streambuf readBuf;
-    boost::asio::posix::stream_descriptor inputDev;
+    std::array<char, 128> readBuf;
+    boost::asio::random_access_file inputDev;
     boost::asio::deadline_timer waitTimer;
     std::string path;
     double offsetValue;
     double scaleValue;
     unsigned int sensorPollMs;

-    void handleResponse(const boost::system::error_code& err);
+    void handleResponse(const boost::system::error_code& err, size_t bytesTransferred);
     void restartRead();
     void checkThresholds(void) override;
 };
diff --git a/src/HwmonTempSensor.cpp b/src/HwmonTempSensor.cpp
index f34fe01efa1c..b478303a1588 100644
--- a/src/HwmonTempSensor.cpp
+++ b/src/HwmonTempSensor.cpp
@@ -23,6 +23,7 @@
 #include <sdbusplus/asio/connection.hpp>
 #include <sdbusplus/asio/object_server.hpp>

+#include <charconv>
 #include <iostream>
 #include <istream>
 #include <limits>
@@ -51,20 +52,12 @@ HwmonTempSensor::HwmonTempSensor(
            std::move(thresholdsIn), sensorConfiguration, objectType, false,
            false, thisSensorParameters.maxValue, thisSensorParameters.minValue,
            conn, powerState),
-    objServer(objectServer), inputDev(io), waitTimer(io), path(path),
+    objServer(objectServer), inputDev(io, path, boost::asio::random_access_file::read_only),
+    waitTimer(io), path(path),
     offsetValue(thisSensorParameters.offsetValue),
     scaleValue(thisSensorParameters.scaleValue),
     sensorPollMs(static_cast<unsigned int>(pollRate * 1000))
 {
-    // NOLINTNEXTLINE(cppcoreguidelines-pro-type-vararg)
-    int fd = open(path.c_str(), O_RDONLY);
-    if (fd < 0)
-    {
-        std::cerr << "HwmonTempSensor " << sensorName << " failed to open "
-                  << path << "\n";
-    }
-    inputDev.assign(fd);
-
     sensorInterface = objectServer.add_interface(
         "/xyz/openbmc_project/sensors/" + thisSensorParameters.typeName + "/" +
             name,
@@ -112,13 +105,13 @@ void HwmonTempSensor::setupRead(void)
     }

     std::weak_ptr<HwmonTempSensor> weakRef = weak_from_this();
-    boost::asio::async_read_until(inputDev, readBuf, '\n',
-                                  [weakRef](const boost::system::error_code& ec,
-                                            std::size_t /*bytes_transfered*/) {
+    inputDev.async_read_some_at(0, boost::asio::buffer(readBuf),
+                                [weakRef](const boost::system::error_code& ec,
+                                          std::size_t bytesTransferred) {
         std::shared_ptr<HwmonTempSensor> self = weakRef.lock();
         if (self)
         {
-            self->handleResponse(ec);
+            self->handleResponse(ec, bytesTransferred);
         }
     });
 }
@@ -141,7 +134,7 @@ void HwmonTempSensor::restartRead()
     });
 }

-void HwmonTempSensor::handleResponse(const boost::system::error_code& err)
+void HwmonTempSensor::handleResponse(const boost::system::error_code& err, size_t bytesTransferred)
 {
     if ((err == boost::system::errc::bad_file_descriptor) ||
         (err == boost::asio::error::misc_errors::not_found))
@@ -150,20 +143,19 @@ void HwmonTempSensor::handleResponse(const boost::system::error_code& err)
                   << "\n";
         return; // we're being destroyed
     }
-    std::istream responseStream(&readBuf);
+
     if (!err)
     {
-        std::string response;
-        std::getline(responseStream, response);
-        try
+        const char* bufEnd = readBuf.data() + bytesTransferred;
+        int nvalue = 0;
+        std::from_chars_result ret = std::from_chars(readBuf.data(), bufEnd, nvalue);
+        if (ret.ec != std::errc())
         {
-            rawValue = std::stod(response);
-            double nvalue = (rawValue + offsetValue) * scaleValue;
-            updateValue(nvalue);
+            incrementError();
         }
-        catch (const std::invalid_argument&)
+        else
         {
-            incrementError();
+            updateValue((nvalue + offsetValue) * scaleValue);
         }
     }
     else
@@ -171,7 +163,6 @@ void HwmonTempSensor::handleResponse(const boost::system::error_code& err)
         incrementError();
     }

-    responseStream.clear();
     inputDev.close();

     // NOLINTNEXTLINE(cppcoreguidelines-pro-type-vararg)

I would certainly like to understand what's going wrong with the existing buffering scheme (ASIO bug? some subtle misuse of its API?), but this might be a viable alternative that was probably likely to get done at some point in the not-too-distant future anyway.

edtanous commented 2 years ago

I would certainly like to understand what's going wrong with the existing buffering scheme

IMO if we have a fix, and it has no downsides, we should just fix it on master, then chasing down the old bug becomes an academic exercise, which, we might want to do for learning on how to not find that issue again, but in the meantime, the core issue is fixed.

Get the above patch submitted to gerrit, and lets see if we can get it cleaned up and on master.

zevweiss commented 2 years ago

Patch posted here: https://gerrit.openbmc.org/c/openbmc/dbus-sensors/+/56019

zevweiss commented 2 years ago

While the root cause remains mysterious, commit d1c8f44 appears to resolve this.