Blame SOURCES/0001-LDAP-don-t-close-LDAP-socket-twice.patch

deab74
From 895e5b37d14090541480cebcb297846cbd3662ce Mon Sep 17 00:00:00 2001
deab74
From: Sumit Bose <sbose@redhat.com>
deab74
Date: Fri, 25 Nov 2016 17:35:11 +0100
deab74
Subject: [PATCH] LDAP: don't close LDAP socket twice
deab74
deab74
ldap_destroy() will call close() on the LDAP socket so with an explicit
deab74
close() before the file descriptor will be closed twice. Even worse,
deab74
since the file descriptor can be reused after the explicit call of
deab74
close() by any other thread the close() called from ldap_destroy() might
deab74
close a file descriptor used by a different thread as seen e.g. in
deab74
https://bugzilla.redhat.com/show_bug.cgi?id=1398522.
deab74
deab74
Additionally the patch makes sure that the closed connection cannot be
deab74
used again.
deab74
deab74
https://bugzilla.redhat.com/show_bug.cgi?id=1398522
deab74
---
deab74
 service/realm-ldap.c | 5 +++--
deab74
 1 file changed, 3 insertions(+), 2 deletions(-)
deab74
deab74
diff --git a/service/realm-ldap.c b/service/realm-ldap.c
deab74
index 061ed61..59817fb 100644
deab74
--- a/service/realm-ldap.c
deab74
+++ b/service/realm-ldap.c
deab74
@@ -159,10 +159,11 @@ ldap_source_finalize (GSource *source)
deab74
 {
deab74
 	LdapSource *ls = (LdapSource *)source;
deab74
 
deab74
-	/* Yeah, this is pretty rough, but we don't want blocking here */
deab74
-	close (ls->sock);
deab74
 	ldap_destroy (ls->ldap);
deab74
 
deab74
+	ls->sock = -1;
deab74
+	ls->ldap = NULL;
deab74
+
deab74
 	if (ls->cancellable) {
deab74
 		g_cancellable_release_fd (ls->cancellable);
deab74
 		g_object_unref (ls->cancellable);
deab74
-- 
deab74
2.9.3
deab74