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

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