Blame SOURCES/0001-manager-plug-leak-in-maybe_activate_other_session.patch

ca70cf
From 82006d15b70842d2b1ad7d47d9490e315436cb5f Mon Sep 17 00:00:00 2001
ca70cf
From: Ray Strode <rstrode@redhat.com>
ca70cf
Date: Fri, 22 Jun 2018 14:44:11 -0400
ca70cf
Subject: [PATCH 1/7] manager: plug leak in maybe_activate_other_session
ca70cf
ca70cf
The function asks logind what the currently active session is on the
ca70cf
given seat.  It then leaks the response.
ca70cf
ca70cf
This commit plugs the leak.
ca70cf
---
ca70cf
 daemon/gdm-manager.c | 4 +++-
ca70cf
 1 file changed, 3 insertions(+), 1 deletion(-)
ca70cf
ca70cf
diff --git a/daemon/gdm-manager.c b/daemon/gdm-manager.c
ca70cf
index 7539acf11..129cc0de4 100644
ca70cf
--- a/daemon/gdm-manager.c
ca70cf
+++ b/daemon/gdm-manager.c
ca70cf
@@ -1394,79 +1394,81 @@ get_login_window_session_id (const char  *seat_id,
ca70cf
 out:
ca70cf
         if (sessions) {
ca70cf
                 for (i = 0; sessions[i]; i ++) {
ca70cf
                         free (sessions[i]);
ca70cf
                 }
ca70cf
 
ca70cf
                 free (sessions);
ca70cf
         }
ca70cf
 
ca70cf
         return ret;
ca70cf
 }
ca70cf
 
ca70cf
 static void
ca70cf
 activate_login_window_session_on_seat (GdmManager *self,
ca70cf
                                        const char *seat_id)
ca70cf
 {
ca70cf
         char *session_id;
ca70cf
 
ca70cf
         if (!get_login_window_session_id (seat_id, &session_id)) {
ca70cf
                 return;
ca70cf
         }
ca70cf
 
ca70cf
         activate_session_id (self, seat_id, session_id);
ca70cf
 }
ca70cf
 
ca70cf
 static void
ca70cf
 maybe_activate_other_session (GdmManager *self,
ca70cf
                               GdmDisplay *old_display)
ca70cf
 {
ca70cf
         char *seat_id = NULL;
ca70cf
-        char *session_id;
ca70cf
+        char *session_id = NULL;
ca70cf
         int ret;
ca70cf
 
ca70cf
         g_object_get (G_OBJECT (old_display),
ca70cf
                       "seat-id", &seat_id,
ca70cf
                       NULL);
ca70cf
 
ca70cf
         ret = sd_seat_get_active (seat_id, &session_id, NULL);
ca70cf
 
ca70cf
         if (ret == 0) {
ca70cf
                 GdmDisplay *display;
ca70cf
 
ca70cf
                 display = gdm_display_store_find (self->priv->display_store,
ca70cf
                                                   lookup_by_session_id,
ca70cf
                                                   (gpointer) session_id);
ca70cf
 
ca70cf
                 if (display == NULL) {
ca70cf
                         activate_login_window_session_on_seat (self, seat_id);
ca70cf
                 }
ca70cf
+
ca70cf
+                g_free (session_id);
ca70cf
         }
ca70cf
 
ca70cf
         g_free (seat_id);
ca70cf
 }
ca70cf
 
ca70cf
 static const char *
ca70cf
 get_username_for_greeter_display (GdmManager *manager,
ca70cf
                                   GdmDisplay *display)
ca70cf
 {
ca70cf
         gboolean doing_initial_setup = FALSE;
ca70cf
 
ca70cf
         g_object_get (G_OBJECT (display),
ca70cf
                       "doing-initial-setup", &doing_initial_setup,
ca70cf
                       NULL);
ca70cf
 
ca70cf
         if (doing_initial_setup) {
ca70cf
                 return INITIAL_SETUP_USERNAME;
ca70cf
         } else {
ca70cf
                 return GDM_USERNAME;
ca70cf
         }
ca70cf
 }
ca70cf
 
ca70cf
 static void
ca70cf
 set_up_automatic_login_session (GdmManager *manager,
ca70cf
                                 GdmDisplay *display)
ca70cf
 {
ca70cf
         GdmSession *session;
ca70cf
         char       *display_session_type = NULL;
ca70cf
         gboolean is_initial;
ca70cf
 
ca70cf
-- 
ca70cf
2.19.0
ca70cf