Bug 476749 - multiple memory leaks in udisks2 backend caching
Summary: multiple memory leaks in udisks2 backend caching
Status: REPORTED
Alias: None
Product: frameworks-solid
Classification: Frameworks and Libraries
Component: general (show other bugs)
Version: unspecified
Platform: Other Linux
: NOR normal
Target Milestone: ---
Assignee: Unassigned bugs mailing-list
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2023-11-09 11:09 UTC by Milian Wolff
Modified: 2023-11-09 11:09 UTC (History)
2 users (show)

See Also:
Latest Commit:
Version Fixed In:
Sentry Crash Report:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Milian Wolff 2023-11-09 11:09:19 UTC
SUMMARY

Solid's b2d5036acf5f8edf8ec859b1b46b06e5d5e12767 tag: v5.245.0 suffers from multiple memory leaks in the caching of its udisks2 backends

STEPS TO REPRODUCE
1. compile solid with asan/lsan
2. run it against udisks2
3. call Solid::Device::listFromType

OBSERVED RESULT

```
==218628==ERROR: LeakSanitizer: detected memory leaks

Indirect leak of 2024 byte(s) in 23 object(s) allocated from:
    #0 0x7f07c3ee2002 in operator new(unsigned long) /usr/src/debug/gcc/gcc/libsanitizer/asan/asan_new_delete.cpp:95
    #1 0x7f073ea563ee in std::__new_allocator<std::_Rb_tree_node<std::pair<QString const, QVariant> > >::allocate(unsigned long, void const*) /usr/include/c++/13.2.1/bits/new_allocator.h:147
    #2 0x7f073ea53f19 in std::allocator<std::_Rb_tree_node<std::pair<QString const, QVariant> > >::allocate(unsigned long) /usr/include/c++/13.2.1/bits/allocator.h:198
    #3 0x7f073ea53f19 in std::allocator_traits<std::allocator<std::_Rb_tree_node<std::pair<QString const, QVariant> > > >::allocate(std::allocator<std::_Rb_tree_node<std::pair<QString const, QVariant> > >&, unsigned long) /usr/include/c++/13.2.1/bits/alloc_traits.h:482
    #4 0x7f073ea53f19 in std::_Rb_tree<QString, std::pair<QString const, QVariant>, std::_Select1st<std::pair<QString const, QVariant> >, std::less<QString>, std::allocator<std::pair<QString const, QVariant> > >::_M_get_node() /usr/include/c++/13.2.1/bits/stl_tree.h:563
    #5 0x7f073ea81226 in std::_Rb_tree_node<std::pair<QString const, QVariant> >* std::_Rb_tree<QString, std::pair<QString const, QVariant>, std::_Select1st<std::pair<QString const, QVariant> >, std::less<QString>, std::allocator<std::pair<QString const, QVariant> > >::_M_create_node<std::piecewise_construct_t const&, std::tuple<QString const&>, std::tuple<QVariant const&> >(std::piecewise_construct_t const&, std::tuple<QString const&>&&, std::tuple<QVariant const&>&&) /usr/include/c++/13.2.1/bits/stl_tree.h:613
    #6 0x7f073ea7f80e in std::_Rb_tree<QString, std::pair<QString const, QVariant>, std::_Select1st<std::pair<QString const, QVariant> >, std::less<QString>, std::allocator<std::pair<QString const, QVariant> > >::_Auto_node::_Auto_node<std::piecewise_construct_t const&, std::tuple<QString const&>, std::tuple<QVariant const&> >(std::_Rb_tree<QString, std::pair<QString const, QVariant>, std::_Select1st<std::pair<QString const, QVariant> >, std::less<QString>, std::allocator<std::pair<QString const, QVariant> > >&, std::piecewise_construct_t const&, std::tuple<QString const&>&&, std::tuple<QVariant const&>&&) /usr/include/c++/13.2.1/bits/stl_tree.h:1637
    #7 0x7f073ea7b4fd in std::_Rb_tree_iterator<std::pair<QString const, QVariant> > std::_Rb_tree<QString, std::pair<QString const, QVariant>, std::_Select1st<std::pair<QString const, QVariant> >, std::less<QString>, std::allocator<std::pair<QString const, QVariant> > >::_M_emplace_hint_unique<std::piecewise_construct_t const&, std::tuple<QString const&>, std::tuple<QVariant const&> >(std::_Rb_tree_const_iterator<std::pair<QString const, QVariant> >, std::piecewise_construct_t const&, std::tuple<QString const&>&&, std::tuple<QVariant const&>&&) /usr/include/c++/13.2.1/bits/stl_tree.h:2462
    #8 0x7f073ea76566 in std::_Rb_tree_iterator<std::pair<QString const, QVariant> > std::map<QString, QVariant, std::less<QString>, std::allocator<std::pair<QString const, QVariant> > >::emplace_hint<std::piecewise_construct_t const&, std::tuple<QString const&>, std::tuple<QVariant const&> >(std::_Rb_tree_const_iterator<std::pair<QString const, QVariant> >, std::piecewise_construct_t const&, std::tuple<QString const&>&&, std::tuple<QVariant const&>&&) /usr/include/c++/13.2.1/bits/stl_map.h:640
    #9 0x7f073ea70eca in std::pair<std::_Rb_tree_iterator<std::pair<QString const, QVariant> >, bool> std::map<QString, QVariant, std::less<QString>, std::allocator<std::pair<QString const, QVariant> > >::insert_or_assign<QVariant const&>(QString const&, QVariant const&) /usr/include/c++/13.2.1/bits/stl_map.h:973
    #10 0x7f073ea6d189 in QMap<QString, QVariant>::insert(QString const&, QVariant const&) /home/milian/Qt/6.5.2/gcc_64/include/QtCore/qmap.h:692
    #11 0x7f073ebd56ec in Solid::Backends::UDisks2::DeviceBackend::cacheProperty(QString const&, QVariant const&) const solid6/src/solid/devices/backends/udisks2/udisksdevicebackend.cpp:266
    #12 0x7f073ebd1e83 in Solid::Backends::UDisks2::DeviceBackend::allProperties() const solid6/src/solid/devices/backends/udisks2/udisksdevicebackend.cpp:141
    #13 0x7f073ebd3164 in Solid::Backends::UDisks2::DeviceBackend::checkCache(QString const&) const solid6/src/solid/devices/backends/udisks2/udisksdevicebackend.cpp:172
    #14 0x7f073ebd0d63 in Solid::Backends::UDisks2::DeviceBackend::prop(QString const&) const solid6/src/solid/devices/backends/udisks2/udisksdevicebackend.cpp:114
    #15 0x7f073eba69ad in Solid::Backends::UDisks2::Device::prop(QString const&) const solid6/src/solid/devices/backends/udisks2/udisksdevice.cpp:118
    #16 0x7f073ebbd25d in Solid::Backends::UDisks2::Device::drivePath() const solid6/src/solid/devices/backends/udisks2/udisksdevice.cpp:884
    #17 0x7f073ebbb88d in Solid::Backends::UDisks2::Device::mightBeOpticalDisc() const solid6/src/solid/devices/backends/udisks2/udisksdevice.cpp:833
    #18 0x7f073eb290e6 in Solid::Backends::UDisks2::Manager::introspect(QString const&, bool) solid6/src/solid/devices/backends/udisks2/udisksmanager.cpp:143
    #19 0x7f073eb27cf7 in Solid::Backends::UDisks2::Manager::allDevices() solid6/src/solid/devices/backends/udisks2/udisksmanager.cpp:119
    #20 0x7f073eb2d1ad in Solid::Backends::UDisks2::Manager::deviceCache() solid6/src/solid/devices/backends/udisks2/udisksmanager.cpp:282
    #21 0x7f073eb26ec6 in Solid::Backends::UDisks2::Manager::devicesFromQuery(QString const&, Solid::DeviceInterface::Type) solid6/src/solid/devices/backends/udisks2/udisksmanager.cpp:90
    #22 0x7f073e8f8605 in Solid::Device::listFromType(Solid::DeviceInterface::Type const&, QString const&) solid6/src/solid/devices/frontend/devicemanager.cpp:107

Indirect leak of 176 byte(s) in 2 object(s) allocated from:
    #0 0x7f07c3ee2002 in operator new(unsigned long) /usr/src/debug/gcc/gcc/libsanitizer/asan/asan_new_delete.cpp:95
    #1 0x7f073ea563ee in std::__new_allocator<std::_Rb_tree_node<std::pair<QString const, QVariant> > >::allocate(unsigned long, void const*) /usr/include/c++/13.2.1/bits/new_allocator.h:147
    #2 0x7f073ea53f19 in std::allocator<std::_Rb_tree_node<std::pair<QString const, QVariant> > >::allocate(unsigned long) /usr/include/c++/13.2.1/bits/allocator.h:198
    #3 0x7f073ea53f19 in std::allocator_traits<std::allocator<std::_Rb_tree_node<std::pair<QString const, QVariant> > > >::allocate(std::allocator<std::_Rb_tree_node<std::pair<QString const, QVariant> > >&, unsigned long) /usr/include/c++/13.2.1/bits/alloc_traits.h:482
    #4 0x7f073ea53f19 in std::_Rb_tree<QString, std::pair<QString const, QVariant>, std::_Select1st<std::pair<QString const, QVariant> >, std::less<QString>, std::allocator<std::pair<QString const, QVariant> > >::_M_get_node() /usr/include/c++/13.2.1/bits/stl_tree.h:563
    #5 0x7f073ea81226 in std::_Rb_tree_node<std::pair<QString const, QVariant> >* std::_Rb_tree<QString, std::pair<QString const, QVariant>, std::_Select1st<std::pair<QString const, QVariant> >, std::less<QString>, std::allocator<std::pair<QString const, QVariant> > >::_M_create_node<std::piecewise_construct_t const&, std::tuple<QString const&>, std::tuple<QVariant const&> >(std::piecewise_construct_t const&, std::tuple<QString const&>&&, std::tuple<QVariant const&>&&) /usr/include/c++/13.2.1/bits/stl_tree.h:613
    #6 0x7f073ea7f80e in std::_Rb_tree<QString, std::pair<QString const, QVariant>, std::_Select1st<std::pair<QString const, QVariant> >, std::less<QString>, std::allocator<std::pair<QString const, QVariant> > >::_Auto_node::_Auto_node<std::piecewise_construct_t const&, std::tuple<QString const&>, std::tuple<QVariant const&> >(std::_Rb_tree<QString, std::pair<QString const, QVariant>, std::_Select1st<std::pair<QString const, QVariant> >, std::less<QString>, std::allocator<std::pair<QString const, QVariant> > >&, std::piecewise_construct_t const&, std::tuple<QString const&>&&, std::tuple<QVariant const&>&&) /usr/include/c++/13.2.1/bits/stl_tree.h:1637
    #7 0x7f073ea7b4fd in std::_Rb_tree_iterator<std::pair<QString const, QVariant> > std::_Rb_tree<QString, std::pair<QString const, QVariant>, std::_Select1st<std::pair<QString const, QVariant> >, std::less<QString>, std::allocator<std::pair<QString const, QVariant> > >::_M_emplace_hint_unique<std::piecewise_construct_t const&, std::tuple<QString const&>, std::tuple<QVariant const&> >(std::_Rb_tree_const_iterator<std::pair<QString const, QVariant> >, std::piecewise_construct_t const&, std::tuple<QString const&>&&, std::tuple<QVariant const&>&&) /usr/include/c++/13.2.1/bits/stl_tree.h:2462
    #8 0x7f073ea76566 in std::_Rb_tree_iterator<std::pair<QString const, QVariant> > std::map<QString, QVariant, std::less<QString>, std::allocator<std::pair<QString const, QVariant> > >::emplace_hint<std::piecewise_construct_t const&, std::tuple<QString const&>, std::tuple<QVariant const&> >(std::_Rb_tree_const_iterator<std::pair<QString const, QVariant> >, std::piecewise_construct_t const&, std::tuple<QString const&>&&, std::tuple<QVariant const&>&&) /usr/include/c++/13.2.1/bits/stl_map.h:640
    #9 0x7f073ea70eca in std::pair<std::_Rb_tree_iterator<std::pair<QString const, QVariant> >, bool> std::map<QString, QVariant, std::less<QString>, std::allocator<std::pair<QString const, QVariant> > >::insert_or_assign<QVariant const&>(QString const&, QVariant const&) /usr/include/c++/13.2.1/bits/stl_map.h:973
    #10 0x7f073ea6d189 in QMap<QString, QVariant>::insert(QString const&, QVariant const&) /home/milian/Qt/6.5.2/gcc_64/include/QtCore/qmap.h:692
    #11 0x7f073ebd5614 in Solid::Backends::UDisks2::DeviceBackend::cacheProperty(QString const&, QVariant const&) const solid6/src/solid/devices/backends/udisks2/udisksdevicebackend.cpp:264
    #12 0x7f073ebd1e83 in Solid::Backends::UDisks2::DeviceBackend::allProperties() const solid6/src/solid/devices/backends/udisks2/udisksdevicebackend.cpp:141
    #13 0x7f073ebd3164 in Solid::Backends::UDisks2::DeviceBackend::checkCache(QString const&) const solid6/src/solid/devices/backends/udisks2/udisksdevicebackend.cpp:172
    #14 0x7f073ebd0d63 in Solid::Backends::UDisks2::DeviceBackend::prop(QString const&) const solid6/src/solid/devices/backends/udisks2/udisksdevicebackend.cpp:114
    #15 0x7f073eba69ad in Solid::Backends::UDisks2::Device::prop(QString const&) const solid6/src/solid/devices/backends/udisks2/udisksdevice.cpp:118
    #16 0x7f073ebbd25d in Solid::Backends::UDisks2::Device::drivePath() const solid6/src/solid/devices/backends/udisks2/udisksdevice.cpp:884
    #17 0x7f073ebbb88d in Solid::Backends::UDisks2::Device::mightBeOpticalDisc() const solid6/src/solid/devices/backends/udisks2/udisksdevice.cpp:833
    #18 0x7f073eb290e6 in Solid::Backends::UDisks2::Manager::introspect(QString const&, bool) solid6/src/solid/devices/backends/udisks2/udisksmanager.cpp:143
    #19 0x7f073eb27cf7 in Solid::Backends::UDisks2::Manager::allDevices() solid6/src/solid/devices/backends/udisks2/udisksmanager.cpp:119
    #20 0x7f073eb2d1ad in Solid::Backends::UDisks2::Manager::deviceCache() solid6/src/solid/devices/backends/udisks2/udisksmanager.cpp:282
    #21 0x7f073eb26ec6 in Solid::Backends::UDisks2::Manager::devicesFromQuery(QString const&, Solid::DeviceInterface::Type) solid6/src/solid/devices/backends/udisks2/udisksmanager.cpp:90
    #22 0x7f073e8f8605 in Solid::Device::listFromType(Solid::DeviceInterface::Type const&, QString const&) solid6/src/solid/devices/frontend/devicemanager.cpp:107

Indirect leak of 120 byte(s) in 1 object(s) allocated from:
    #0 0x7f07c3ee2002 in operator new(unsigned long) /usr/src/debug/gcc/gcc/libsanitizer/asan/asan_new_delete.cpp:95
    #1 0x7f0745599b44 in QObject::QObject(QObject*) /home/qt/work/qt/qtbase/src/corelib/kernel/qobject.cpp:911
    #2 0x7f073ebce7a1 in Solid::Backends::UDisks2::DeviceBackend::backendForUDI(QString const&, bool) solid6/src/solid/devices/backends/udisks2/udisksdevicebackend.cpp:32
    #3 0x7f073eba5c6e in Solid::Backends::UDisks2::Device::Device(QString const&) solid6/src/solid/devices/backends/udisks2/udisksdevice.cpp:92
    #4 0x7f073eb29023 in Solid::Backends::UDisks2::Manager::introspect(QString const&, bool) solid6/src/solid/devices/backends/udisks2/udisksmanager.cpp:142
    #5 0x7f073eb27cf7 in Solid::Backends::UDisks2::Manager::allDevices() solid6/src/solid/devices/backends/udisks2/udisksmanager.cpp:119
    #6 0x7f073eb2d1ad in Solid::Backends::UDisks2::Manager::deviceCache() solid6/src/solid/devices/backends/udisks2/udisksmanager.cpp:282
    #7 0x7f073eb26ec6 in Solid::Backends::UDisks2::Manager::devicesFromQuery(QString const&, Solid::DeviceInterface::Type) solid6/src/solid/devices/backends/udisks2/udisksmanager.cpp:90
    #8 0x7f073e8f8605 in Solid::Device::listFromType(Solid::DeviceInterface::Type const&, QString const&) solid6/src/solid/devices/frontend/devicemanager.cpp:107

Indirect leak of 72 byte(s) in 1 object(s) allocated from:
    #0 0x7f07c3ee2002 in operator new(unsigned long) /usr/src/debug/gcc/gcc/libsanitizer/asan/asan_new_delete.cpp:95
    #1 0x7f073ebce767 in Solid::Backends::UDisks2::DeviceBackend::backendForUDI(QString const&, bool) solid6/src/solid/devices/backends/udisks2/udisksdevicebackend.cpp:32
    #2 0x7f073eba5c6e in Solid::Backends::UDisks2::Device::Device(QString const&) solid6/src/solid/devices/backends/udisks2/udisksdevice.cpp:92
    #3 0x7f073eb29023 in Solid::Backends::UDisks2::Manager::introspect(QString const&, bool) solid6/src/solid/devices/backends/udisks2/udisksmanager.cpp:142
    #4 0x7f073eb27cf7 in Solid::Backends::UDisks2::Manager::allDevices() solid6/src/solid/devices/backends/udisks2/udisksmanager.cpp:119
    #5 0x7f073eb2d1ad in Solid::Backends::UDisks2::Manager::deviceCache() solid6/src/solid/devices/backends/udisks2/udisksmanager.cpp:282
    #6 0x7f073eb26ec6 in Solid::Backends::UDisks2::Manager::devicesFromQuery(QString const&, Solid::DeviceInterface::Type) solid6/src/solid/devices/backends/udisks2/udisksmanager.cpp:90
    #7 0x7f073e8f8605 in Solid::Device::listFromType(Solid::DeviceInterface::Type const&, QString const&) solid6/src/solid/devices/frontend/devicemanager.cpp:107

Indirect leak of 56 byte(s) in 1 object(s) allocated from:
    #0 0x7f07c3ee2002 in operator new(unsigned long) /usr/src/debug/gcc/gcc/libsanitizer/asan/asan_new_delete.cpp:95
    #1 0x7f073ea48c76 in QMap<QString, QVariant>::detach() /home/milian/Qt/6.5.2/gcc_64/include/QtCore/qmap.h:275
    #2 0x7f073ea6d04b in QMap<QString, QVariant>::insert(QString const&, QVariant const&) /home/milian/Qt/6.5.2/gcc_64/include/QtCore/qmap.h:691
    #3 0x7f073ebd56ec in Solid::Backends::UDisks2::DeviceBackend::cacheProperty(QString const&, QVariant const&) const solid6/src/solid/devices/backends/udisks2/udisksdevicebackend.cpp:266
    #4 0x7f073ebd1e83 in Solid::Backends::UDisks2::DeviceBackend::allProperties() const solid6/src/solid/devices/backends/udisks2/udisksdevicebackend.cpp:141
    #5 0x7f073ebd3164 in Solid::Backends::UDisks2::DeviceBackend::checkCache(QString const&) const solid6/src/solid/devices/backends/udisks2/udisksdevicebackend.cpp:172
    #6 0x7f073ebd0d63 in Solid::Backends::UDisks2::DeviceBackend::prop(QString const&) const solid6/src/solid/devices/backends/udisks2/udisksdevicebackend.cpp:114
    #7 0x7f073eba69ad in Solid::Backends::UDisks2::Device::prop(QString const&) const solid6/src/solid/devices/backends/udisks2/udisksdevice.cpp:118
    #8 0x7f073ebbd25d in Solid::Backends::UDisks2::Device::drivePath() const solid6/src/solid/devices/backends/udisks2/udisksdevice.cpp:884
    #9 0x7f073ebbb88d in Solid::Backends::UDisks2::Device::mightBeOpticalDisc() const solid6/src/solid/devices/backends/udisks2/udisksdevice.cpp:833
    #10 0x7f073eb290e6 in Solid::Backends::UDisks2::Manager::introspect(QString const&, bool) solid6/src/solid/devices/backends/udisks2/udisksmanager.cpp:143
    #11 0x7f073eb27cf7 in Solid::Backends::UDisks2::Manager::allDevices() solid6/src/solid/devices/backends/udisks2/udisksmanager.cpp:119
    #12 0x7f073eb2d1ad in Solid::Backends::UDisks2::Manager::deviceCache() solid6/src/solid/devices/backends/udisks2/udisksmanager.cpp:282
    #13 0x7f073eb26ec6 in Solid::Backends::UDisks2::Manager::devicesFromQuery(QString const&, Solid::DeviceInterface::Type) solid6/src/solid/devices/backends/udisks2/udisksmanager.cpp:90
    #14 0x7f073e8f8605 in Solid::Device::listFromType(Solid::DeviceInterface::Type const&, QString const&) solid6/src/solid/devices/frontend/devicemanager.cpp:107
    
```

EXPECTED RESULT

no  leaks