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()

Reply via email to