Skip to content

Work around a race with password-less logins and double clicks#1

Open
efuss wants to merge 1 commit intomasterfrom
efuss-end_authentication
Open

Work around a race with password-less logins and double clicks#1
efuss wants to merge 1 commit intomasterfrom
efuss-end_authentication

Conversation

@efuss
Copy link
Owner

@efuss efuss commented Jun 5, 2019

There is a race in the greeter (greeter as in lightdm-gtk-greeter) easily triggered by double-clicking on the login button (or clicking it with a bouncing mouse button) with a password-less login.

The problem arises when the daemon has already sent SERVER_MESSAGE_END_AUTHENTICATION to the greeter, but before it digests it, it handles more X11 events (e.g. the second click), sending the daemon a GREETER_MESSAGE_CONTINUE_AUTHENTICATION (before the GREETER_MESSAGE_START_SESSION) which will confuse handle_continue_authentication(), making it call session_respond_error(), which then sends a PAM_CONV_ERR to the session child, which will in turn get confused because it's expecting the (length of the) session error file name.

As I don't really know how to avoid the race in the greeter (you would need to teach it prioritising messages from the master over messages from X11), work around it by setting a flag in GreeterPrivate when SERVER_MESSAGE_END_AUTHENTICATION has been sent and ignore GREETER_MESSAGE_CONTINUE_AUTHENTICATION if that flag is set.

The change was verified on 1.18.3 and then adopted to HEAD.

There is a race in the greeter (greeter as in lightdm-gtk-greeter) easily triggered by double-clicking on the login button (or clicking it with a bouncing mouse button) with a password-less login.

The problem arises when the daemon has already sent SERVER_MESSAGE_END_AUTHENTICATION to the greeter,
but before it digests it, it handles more X11 events (e.g. the second click), sending the daemon a GREETER_MESSAGE_CONTINUE_AUTHENTICATION
(before the GREETER_MESSAGE_START_SESSION) which will confuse handle_continue_authentication(),
making it call session_respond_error(), which then sends a PAM_CONV_ERR to the session child,
which will in turn get confused because it's expecting the (length of the) session error file name.

As I don't really know how to avoid the race in the greeter (you would need to teach it prioritizing messages from the master over messages from X11), work around it by setting a flag in GreeterPrivate if SERVER_MESSAGE_END_AUTHENTICATION has been sent and ignore GREETER_MESSAGE_CONTINUE_AUTHENTICATION if that flag is set.

The change was verified on 1.18.3 and then adopted to HEAD.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant