summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorGreg Hudson <ghudson@mit.edu>2012-12-20 14:00:37 -0500
committerGreg Hudson <ghudson@mit.edu>2012-12-20 14:27:38 -0500
commit8b43dd0cec3645d64e4eb9f6d0fcfc2a31d1955d (patch)
treef32ab8bd003eacb5506ccf5add55c2b1e3e83986 /src
parent966547dfeb011800d4b78b8e5d494813bc80559c (diff)
downloadkrb5-8b43dd0cec3645d64e4eb9f6d0fcfc2a31d1955d.tar.gz
krb5-8b43dd0cec3645d64e4eb9f6d0fcfc2a31d1955d.tar.xz
krb5-8b43dd0cec3645d64e4eb9f6d0fcfc2a31d1955d.zip
Fix clntraw_create initialization
clntraw_create has been broken since inception; on the first call, it would compute invalid values of xdrs and client and dereference them. Fix that. (This is pretty strong evidence that no one has ever used it.) Reported by Nickolai Zeldovich <nickolai@csail.mit.edu>. ticket: 7511
Diffstat (limited to 'src')
-rw-r--r--src/lib/rpc/clnt_raw.c18
1 files changed, 10 insertions, 8 deletions
diff --git a/src/lib/rpc/clnt_raw.c b/src/lib/rpc/clnt_raw.c
index df86094cc..1d7fc6260 100644
--- a/src/lib/rpc/clnt_raw.c
+++ b/src/lib/rpc/clnt_raw.c
@@ -90,17 +90,19 @@ clntraw_create(
rpcprog_t prog,
rpcvers_t vers)
{
- register struct clntraw_private *clp = clntraw_private;
+ struct clntraw_private *clp;
struct rpc_msg call_msg;
- XDR *xdrs = &clp->xdr_stream;
- CLIENT *client = &clp->client_object;
+ XDR *xdrs;
+ CLIENT *client;
- if (clp == 0) {
- clp = (struct clntraw_private *)calloc(1, sizeof (*clp));
- if (clp == 0)
- return (0);
- clntraw_private = clp;
+ if (clntraw_private == NULL) {
+ clntraw_private = calloc(1, sizeof(*clp));
+ if (clntraw_private == NULL)
+ return (NULL);
}
+ clp = clntraw_private;
+ xdrs = &clp->xdr_stream;
+ client = &clp->client_object;
/*
* pre-serialize the staic part of the call msg and stash it away
*/