[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