[systemd-bugs] [Bug 90769] user_elect_display() overwrites DISPLAY with TTY session when switching VT away from a graphical session
bugzilla-daemon at freedesktop.org
bugzilla-daemon at freedesktop.org
Fri May 29 03:07:20 PDT 2015
https://bugs.freedesktop.org/show_bug.cgi?id=90769
--- Comment #1 from Philip Withnall <bugzilla at tecnocode.co.uk> ---
Created attachment 116145
--> https://bugs.freedesktop.org/attachment.cgi?id=116145&action=edit
logind: Fix user_elect_display() to be more stable
The previous implementation of user_elect_display() could easily end up
overwriting the user’s valid graphical session with a new TTY session.
For example, consider the situation where there is one session:
c1, type = SESSION_X11, !stopping, class = SESSION_USER
it is initially elected as the user’s display (i.e. u->display = c1).
If another session is started, on a different VT, the sessions_by_user
list becomes:
c1, type = SESSION_X11, !stopping, class = SESSION_USER
c2, type = SESSION_TTY, !stopping, class = SESSION_USER
In the previous code, graphical = c1 and text = c2, as expected.
However, neither graphical nor text fulfil the conditions for setting
u->display = graphical (because neither is better than u->display), so
the code falls through to check the text variable. The conditions for
this match, as u->display->type != SESSION_TTY (it’s actually
SESSION_X11). Hence u->display is set to c2, which is incorrect, because
session c1 is still valid.
Refactor user_elect_display() to use a more explicit filter and
pre-order comparison over the sessions. This can be demonstrated to be
stable and only ever ‘upgrade’ the session to a more graphical one.
--
You are receiving this mail because:
You are the QA Contact for the bug.
You are the assignee for the bug.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freedesktop.org/archives/systemd-bugs/attachments/20150529/dd95ee31/attachment.html>
More information about the systemd-bugs
mailing list