svn commit: samba r24282 - in branches/SAMBA_4_0/source/auth: credentials gensec

abartlet at samba.org abartlet at samba.org
Thu Aug 9 06:26:23 GMT 2007


Author: abartlet
Date: 2007-08-09 06:26:19 +0000 (Thu, 09 Aug 2007)
New Revision: 24282

WebSVN: http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=rev&root=samba&rev=24282

Log:
Try to fix the occasional Samba4 crash in BASE-BENCH-READWRITE, as
seen in particular on opi.

This looked like a Heimdal problem, but I think it was simply that we
didn't do a talloc_reference() to keep tabs on the memory we were
using, and in between obtaining the pointer and using it, it was
assigned to unrelated memory.

Andrew Bartlett


Modified:
   branches/SAMBA_4_0/source/auth/credentials/credentials_krb5.c
   branches/SAMBA_4_0/source/auth/gensec/gensec_gssapi.c


Changeset:
Modified: branches/SAMBA_4_0/source/auth/credentials/credentials_krb5.c
===================================================================
--- branches/SAMBA_4_0/source/auth/credentials/credentials_krb5.c	2007-08-08 23:56:55 UTC (rev 24281)
+++ branches/SAMBA_4_0/source/auth/credentials/credentials_krb5.c	2007-08-09 06:26:19 UTC (rev 24282)
@@ -259,7 +259,8 @@
 		cli_credentials_set_machine_account(cred);
 	}
 
-	if (cred->ccache_obtained >= cred->ccache_threshold) {
+	if (cred->ccache_obtained >= cred->ccache_threshold && 
+	    cred->ccache_obtained > CRED_UNINITIALISED) {
 		*ccc = cred->ccache;
 		return 0;
 	}
@@ -298,7 +299,7 @@
 	 * any cached credentials are now invalid */
 	if (obtained >= cred->client_gss_creds_obtained) {
 		if (cred->client_gss_creds_obtained > CRED_UNINITIALISED) {
-			talloc_free(cred->client_gss_creds);
+			talloc_unlink(cred, cred->client_gss_creds);
 			cred->client_gss_creds = NULL;
 		}
 		cred->client_gss_creds_obtained = CRED_UNINITIALISED;
@@ -319,7 +320,7 @@
 	 * any cached credentials are now invalid */
 	if (obtained >= cred->ccache_obtained) {
 		if (cred->ccache_obtained > CRED_UNINITIALISED) {
-			talloc_free(cred->ccache);
+			talloc_unlink(cred, cred->ccache);
 			cred->ccache = NULL;
 		}
 		cred->ccache_obtained = CRED_UNINITIALISED;
@@ -350,7 +351,8 @@
 	OM_uint32 maj_stat, min_stat;
 	struct gssapi_creds_container *gcc;
 	struct ccache_container *ccache;
-	if (cred->client_gss_creds_obtained >= cred->client_gss_creds_threshold) {
+	if (cred->client_gss_creds_obtained >= cred->client_gss_creds_threshold && 
+	    cred->client_gss_creds_obtained > CRED_UNINITIALISED) {
 		*_gcc = cred->client_gss_creds;
 		return 0;
 	}

Modified: branches/SAMBA_4_0/source/auth/gensec/gensec_gssapi.c
===================================================================
--- branches/SAMBA_4_0/source/auth/gensec/gensec_gssapi.c	2007-08-08 23:56:55 UTC (rev 24281)
+++ branches/SAMBA_4_0/source/auth/gensec/gensec_gssapi.c	2007-08-09 06:26:19 UTC (rev 24282)
@@ -370,7 +370,10 @@
 	}
 
 	gensec_gssapi_state->client_cred = gcc;
-
+	if (!talloc_reference(gensec_gssapi_state, gcc)) {
+		return NT_STATUS_NO_MEMORY;
+	}
+	
 	return NT_STATUS_OK;
 }
 



More information about the samba-cvs mailing list