[systemd-devel] [PATCH] logind: close race on session state during logins

Zbigniew Jędrzejewski-Szmek zbyszek at in.waw.pl
Sun Feb 16 23:32:42 PST 2014


On Thu, Feb 13, 2014 at 11:03:23PM +0100, Djalal Harouni wrote:
> At login there is a small race window where session_get_state() will
> return SESSION_ACTIVE instead of SESSION_OPENING. This must be fixed
> since during that time there are calls to session_save() to save
> session states and we want to write the correct state.
> 
> When we queue the start scope and service jobs, we wait for both of them
> to finish before calling and continue processing in:
> "session_jobs_reply() => session_send_create_reply()"
> to create the session fifo and notify clients.
> 
> However, in the match_job_removed() D-Bus signal, we may hit situations
> where the scope job has successfully finished and we are still waiting
> for the user service job to finish. During that time the
> "session->scope_job" will be freed and set to NULL, this makes
> session_get_state() return SESSION_ACTIVE before it is really active, it
> should return SESSION_OPENING since we are still waiting for the service
> job to finish in order to create the session fifo.
> 
> To fix this, we also check if the session fifo fd was created, if so then
> the session has entered the SESSION_ACTIVE state, if not then it is still
> in the SESSION_OPENING state and it is waiting for the scope and service
> jobs to finish.
Looks correct. Applied.

Zbyszek


More information about the systemd-devel mailing list