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