Debian Patches

Status for cinnamon-screensaver/6.6.1-2

Patch Description Author Forwarded Bugs Origin Last update
change-iso-flag-path.patch Switch to the Debian path for iso flags Margarita Manterola <marga@debian.org> not-needed 2016-12-08
manager.py-Fix-unlocking-with-pygobject-3.57.patch manager.py: Fix unlocking with pygobject >= 3.57
GLib.spawn_async() used to return a GLib.Pid that was a subclass of int. Since
pygobject 3.57.0 (commit b6e14902, "Reimplement GLib.spawn_async in Python") it
is a plain Python object implementing only __int__() and close(), so it no
longer supports comparisons with integers or being passed to os.kill().

kill_fallback_window() therefore raises "TypeError: '>' not supported between
instances of 'Pid' and 'int'" on `if self.fb_pid > 0`, which aborts unlock()
halfway through: cs-backup-locker never gets its SIGTERM, but the stage window
is already gone by then, so the backup locker grabs the screen and the user is
left looking at "Something went wrong with the screensaver" with the desktop
still locked.

Store the plain pid instead. int() is safe on every pygobject version, since
the old GLib.Pid already was an int - verified against 3.48.2 (Ubuntu 24.04),
3.50.0 (Debian trixie) and 3.57.0 (Debian sid).
Fabio Fantoni <fantonifabio@tiscali.it> yes debian upstream 2026-08-07
backup-locker-Fix-use-after-free-of-the-window-monitor-ca.patch backup-locker: Fix use-after-free of the window monitor cancellable
g_task_get_cancellable() returns a borrowed reference, but
screensaver_window_gone() called g_clear_object() on it, dropping a reference
cs-backup-locker never owned. When the GTask is then finalized the cancellable
reaches a refcount of 0 and is freed, while the window_monitor_cancellable
global still points at it. quit() later calls g_cancellable_cancel() on that
dangling pointer and the process dies:

#0 g_cancellable_cancel (libgio-2.0.so.0 + 0x580cd)
#1 quit (cs-backup-locker + 0x5109)
#2 g_main_dispatch
#3 g_main_context_dispatch_unlocked
#4 g_main_loop_run
#5 gtk_main
#6 main

This only shows up when the main screensaver process dies while the backup
locker is running: on a normal unlock the SIGTERM arrives before the
screensaver window disappears, so screensaver_window_gone() never runs and the
extra unref never happens. That is why it surfaced together with the pygobject
3.57 regression rather than on its own.

Drop the bogus unref, and release the previous cancellable in
setup_window_monitor() instead - it was overwritten on every screensaver window
change without ever being unreffed, leaking one GCancellable each time.
Fabio Fantoni <fantonifabio@tiscali.it> yes debian upstream 2026-08-07

All known versions for source package 'cinnamon-screensaver'

Links