1. 25 Dec, 2018 2 commits
  2. 23 Dec, 2018 7 commits
  3. 06 Oct, 2018 1 commit
    • Ray Strode's avatar
      manager: do initial-setup post work in manager code · 36fe0a15
      Ray Strode authored
      Right now we do the initial-setup related post work
      when stopping the greeter, but the problem is we delay
      stopping the greeter now until after the user session
      is started.
      
      That post-work needs to be done before the user session
      is started.
      
      This commit moves the code to a more logical place.
      36fe0a15
  4. 01 Oct, 2018 1 commit
  5. 25 Sep, 2018 6 commits
    • Ray Strode's avatar
      local-display-factory: handle reviving displays that are waiting to die · 2882e80f
      Ray Strode authored
      We may end up re-using a display in waiting-to-finish state before it gets
      finished in this case reset its state to managed to avoid it getting
      finished while it is being used.
      
      Closes !45
      2882e80f
    • Ray Strode's avatar
      local-display-factory: Remove same VT so don't switch check · 41769214
      Ray Strode authored
      We avoid changing to the login screen vt if we're already on it,
      but the call is racy since we react to vt changes concurrently
      with logind (who we query for the active vt).
      
      This check drops the active vt check since it's pointless and
      getting in the way.
      41769214
    • Hans de Goede's avatar
      local-display-factory: Remove initial VT is in use check · c71bc5d6
      Hans de Goede authored
      The initial VT is in use check in on_vt_changed() is racy, when switching
      to VT1 from an active session, on_vt_changed() may run before logind has
      processed the VT change and then sd_seat_get_active() will return the
      active session which we are switching away from. This results in the greeter
      not being started on VT1.
      
      On my system gdm reliably wins the race resulting in not getting a greeter
      when manually switching from an active session to VT1.
      
      gdm already starts the greeter unconditionally from
      gdm_local_display_factory_sync_seats() on both startup and when an user
      session exits. gdm also starts it unconditionally when selecting
      "Switch user" from an user session.
      
      Now autologin sessions avoid the initial VT as well.
      
      So we now can assume that the initial VT is free for the login screen's
      use. And create_display already checks for and re-uses
      an existing greeter, so we can safely remove the racy check.
      c71bc5d6
    • Ray Strode's avatar
      manager: don't run autologin display on tty1 · 39fb4ff6
      Ray Strode authored
      tty1 is really meant for the login screen.
      If a user autologins on it and we need a login
      screen later, then the login screen has to go
      in some auxiliary VT which isn't very nice.
      
      This commit changes autologin to not use the
      initial vt.
      39fb4ff6
    • Ray Strode's avatar
      manager: rework how autologin is figured out · c5c5bf1f
      Ray Strode authored
      At the moment we decide whether or not to perform autologin, by
      looking at if the display is the initial VT display and if autologin
      hasn't been started before.
      
      That isn't going to work in the future when autologin is started
      on a non-initial vt.
      
      This commit changes GDM to instead check if the seat is seat0, and
      if autologin hasn't run before, before deciding to do autologin.
      c5c5bf1f
    • Ray Strode's avatar
      local-display-factory: don't autoreap initial-setup · 7d1faca2
      Ray Strode authored
      We automatically kill the login screen when switching VTs away
      from it, but we should never kill the initial-setup screen in
      that situation.
      
      This commit adds a check to prevent that from happening.
      7d1faca2
  6. 12 Sep, 2018 1 commit
    • Hans de Goede's avatar
      daemon: Move the waiting the session to have taken over the fb to gdm-local-display-factory · cda8de29
      Hans de Goede authored
      Commit 70861874 ("gdm-wayland-session,gdm-x-session: register after
      delay") delayed displays changing their status from PREPARED to MANAGED
      so that their status would not change until the session has had a change
      to install its own framebuffer and tell the GPU to scanout this new fb.
      
      Commit 74ee7771 ("local-display-factory: defer killing greeter until
      new session registers") uses this to avoid a flicker when transitioning
      from the greeter to the user-session by deferring the stopping of the
      greeter-session until the new display moves to the MANAGED state.
      
      But this only works when transitioning to a new user-session, when moving
      to an existing user-session (fast user switching) the display already
      is in MANAGED state and instead of deferring the stopping of the greeter
      commit 74ee7771 causes us to now never stop the greeter-session.
      
      This commit fixes this by starting a timeout when switching away from
      the initial-vt and letting that timeout stop the greeter-session.
      
      This commit removes the finish_waiting_displays_on_seat() call when the
      display's status changes to MANAGED, so that we still only have one code
      path stopping the greeter and not two.
      
      This means we also no longer need to delay registering the display. So this
      commit removes the code adding the delay (reverts commit 74ee7771).
      
      Note this commit uses a delay of 10 seconds, rather then 2 seconds. The
      transition to a new user-session takes about 8 seconds on my budget
      Apollo Lake based laptop (with SSD).
      
      Note this all really is a workaround, the proper solution for this would
      be able to tell the kernel to keep the greeter framebuffer around until
      a new framebuffer is installed. There is a patch to add a new unref_fb
      ioctl for this: https://www.spinics.net/lists/dri-devel/msg140912.html .
      We need to get this patch upstream and teach mutter to use it.
      cda8de29
  7. 01 Sep, 2018 2 commits
    • Ray Strode's avatar
      local-display-factory: fix build with --disable-user-display-server · d86a80ea
      Ray Strode authored
      commit cf8d918f added a call to `lookup_by_session` which
      was previously only defined when built GDM was built with
      `--enable-user-disable-server`.
      
      That causes the build to fail with `--disable-user-display-server`.
      
      This commit fixes the build by moving `lookup_by_session` out
      of conditionalized code.
      
      Closes #416
      d86a80ea
    • Ray Strode's avatar
      manager: fix build with --without-plymouth · e8f11816
      Ray Strode authored
      commit 80b46e2b accidentally put the
      `doing_initial_setup` boolean declaration inside
      a plymouth-enabled code path.
      
      That broke the build for non-plymouth users.
      
      This commit moves the declaration and the subsequent
      initialization to unconditionalized code.
      e8f11816
  8. 31 Aug, 2018 10 commits
    • Ray Strode's avatar
      manager: don't kill initial-setup before starting user session on wayland · 49433d86
      Ray Strode authored
      Right now we kill initial-setup before starting the session for the user
      initial-setup created.  This is the right thing to do for Xorg, since
      Xorg can't be killed in the background, but it adds unncessary flicker
      for wayland.
      
      This commit checks if it's wayland and avoids killing it right away
      in that case.
      49433d86
    • Ray Strode's avatar
      launch-environment: use wayland for initial-setup · 365c58c0
      Ray Strode authored
      While we've been using wayland by default for the login screen
      for a long time, and for the user session for somewhat less time,
      we never switched initial setup over.
      
      It's still using X11 for no good reason.
      
      This commit changes initial-setup to use wayland by default like
      everything else.
      365c58c0
    • Ray Strode's avatar
      local-display-factory: defer killing greeter until new session registers · 74ee7771
      Ray Strode authored
      At the moment we kill the greeter the second the VT change to the new
      session happens.
      
      That can cause flicker if the new session doesn't take over the display
      quickly enough.
      
      This commit defers killing the greeter until the new display registers.
      
      Closes #413
      74ee7771
    • Ray Strode's avatar
      gdm-wayland-session,gdm-x-session: register after delay · 70861874
      Ray Strode authored
      Right now gdm-x-session registers with GDM as soon as the
      X server is started, and gdm-wayland-session registers as
      soon as the session is started.
      
      Ideally registration wouldn't happen until the session
      says things started successfully.
      
      This commit inches us toward that ideal but adding a little
      timeout before proceeding with registration.
      
      A future commit will add a new xsession file key to allow
      us to know whether or not the session manager of the session
      supports doing registration.
      70861874
    • Ray Strode's avatar
      manager: start initial setup right away · 2f3065ca
      Ray Strode authored
      We no longer restart the greeter as soon as it dies, since we
      start the greeter on demand.  This means, we no longer need to
      defer starting initial setup until after the greeter respawns.
      
      Furthermore, it doesn't work anymore since it relied on the
      respawn to trigger.
      
      This commit removes that code and scaffolding and just starts
      initial setup directly.
      
      #415
      2f3065ca
    • Ray Strode's avatar
      manager: don't set ran_once after running initial-setup · 80b46e2b
      Ray Strode authored
      GdmManager tracks whether or not the user session has ran
      once, so it won't autologin a user again after logout.
      
      Unfortunately the initial-setup session was counting toward the
      ran_once count preventing initial-setup from logging the user
      in afterward.
      
      This commit prevents ran_once from getting set in that case.
      80b46e2b
    • Ray Strode's avatar
      session-worker: fix current vt detection short-circuit logic · a6f53735
      Ray Strode authored
      commit 8169cd4f attempts to avoid changing VTs if the active VT
      is the same as the VT getting jumped to.
      
      It fails to work, however, because accidentally treats a 0 return
      code to the VT_GETSTATE ioctl as failure.
      
      this commit fixes that.
      a6f53735
    • Ray Strode's avatar
      session-worker: clear VT before jumping to it · 5883b170
      Ray Strode authored
      If we're going to jump to a new VT we should make sure it's free
      of residual console text.  That way if there's flicker the user
      will be less likely to notice it.
      
      This commit sends a clear screen escape sequence to the tty
      before jumping to it.
      5883b170
    • Ray Strode's avatar
      manager: better logind handling · 923a7785
      Ray Strode authored
      commit 9ee68d5c8 highlights we've incorrectly
      used ENOENT instead of ENXIO when checking for
      non-existing sessions/seats with logind.
      
      This commit mops up all the other cases.
      923a7785
    • Ray Strode's avatar
      manager: plug leak · 7f8c7987
      Ray Strode authored
      We're quering the session-type of a display and not freeing
      the result.
      7f8c7987
  9. 28 Aug, 2018 1 commit
  10. 27 Aug, 2018 1 commit
  11. 14 Aug, 2018 1 commit
    • Ray Strode's avatar
      local-display-factory: ignore spurios SeatNew signal at start up · d868eb3c
      Ray Strode authored
      Sometimes during startup, logind will send a `SeatNew` signal for
      seat0 after GDM has already called `ListSeats` and processed `seat0`.
      
      That `SeatNew` signal leads to GDM calling `create_display` twice in
      quick succession.
      
      This commit changes GDM to avoid such double processing, by ignoring
      the `create_display` requests for seats that already have a prepared
      display ("prepared" means "starting up").
      
      Closes: #410
      d868eb3c
  12. 13 Aug, 2018 2 commits
    • Ray Strode's avatar
      display: tie skeleton handlers to object lifetime · 59149d10
      Ray Strode authored
      Right now we assume a display skeleton object won't
      outlive its associated display object.
      
      In theory that should be true, but if we accidentally
      leak the skeleton it could erroneously happen.
      
      If that does happen then we'll end accessing free'd
      memory, so the leak will turn into a crasher.
      
      This commit addresses this problem by ensuring
      the skeleton signal handlers are disconnected when the
      associated display object goes away.
      
      CVE-2018-14424
      59149d10
    • Chris Coulson's avatar
      display-store: Pass the display object rather than the id in the removed signal · 1ac1697b
      Chris Coulson authored
      By the time GdmDisplayStore emits the "display-removed" signal, the display
      is no longer in the store and gdm_display_store_lookup will not work in
      signal handlers.
      
      Change the "display-removed" parameter from the display id to the GdmDisplay
      object, so that signal handers can perform any cleanup they need to do
      
      CVE-2018-14424
      
      Closes: #401
      1ac1697b
  13. 09 Aug, 2018 2 commits
  14. 08 Aug, 2018 3 commits