diff options
author | Marcel Telka <marcel.telka@nexenta.com> | 2015-09-03 19:47:20 +0200 |
---|---|---|
committer | Dan McDonald <danmcd@omniti.com> | 2015-09-03 13:56:17 -0400 |
commit | cf98b944cdc2063fc14f3fd525e284de3ed29fd0 (patch) | |
tree | 28df5e6ccce80e3e691e730096fac98ff788e25f /usr/src/uts/common/fs/nfs/nfs_dump.c | |
parent | fb01aed523c52aea9a7b48fe29a1b2624c7f21c5 (diff) | |
download | illumos-joyent-cf98b944cdc2063fc14f3fd525e284de3ed29fd0.tar.gz |
5907 xdrmblk_getpos() is unreliable
Reviewed by: Josef 'Jeff' Sipek <josef.sipek@nexenta.com>
Reviewed by: Yuri Pankov <yuri.pankov@nexenta.com>
Reviewed by: Richard Elling <Richard.Elling@RichardElling.com>
Approved by: Dan McDonald <danmcd@omniti.com>
Diffstat (limited to 'usr/src/uts/common/fs/nfs/nfs_dump.c')
-rw-r--r-- | usr/src/uts/common/fs/nfs/nfs_dump.c | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/usr/src/uts/common/fs/nfs/nfs_dump.c b/usr/src/uts/common/fs/nfs/nfs_dump.c index f49449fde8..afa50a7124 100644 --- a/usr/src/uts/common/fs/nfs/nfs_dump.c +++ b/usr/src/uts/common/fs/nfs/nfs_dump.c @@ -18,6 +18,11 @@ * * CDDL HEADER END */ + +/* + * Copyright 2015 Nexenta Systems, Inc. All rights reserved. + */ + /* * Copyright 2014 Gary Mills * Copyright 2009 Sun Microsystems, Inc. All rights reserved. @@ -405,15 +410,18 @@ nd_get_reply(TIUSER *tiptr, XDR *xdrp, uint32_t call_xid, int *badmsg) reply_msg.acpted_rply.ar_results.proc = xdr_WRITE3res; break; default: + XDR_DESTROY(xdrp); return (EIO); } if (!xdr_replymsg(xdrp, &reply_msg)) { + XDR_DESTROY(xdrp); cmn_err(CE_WARN, "\tnfs_dump: xdr_replymsg failed"); return (EIO); } if (reply_msg.rm_xid != call_xid) { + XDR_DESTROY(xdrp); *badmsg = 1; return (0); } @@ -421,6 +429,7 @@ nd_get_reply(TIUSER *tiptr, XDR *xdrp, uint32_t call_xid, int *badmsg) _seterr_reply(&reply_msg, &rpc_err); if (rpc_err.re_status != RPC_SUCCESS) { + XDR_DESTROY(xdrp); cmn_err(CE_WARN, "\tnfs_dump: RPC error %d (%s)", rpc_err.re_status, clnt_sperrno(rpc_err.re_status)); return (EIO); @@ -429,17 +438,20 @@ nd_get_reply(TIUSER *tiptr, XDR *xdrp, uint32_t call_xid, int *badmsg) switch (nfsdump_version) { case NFS_VERSION: if (na.ns_status) { + XDR_DESTROY(xdrp); cmn_err(CE_WARN, "\tnfs_dump: status %d", na.ns_status); return (EIO); } break; case NFS_V3: if (wres.status != NFS3_OK) { + XDR_DESTROY(xdrp); cmn_err(CE_WARN, "\tnfs_dump: status %d", wres.status); return (EIO); } break; default: + XDR_DESTROY(xdrp); return (EIO); } @@ -449,6 +461,8 @@ nd_get_reply(TIUSER *tiptr, XDR *xdrp, uint32_t call_xid, int *badmsg) (void) xdr_opaque_auth(xdrp, &(reply_msg.acpted_rply.ar_verf)); } + XDR_DESTROY(xdrp); + freemsg(rudata.udata.udata_mp); return (0); |