Skip to content

Commit bc3665f

Browse files
chuckleverJ. Bruce Fields
authored andcommitted
lockd: Update the NLMv4 SM_NOTIFY arguments decoder to use struct xdr_stream
Signed-off-by: Chuck Lever <[email protected]> Signed-off-by: J. Bruce Fields <[email protected]>
1 parent b4c24b5 commit bc3665f

File tree

1 file changed

+26
-13
lines changed

1 file changed

+26
-13
lines changed

fs/lockd/xdr4.c

Lines changed: 26 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -309,6 +309,32 @@ nlm4svc_decode_res(struct svc_rqst *rqstp, __be32 *p)
309309
return 1;
310310
}
311311

312+
int
313+
nlm4svc_decode_reboot(struct svc_rqst *rqstp, __be32 *p)
314+
{
315+
struct xdr_stream *xdr = &rqstp->rq_arg_stream;
316+
struct nlm_reboot *argp = rqstp->rq_argp;
317+
u32 len;
318+
319+
if (xdr_stream_decode_u32(xdr, &len) < 0)
320+
return 0;
321+
if (len > SM_MAXSTRLEN)
322+
return 0;
323+
p = xdr_inline_decode(xdr, len);
324+
if (!p)
325+
return 0;
326+
argp->len = len;
327+
argp->mon = (char *)p;
328+
if (xdr_stream_decode_u32(xdr, &argp->state) < 0)
329+
return 0;
330+
p = xdr_inline_decode(xdr, SM_PRIV_SIZE);
331+
if (!p)
332+
return 0;
333+
memcpy(&argp->priv.data, p, sizeof(argp->priv.data));
334+
335+
return 1;
336+
}
337+
312338
int
313339
nlm4svc_encode_testres(struct svc_rqst *rqstp, __be32 *p)
314340
{
@@ -376,19 +402,6 @@ nlm4svc_decode_notify(struct svc_rqst *rqstp, __be32 *p)
376402
return xdr_argsize_check(rqstp, p);
377403
}
378404

379-
int
380-
nlm4svc_decode_reboot(struct svc_rqst *rqstp, __be32 *p)
381-
{
382-
struct nlm_reboot *argp = rqstp->rq_argp;
383-
384-
if (!(p = xdr_decode_string_inplace(p, &argp->mon, &argp->len, SM_MAXSTRLEN)))
385-
return 0;
386-
argp->state = ntohl(*p++);
387-
memcpy(&argp->priv.data, p, sizeof(argp->priv.data));
388-
p += XDR_QUADLEN(SM_PRIV_SIZE);
389-
return xdr_argsize_check(rqstp, p);
390-
}
391-
392405
int
393406
nlm4svc_encode_void(struct svc_rqst *rqstp, __be32 *p)
394407
{

0 commit comments

Comments
 (0)