Blame SOURCES/0001-manager-fix-dangling-pointer-free.patch

2fc437
From 0317fe746acc1f14bcb64d740de813f9ca8f4e70 Mon Sep 17 00:00:00 2001
2fc437
From: Ray Strode <rstrode@redhat.com>
2fc437
Date: Wed, 23 Aug 2017 09:26:11 -0400
2fc437
Subject: [PATCH] manager: fix dangling pointer free
2fc437
2fc437
When reauthenticating, we can crash if no login screen
2fc437
is running on the seat (for instance, when building
2fc437
with --disable-user-display-server, and not user
2fc437
switching).  The crash is due to a dangling
2fc437
pointer.
2fc437
2fc437
This commit fixes that.
2fc437
2fc437
https://bugzilla.gnome.org/show_bug.cgi?id=786656
2fc437
---
2fc437
 daemon/gdm-manager.c | 2 +-
2fc437
 1 file changed, 1 insertion(+), 1 deletion(-)
2fc437
2fc437
diff --git a/daemon/gdm-manager.c b/daemon/gdm-manager.c
2fc437
index 3eef745f..f001a36e 100644
2fc437
--- a/daemon/gdm-manager.c
2fc437
+++ b/daemon/gdm-manager.c
2fc437
@@ -2003,62 +2003,62 @@ on_user_session_died (GdmSession *session,
2fc437
 static char *
2fc437
 get_display_device (GdmManager *manager,
2fc437
                     GdmDisplay *display)
2fc437
 {
2fc437
         /* systemd finds the display device out on its own based on the display */
2fc437
         return NULL;
2fc437
 }
2fc437
 
2fc437
 static void
2fc437
 on_session_reauthenticated (GdmSession *session,
2fc437
                             const char *service_name,
2fc437
                             GdmManager *manager)
2fc437
 {
2fc437
         gboolean fail_if_already_switched = FALSE;
2fc437
 
2fc437
         if (gdm_session_get_display_mode (session) == GDM_SESSION_DISPLAY_MODE_REUSE_VT) {
2fc437
                 const char *seat_id;
2fc437
                 char *session_id;
2fc437
 
2fc437
                 seat_id = gdm_session_get_display_seat_id (session);
2fc437
                 if (get_login_window_session_id (seat_id, &session_id)) {
2fc437
                         GdmDisplay *display = gdm_display_store_find (manager->priv->display_store,
2fc437
                                                                       lookup_by_session_id,
2fc437
                                                                       (gpointer) session_id);
2fc437
 
2fc437
                         if (display != NULL) {
2fc437
                                 gdm_display_stop_greeter_session (display);
2fc437
                                 gdm_display_unmanage (display);
2fc437
                                 gdm_display_finish (display);
2fc437
                         }
2fc437
+                        g_free (session_id);
2fc437
                 }
2fc437
-                g_free (session_id);
2fc437
         }
2fc437
 
2fc437
         /* There should already be a session running, so jump to its
2fc437
          * VT. In the event we're already on the right VT, (i.e. user
2fc437
          * used an unlock screen instead of a user switched login screen),
2fc437
          * then silently succeed and unlock the session.
2fc437
          */
2fc437
         switch_to_compatible_user_session (manager, session, fail_if_already_switched);
2fc437
 }
2fc437
 
2fc437
 static void
2fc437
 on_session_client_ready_for_session_to_start (GdmSession      *session,
2fc437
                                               const char      *service_name,
2fc437
                                               gboolean         client_is_ready,
2fc437
                                               GdmManager      *manager)
2fc437
 {
2fc437
         gboolean waiting_to_start_user_session;
2fc437
 
2fc437
         if (client_is_ready) {
2fc437
                 g_debug ("GdmManager: Will start session when ready");
2fc437
         } else {
2fc437
                 g_debug ("GdmManager: Will start session when ready and told");
2fc437
         }
2fc437
 
2fc437
         waiting_to_start_user_session = GPOINTER_TO_INT (g_object_get_data (G_OBJECT (session),
2fc437
                                                                        "waiting-to-start"));
2fc437
 
2fc437
         g_object_set_data (G_OBJECT (session),
2fc437
                            "start-when-ready",
2fc437
                            GINT_TO_POINTER (client_is_ready));
2fc437
-- 
2fc437
2.14.3
2fc437