svn commit: r357576 - head/lib/libc/rpc
Mark Johnston
markj at FreeBSD.org
Wed Feb 5 16:10:09 UTC 2020
Author: markj
Date: Wed Feb 5 16:10:09 2020
New Revision: 357576
URL: https://svnweb.freebsd.org/changeset/base/357576
Log:
Fix a use of an uninitialized pointer in xdr_rpcbs_rmtcalllist().
This appears to have been introduced in r173763. Also fix the confusing
indentation that probably led to the bug in the first place.
PR: 243759
Diagnosed by: martin at lispworks.com
MFC after: 2 weeks
Sponsored by: The FreeBSD Foundation
Modified:
head/lib/libc/rpc/rpcb_st_xdr.c
Modified: head/lib/libc/rpc/rpcb_st_xdr.c
==============================================================================
--- head/lib/libc/rpc/rpcb_st_xdr.c Wed Feb 5 16:09:44 2020 (r357575)
+++ head/lib/libc/rpc/rpcb_st_xdr.c Wed Feb 5 16:10:09 2020 (r357576)
@@ -54,29 +54,28 @@ xdr_rpcbs_addrlist(XDR *xdrs, rpcbs_addrlist *objp)
{
struct rpcbs_addrlist **pnext;
- if (!xdr_rpcprog(xdrs, &objp->prog)) {
+ if (!xdr_rpcprog(xdrs, &objp->prog)) {
return (FALSE);
- }
- if (!xdr_rpcvers(xdrs, &objp->vers)) {
+ }
+ if (!xdr_rpcvers(xdrs, &objp->vers)) {
return (FALSE);
- }
- if (!xdr_int(xdrs, &objp->success)) {
+ }
+ if (!xdr_int(xdrs, &objp->success)) {
return (FALSE);
- }
- if (!xdr_int(xdrs, &objp->failure)) {
+ }
+ if (!xdr_int(xdrs, &objp->failure)) {
return (FALSE);
- }
- if (!xdr_string(xdrs, &objp->netid, RPC_MAXDATASIZE)) {
+ }
+ if (!xdr_string(xdrs, &objp->netid, RPC_MAXDATASIZE)) {
return (FALSE);
- }
+ }
- pnext = &objp->next;
-
- if (!xdr_pointer(xdrs, (char **) pnext,
+ pnext = &objp->next;
+ if (!xdr_pointer(xdrs, (char **) pnext,
sizeof (rpcbs_addrlist),
(xdrproc_t)xdr_rpcbs_addrlist)) {
return (FALSE);
- }
+ }
return (TRUE);
}
@@ -86,86 +85,86 @@ xdr_rpcbs_addrlist(XDR *xdrs, rpcbs_addrlist *objp)
bool_t
xdr_rpcbs_rmtcalllist(XDR *xdrs, rpcbs_rmtcalllist *objp)
{
- int32_t *buf;
struct rpcbs_rmtcalllist **pnext;
+ int32_t *buf;
+ pnext = &objp->next;
if (xdrs->x_op == XDR_ENCODE) {
- buf = XDR_INLINE(xdrs, 6 * BYTES_PER_XDR_UNIT);
- if (buf == NULL) {
- if (!xdr_rpcprog(xdrs, &objp->prog)) {
- return (FALSE);
+ buf = XDR_INLINE(xdrs, 6 * BYTES_PER_XDR_UNIT);
+ if (buf == NULL) {
+ if (!xdr_rpcprog(xdrs, &objp->prog)) {
+ return (FALSE);
+ }
+ if (!xdr_rpcvers(xdrs, &objp->vers)) {
+ return (FALSE);
+ }
+ if (!xdr_rpcproc(xdrs, &objp->proc)) {
+ return (FALSE);
+ }
+ if (!xdr_int(xdrs, &objp->success)) {
+ return (FALSE);
+ }
+ if (!xdr_int(xdrs, &objp->failure)) {
+ return (FALSE);
+ }
+ if (!xdr_int(xdrs, &objp->indirect)) {
+ return (FALSE);
+ }
+ } else {
+ IXDR_PUT_U_INT32(buf, objp->prog);
+ IXDR_PUT_U_INT32(buf, objp->vers);
+ IXDR_PUT_U_INT32(buf, objp->proc);
+ IXDR_PUT_INT32(buf, objp->success);
+ IXDR_PUT_INT32(buf, objp->failure);
+ IXDR_PUT_INT32(buf, objp->indirect);
}
- if (!xdr_rpcvers(xdrs, &objp->vers)) {
+ if (!xdr_string(xdrs, &objp->netid, RPC_MAXDATASIZE)) {
return (FALSE);
}
- if (!xdr_rpcproc(xdrs, &objp->proc)) {
+ if (!xdr_pointer(xdrs, (char **) pnext,
+ sizeof (rpcbs_rmtcalllist),
+ (xdrproc_t)xdr_rpcbs_rmtcalllist)) {
return (FALSE);
}
- if (!xdr_int(xdrs, &objp->success)) {
- return (FALSE);
- }
- if (!xdr_int(xdrs, &objp->failure)) {
- return (FALSE);
- }
- if (!xdr_int(xdrs, &objp->indirect)) {
- return (FALSE);
- }
- } else {
- IXDR_PUT_U_INT32(buf, objp->prog);
- IXDR_PUT_U_INT32(buf, objp->vers);
- IXDR_PUT_U_INT32(buf, objp->proc);
- IXDR_PUT_INT32(buf, objp->success);
- IXDR_PUT_INT32(buf, objp->failure);
- IXDR_PUT_INT32(buf, objp->indirect);
- }
- if (!xdr_string(xdrs, &objp->netid, RPC_MAXDATASIZE)) {
- return (FALSE);
- }
- pnext = &objp->next;
- if (!xdr_pointer(xdrs, (char **) pnext,
- sizeof (rpcbs_rmtcalllist),
- (xdrproc_t)xdr_rpcbs_rmtcalllist)) {
- return (FALSE);
- }
- return (TRUE);
+ return (TRUE);
} else if (xdrs->x_op == XDR_DECODE) {
- buf = XDR_INLINE(xdrs, 6 * BYTES_PER_XDR_UNIT);
- if (buf == NULL) {
- if (!xdr_rpcprog(xdrs, &objp->prog)) {
- return (FALSE);
+ buf = XDR_INLINE(xdrs, 6 * BYTES_PER_XDR_UNIT);
+ if (buf == NULL) {
+ if (!xdr_rpcprog(xdrs, &objp->prog)) {
+ return (FALSE);
+ }
+ if (!xdr_rpcvers(xdrs, &objp->vers)) {
+ return (FALSE);
+ }
+ if (!xdr_rpcproc(xdrs, &objp->proc)) {
+ return (FALSE);
+ }
+ if (!xdr_int(xdrs, &objp->success)) {
+ return (FALSE);
+ }
+ if (!xdr_int(xdrs, &objp->failure)) {
+ return (FALSE);
+ }
+ if (!xdr_int(xdrs, &objp->indirect)) {
+ return (FALSE);
+ }
+ } else {
+ objp->prog = (rpcprog_t)IXDR_GET_U_INT32(buf);
+ objp->vers = (rpcvers_t)IXDR_GET_U_INT32(buf);
+ objp->proc = (rpcproc_t)IXDR_GET_U_INT32(buf);
+ objp->success = (int)IXDR_GET_INT32(buf);
+ objp->failure = (int)IXDR_GET_INT32(buf);
+ objp->indirect = (int)IXDR_GET_INT32(buf);
}
- if (!xdr_rpcvers(xdrs, &objp->vers)) {
+ if (!xdr_string(xdrs, &objp->netid, RPC_MAXDATASIZE)) {
return (FALSE);
}
- if (!xdr_rpcproc(xdrs, &objp->proc)) {
+ if (!xdr_pointer(xdrs, (char **) pnext,
+ sizeof (rpcbs_rmtcalllist),
+ (xdrproc_t)xdr_rpcbs_rmtcalllist)) {
return (FALSE);
}
- if (!xdr_int(xdrs, &objp->success)) {
- return (FALSE);
- }
- if (!xdr_int(xdrs, &objp->failure)) {
- return (FALSE);
- }
- if (!xdr_int(xdrs, &objp->indirect)) {
- return (FALSE);
- }
- } else {
- objp->prog = (rpcprog_t)IXDR_GET_U_INT32(buf);
- objp->vers = (rpcvers_t)IXDR_GET_U_INT32(buf);
- objp->proc = (rpcproc_t)IXDR_GET_U_INT32(buf);
- objp->success = (int)IXDR_GET_INT32(buf);
- objp->failure = (int)IXDR_GET_INT32(buf);
- objp->indirect = (int)IXDR_GET_INT32(buf);
- }
- if (!xdr_string(xdrs, &objp->netid, RPC_MAXDATASIZE)) {
- return (FALSE);
- }
- if (!xdr_pointer(xdrs, (char **) pnext,
- sizeof (rpcbs_rmtcalllist),
- (xdrproc_t)xdr_rpcbs_rmtcalllist)) {
- return (FALSE);
- }
- return (TRUE);
+ return (TRUE);
}
if (!xdr_rpcprog(xdrs, &objp->prog)) {
return (FALSE);
More information about the svn-src-head
mailing list