diff options
| author | Gerald Thornbrugh <Gerald.Thornbrugh@Sun.COM> | 2009-06-05 14:43:55 -0600 |
|---|---|---|
| committer | Gerald Thornbrugh <Gerald.Thornbrugh@Sun.COM> | 2009-06-05 14:43:55 -0600 |
| commit | 8c3630f02a18afdf1f202bc49d76c38f3cce1371 (patch) | |
| tree | 8067d3f198e6ab0e3800c405be146f8d54a4fb92 /usr/src | |
| parent | ed629aef897f4494e9359e52811ca81d4b278489 (diff) | |
| download | illumos-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.c | 15 | ||||
| -rw-r--r-- | usr/src/uts/common/rpc/clnt_clts.c | 2 | ||||
| -rw-r--r-- | usr/src/uts/common/rpc/clnt_cots.c | 5 |
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); } |
