[frameworks-solid] [Bug 476749] New: multiple memory leaks in udisks2 backend caching

Milian Wolff bugzilla_noreply at kde.org
Thu Nov 9 11:09:19 GMT 2023


https://bugs.kde.org/show_bug.cgi?id=476749

            Bug ID: 476749
           Summary: multiple memory leaks in udisks2 backend caching
    Classification: Frameworks and Libraries
           Product: frameworks-solid
           Version: unspecified
          Platform: Other
                OS: Linux
            Status: REPORTED
          Severity: normal
          Priority: NOR
         Component: general
          Assignee: unassigned-bugs at kde.org
          Reporter: mail at milianw.de
                CC: kdelibs-bugs at kde.org, lukas at kde.org
  Target Milestone: ---

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

-- 
You are receiving this mail because:
You are the assignee for the bug.


More information about the Unassigned-bugs mailing list