Hi,
On 22-06-15 21:13, David Herrmann wrote:
Right now, Xorg does not install DBus matches for "PauseDevice" /
"ResumeDevice". Therefore, it should usually not receive those DBus
signals from logind. It is just a coincidence that systemd-logind sends
those signals in a directed manner right now. Therefore, dbus-daemon
bypasses the broadcast matches.
However, this is not ABI and Xorg should not rely on this. systemd-logind
is free to send those signals as broadcasts, in which case Xorg will
freeze the VT. Fix this by always installing those matches.
Cc: Hans de Goede <[email protected]>
Cc: Keith Packard <[email protected]>
Reported-by: Jan Alexander Steffens <[email protected]>
Signed-off-by: David Herrmann <[email protected]>
---
Hi
I'd really appreciate if we could back-port this to 'stable'. The implicit
forwarding of directed signals in dbus-daemon is quite nasty and probably needs
to be fixed. With this patch in place, we make sure Xorg does not rely on that
feature and is safe regarding future changes of the default dbus policy.
There's an ongoing discussion regarding some possible security issues with this,
so it's not very unlikely that _something_ will change in dbus upstream.
I also assume this was just an oversight by Hans, and it was not done this way
intentionally. Hans?
This was not intentionally, I just assumed that these signals would be directed
since that seems logical, and things worked that way. I'm fine with adding the
matches. I'll test this tomorrow, and if it works add my Reviewed-by and
Tested-by and send a pull-req with this patch + some other patches I've pending.
Thanks for working on this!
Regards,
Hans
Thanks
David
hw/xfree86/os-support/linux/systemd-logind.c | 18 ++++++++++++++++++
1 file changed, 18 insertions(+)
diff --git a/hw/xfree86/os-support/linux/systemd-logind.c
b/hw/xfree86/os-support/linux/systemd-logind.c
index 4ad41a3..a0434a1 100644
--- a/hw/xfree86/os-support/linux/systemd-logind.c
+++ b/hw/xfree86/os-support/linux/systemd-logind.c
@@ -506,6 +506,24 @@ connect_hook(DBusConnection *connection, void *data)
goto cleanup;
}
+ dbus_bus_add_match(connection,
+
"type='signal',sender='org.freedesktop.login1',interface='org.freedesktop.login1.Session',member='PauseDevice'",
+ &error);
+ if (dbus_error_is_set(&error)) {
+ LogMessage(X_ERROR, "systemd-logind: could not add match: %s\n",
+ error.message);
+ goto cleanup;
+ }
+
+ dbus_bus_add_match(connection,
+
"type='signal',sender='org.freedesktop.login1',interface='org.freedesktop.login1.Session',member='ResumeDevice'",
+ &error);
+ if (dbus_error_is_set(&error)) {
+ LogMessage(X_ERROR, "systemd-logind: could not add match: %s\n",
+ error.message);
+ goto cleanup;
+ }
+
/*
* HdG: This is not useful with systemd <= 208 since the signal only
* contains invalidated property names there, rather than property, val
_______________________________________________
[email protected]: X.Org development
Archives: http://lists.x.org/archives/xorg-devel
Info: http://lists.x.org/mailman/listinfo/xorg-devel