Package: src:ukui-settings-daemon
Severity: important
Version: 4.0.10.0-2
ukui-settings-daemon intermittently crashes with SIGSEGV at startup
when running under the display manager session (uid 108).
Root cause: plugins/housekeeping/housekeeping-plugin.h, the
mHouseManager member is declared without an initializer:
HousekeepingManager *mHouseManager;
When the user is the display manager (lightdm/sddm, uid 108),
the constructor skips the assignment (line 60-63 of
housekeeping-plugin.cpp), leaving mHouseManager as a garbage
value. deactivate() then checks the garbage in an if-statement
— if the value happens to be non-zero, it calls
HousekeepingManagerStop() with an invalid 'this' pointer,
causing SIGSEGV.
The crash is intermittent because the garbage value is sometimes
zero (no crash), sometimes non-zero (crash).
Original crash:
#0 HousekeepingManager::HousekeepingManagerStop() (libhousekeeping.so +
0x39de8)
-> mov 0x18(%rdi),%rdi ; loading member from invalid 'this'
#1 PluginInfo::pluginDeactivate()
#2 PluginManager::managerStop()
#3 main()