Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 1 Jul 2009 16:42:03 +0000 (UTC)
From:      Rick Macklem <rmacklem@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r195246 - head/sys/rpc/rpcsec_gss
Message-ID:  <200907011642.n61Gg3oi018130@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: rmacklem
Date: Wed Jul  1 16:42:03 2009
New Revision: 195246
URL: http://svn.freebsd.org/changeset/base/195246

Log:
  When unmounting an NFS mount using sec=krb5[ip], the umount system
  call could get hung sleeping on "gsssta" if the credentials for a user
  that had been accessing the mount point have expired. This happened
  because rpc_gss_destroy_context() would end up calling itself when the
  "destroy context" RPC was attempted, trying to refresh the credentials.
  This patch just checks for this case in rpc_gss_refresh() and returns
  without attempting the refresh, which avoids the recursive call to
  rpc_gss_destroy_context() and the subsequent hang.
  
  Reviewed by:	dfr
  Approved by:	re (Ken Smith), kib (mentor)

Modified:
  head/sys/rpc/rpcsec_gss/rpcsec_gss.c

Modified: head/sys/rpc/rpcsec_gss/rpcsec_gss.c
==============================================================================
--- head/sys/rpc/rpcsec_gss/rpcsec_gss.c	Wed Jul  1 16:38:18 2009	(r195245)
+++ head/sys/rpc/rpcsec_gss/rpcsec_gss.c	Wed Jul  1 16:42:03 2009	(r195246)
@@ -929,6 +929,20 @@ rpc_gss_refresh(AUTH *auth, void *msg)
 {
 	struct rpc_msg *reply = (struct rpc_msg *) msg;
 	rpc_gss_options_ret_t options;
+	struct rpc_gss_data *gd;
+
+	gd = AUTH_PRIVATE(auth);
+	
+	/*
+	 * If the context is in DESTROYING state, then just return, since
+	 * there is no point in refreshing the credentials.
+	 */
+	mtx_lock(&gd->gd_lock);
+	if (gd->gd_state == RPCSEC_GSS_DESTROYING) {
+		mtx_unlock(&gd->gd_lock);
+		return (FALSE);
+	}
+	mtx_unlock(&gd->gd_lock);
 
 	/*
 	 * If the error was RPCSEC_GSS_CREDPROBLEM of



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200907011642.n61Gg3oi018130>