summaryrefslogtreecommitdiff
path: root/usr/src/uts/common/fs/nfs/nfs_dump.c
diff options
context:
space:
mode:
authorMarcel Telka <marcel.telka@nexenta.com>2015-09-03 19:47:20 +0200
committerDan McDonald <danmcd@omniti.com>2015-09-03 13:56:17 -0400
commitcf98b944cdc2063fc14f3fd525e284de3ed29fd0 (patch)
tree28df5e6ccce80e3e691e730096fac98ff788e25f /usr/src/uts/common/fs/nfs/nfs_dump.c
parentfb01aed523c52aea9a7b48fe29a1b2624c7f21c5 (diff)
downloadillumos-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.c14
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);