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

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