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

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