Blame SOURCES/0002-session-Don-t-leak-remote-greeter-interface.patch

400dab
From aeb88313c2110389ec530c8c7d5d816bac24d254 Mon Sep 17 00:00:00 2001
400dab
From: Ray Strode <rstrode@redhat.com>
400dab
Date: Tue, 15 Sep 2020 00:41:00 -0400
400dab
Subject: [PATCH 2/3] session: Don't leak remote greeter interface
400dab
400dab
XDMCP login screens get a "Remote Geeter Interface" exported over
400dab
the bus connection (so the login window can provide a Disconnect
400dab
button).
400dab
400dab
This interface is getting leaked when the session object is disposed,
400dab
leaving the bus connection itself undisposed, which causes an fd
400dab
leak.
400dab
400dab
This commit plugs the interface leak, and thus the fd leak.
400dab
---
400dab
 daemon/gdm-session.c | 1 +
400dab
 1 file changed, 1 insertion(+)
400dab
400dab
diff --git a/daemon/gdm-session.c b/daemon/gdm-session.c
400dab
index 540a2534d..d6d8f128a 100644
400dab
--- a/daemon/gdm-session.c
400dab
+++ b/daemon/gdm-session.c
400dab
@@ -3602,60 +3602,61 @@ gdm_session_get_property (GObject    *object,
400dab
                 break;
400dab
 #ifdef ENABLE_WAYLAND_SUPPORT
400dab
         case PROP_IGNORE_WAYLAND:
400dab
                 g_value_set_boolean (value, self->priv->ignore_wayland);
400dab
                 break;
400dab
 #endif
400dab
         default:
400dab
                 G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
400dab
                 break;
400dab
         }
400dab
 }
400dab
 
400dab
 static void
400dab
 gdm_session_dispose (GObject *object)
400dab
 {
400dab
         GdmSession *self;
400dab
 
400dab
         self = GDM_SESSION (object);
400dab
 
400dab
         g_debug ("GdmSession: Disposing session");
400dab
 
400dab
         gdm_session_close (self);
400dab
 
400dab
         g_clear_pointer (&self->priv->conversations,
400dab
                          g_hash_table_unref);
400dab
 
400dab
         g_clear_object (&self->priv->user_verifier_interface);
400dab
         g_clear_pointer (&self->priv->user_verifier_extensions,
400dab
                          g_hash_table_unref);
400dab
         g_clear_object (&self->priv->greeter_interface);
400dab
+        g_clear_object (&self->priv->remote_greeter_interface);
400dab
         g_clear_object (&self->priv->chooser_interface);
400dab
 
400dab
         g_free (self->priv->display_name);
400dab
         self->priv->display_name = NULL;
400dab
 
400dab
         g_free (self->priv->display_hostname);
400dab
         self->priv->display_hostname = NULL;
400dab
 
400dab
         g_free (self->priv->display_device);
400dab
         self->priv->display_device = NULL;
400dab
 
400dab
         g_free (self->priv->display_seat_id);
400dab
         self->priv->display_seat_id = NULL;
400dab
 
400dab
         g_free (self->priv->display_x11_authority_file);
400dab
         self->priv->display_x11_authority_file = NULL;
400dab
 
400dab
         g_strfreev (self->priv->conversation_environment);
400dab
         self->priv->conversation_environment = NULL;
400dab
 
400dab
         if (self->priv->worker_server != NULL) {
400dab
                 g_dbus_server_stop (self->priv->worker_server);
400dab
                 g_clear_object (&self->priv->worker_server);
400dab
         }
400dab
 
400dab
         if (self->priv->outside_server != NULL) {
400dab
                 g_dbus_server_stop (self->priv->outside_server);
400dab
                 g_clear_object (&self->priv->outside_server);
400dab
         }
400dab
 
400dab
-- 
400dab
2.26.2
400dab