summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorOndrej Holy <oholy@redhat.com>2016-10-13 12:36:27 +0200
committerOndrej Holy <oholy@redhat.com>2016-11-18 16:23:26 +0100
commitccf7b9181d322f30979b6245d046d13615e6b1c7 (patch)
tree9f11fa0e6535d961cfdc65b3b4b82f874dbc136d
parent5f7a36ad93ecc6c221f96320c7bf8520bd80fa4e (diff)
downloadgvfs-ccf7b9181d322f30979b6245d046d13615e6b1c7.tar.gz
dnssd: Free client object on finalize
Client object is not freed even if there isn't more backends. Free the client in order to avoid potential use-after-free crashes caused by some avahi client activity. https://bugzilla.gnome.org/show_bug.cgi?id=631023
-rw-r--r--daemon/gvfsbackenddnssd.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/daemon/gvfsbackenddnssd.c b/daemon/gvfsbackenddnssd.c
index c7f53b01..e3f33189 100644
--- a/daemon/gvfsbackenddnssd.c
+++ b/daemon/gvfsbackenddnssd.c
@@ -804,6 +804,12 @@ g_vfs_backend_dns_sd_finalize (GObject *object)
remove_browsers (backend);
g_list_free_full (backend->resolvers, (GDestroyNotify)avahi_service_resolver_free);
+ if (dnssd_backends == NULL && global_client)
+ {
+ avahi_client_free (global_client);
+ global_client = NULL;
+ }
+
if (backend->mount_spec)
g_mount_spec_unref (backend->mount_spec);