summaryrefslogtreecommitdiff
path: root/usr/src
diff options
context:
space:
mode:
authorGerald Thornbrugh <Gerald.Thornbrugh@Sun.COM>2009-06-05 14:43:55 -0600
committerGerald Thornbrugh <Gerald.Thornbrugh@Sun.COM>2009-06-05 14:43:55 -0600
commit8c3630f02a18afdf1f202bc49d76c38f3cce1371 (patch)
tree8067d3f198e6ab0e3800c405be146f8d54a4fb92 /usr/src
parented629aef897f4494e9359e52811ca81d4b278489 (diff)
downloadillumos-joyent-8c3630f02a18afdf1f202bc49d76c38f3cce1371.tar.gz
6523693 mountd core dump in nfsauth_prog on S10 (and onnv)
6839714 mountd may leak netbuf's 6834333 ASSERT(p->cku_err.re_errno != 0) in clnt_cots_kcallit() triggers because re_error is not set 6704490 clnt_dispatch_notify() and clnt_clts_dispatch_notify() should log zoneid errors
Diffstat (limited to 'usr/src')
-rw-r--r--usr/src/cmd/fs.d/nfs/mountd/nfsauth.c15
-rw-r--r--usr/src/uts/common/rpc/clnt_clts.c2
-rw-r--r--usr/src/uts/common/rpc/clnt_cots.c5
3 files changed, 19 insertions, 3 deletions
diff --git a/usr/src/cmd/fs.d/nfs/mountd/nfsauth.c b/usr/src/cmd/fs.d/nfs/mountd/nfsauth.c
index 4890a6a129..6b29434d03 100644
--- a/usr/src/cmd/fs.d/nfs/mountd/nfsauth.c
+++ b/usr/src/cmd/fs.d/nfs/mountd/nfsauth.c
@@ -20,7 +20,7 @@
*/
/*
- * Copyright 2008 Sun Microsystems, Inc. All rights reserved.
+ * Copyright 2009 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
*/
@@ -74,7 +74,7 @@ nfsauth_access(auth_req *argp, auth_res *result)
nbuf.buf = argp->req_client.n_bytes;
if (nbuf.len == 0 || nbuf.buf == NULL)
- return;
+ goto done;
if (netdir_getbyaddr(nconf, &clnames, &nbuf)) {
host = &tmp[0];
@@ -93,6 +93,17 @@ nfsauth_access(auth_req *argp, auth_res *result)
}
clnames = anon_client(host);
}
+ /*
+ * Both netdir_getbyaddr() and anon_client() can return a NULL
+ * clnames. This has been seen when the DNS entry for the client
+ * name does not have the correct format or a reverse lookup DNS
+ * entry cannot be found for the client's IP address.
+ */
+ if (clnames == NULL) {
+ syslog(LOG_ERR, "Could not find DNS entry for %s",
+ argp->req_netid);
+ goto done;
+ }
/*
* Now find the export
diff --git a/usr/src/uts/common/rpc/clnt_clts.c b/usr/src/uts/common/rpc/clnt_clts.c
index e42d15644f..b4386df80c 100644
--- a/usr/src/uts/common/rpc/clnt_clts.c
+++ b/usr/src/uts/common/rpc/clnt_clts.c
@@ -2210,6 +2210,8 @@ done_xid_copy:
if (e->call_zoneid != zoneid) {
mutex_exit(&e->call_lock);
mutex_exit(&chtp->ct_lock);
+ RPCLOG0(8, "clnt_dispatch_notify (clts): incorrect "
+ "zoneid\n");
freemsg(mp);
return;
}
diff --git a/usr/src/uts/common/rpc/clnt_cots.c b/usr/src/uts/common/rpc/clnt_cots.c
index 85874c885a..08e02ad74a 100644
--- a/usr/src/uts/common/rpc/clnt_cots.c
+++ b/usr/src/uts/common/rpc/clnt_cots.c
@@ -2667,8 +2667,10 @@ connmgr_connect(
e->call_status = RPC_INTR;
else if (error == ETIME)
e->call_status = RPC_TIMEDOUT;
- else if (error == EPROTO)
+ else if (error == EPROTO) {
e->call_status = RPC_SYSTEMERROR;
+ e->call_reason = EPROTO;
+ }
RPCLOG(8, "connmgr_connect: can't connect, status: "
"%s\n", clnt_sperrno(e->call_status));
@@ -3022,6 +3024,7 @@ done_xid_copy:
if (e->call_zoneid != zoneid) {
mutex_exit(&e->call_lock);
mutex_exit(&chtp->ct_lock);
+ RPCLOG0(1, "clnt_dispatch_notify: incorrect zoneid\n");
return (FALSE);
}