Ian Kent 5d76ad
autofs-5.0.4 - fix double free in do_sasl_bind()
Ian Kent 5d76ad
Ian Kent 5d76ad
From: Ian Kent <raven@themaw.net>
Ian Kent 5d76ad
Ian Kent 5d76ad
In do_sasl_bind() the connection negotiation loop can exit with the
Ian Kent 5d76ad
local variable server_cred non-null after it has been freed, leading
Ian Kent 5d76ad
to a double free.
Ian Kent 5d76ad
---
Ian Kent 5d76ad
Ian Kent 5d76ad
 CHANGELOG            |    1 +
Ian Kent 5d76ad
 modules/cyrus-sasl.c |    4 +++-
Ian Kent 5d76ad
 2 files changed, 4 insertions(+), 1 deletions(-)
Ian Kent 5d76ad
Ian Kent 5d76ad
Ian Kent 5d76ad
diff --git a/CHANGELOG b/CHANGELOG
Ian Kent 5d76ad
index e138ca3..f0d0e58 100644
Ian Kent 5d76ad
--- a/CHANGELOG
Ian Kent 5d76ad
+++ b/CHANGELOG
Ian Kent 5d76ad
@@ -53,6 +53,7 @@
Ian Kent 5d76ad
 - fix not releasing resources when using submounts.
Ian Kent 5d76ad
 - fix notify mount message path.
Ian Kent 5d76ad
 - remount we created mount point fix.
Ian Kent 5d76ad
+- fix double free in sasl_bind().
Ian Kent 5d76ad
 
Ian Kent 5d76ad
 4/11/2008 autofs-5.0.4
Ian Kent 5d76ad
 -----------------------
Ian Kent 5d76ad
diff --git a/modules/cyrus-sasl.c b/modules/cyrus-sasl.c
Ian Kent 5d76ad
index ec2ab0c..04001d0 100644
Ian Kent 5d76ad
--- a/modules/cyrus-sasl.c
Ian Kent 5d76ad
+++ b/modules/cyrus-sasl.c
Ian Kent 5d76ad
@@ -348,8 +348,10 @@ do_sasl_bind(unsigned logopt, LDAP *ld, sasl_conn_t *conn, const char **clientou
Ian Kent 5d76ad
 			}
Ian Kent 5d76ad
 		}
Ian Kent 5d76ad
 
Ian Kent 5d76ad
-		if (server_cred && server_cred->bv_len > 0)
Ian Kent 5d76ad
+		if (server_cred && server_cred->bv_len > 0) {
Ian Kent 5d76ad
 			ber_bvfree(server_cred);
Ian Kent 5d76ad
+			server_cred = NULL;
Ian Kent 5d76ad
+		}
Ian Kent 5d76ad
 
Ian Kent 5d76ad
 	} while ((bind_result == LDAP_SASL_BIND_IN_PROGRESS) ||
Ian Kent 5d76ad
 		 (sasl_result == SASL_CONTINUE));