mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git
synced 2025-01-01 10:42:11 +00:00
NFSD: Relocate nfsd4_decode_opaque()
Enable nfsd4_decode_opaque() to be used in more decoders, and replace the READ* macros in nfsd4_decode_opaque(). Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
This commit is contained in:
parent
5c505d1286
commit
5dcbfabb67
@ -207,6 +207,33 @@ static char *savemem(struct nfsd4_compoundargs *argp, __be32 *p, int nbytes)
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* NFSv4 basic data type decoders
|
||||
*/
|
||||
|
||||
static __be32
|
||||
nfsd4_decode_opaque(struct nfsd4_compoundargs *argp, struct xdr_netobj *o)
|
||||
{
|
||||
__be32 *p;
|
||||
u32 len;
|
||||
|
||||
if (xdr_stream_decode_u32(argp->xdr, &len) < 0)
|
||||
return nfserr_bad_xdr;
|
||||
if (len == 0 || len > NFS4_OPAQUE_LIMIT)
|
||||
return nfserr_bad_xdr;
|
||||
p = xdr_inline_decode(argp->xdr, len);
|
||||
if (!p)
|
||||
return nfserr_bad_xdr;
|
||||
o->data = svcxdr_tmpalloc(argp, len);
|
||||
if (!o->data)
|
||||
return nfserr_jukebox;
|
||||
o->len = len;
|
||||
memcpy(o->data, p, len);
|
||||
|
||||
return nfs_ok;
|
||||
}
|
||||
|
||||
static __be32
|
||||
nfsd4_decode_component4(struct nfsd4_compoundargs *argp, char **namp, u32 *lenp)
|
||||
{
|
||||
@ -943,22 +970,6 @@ static __be32 nfsd4_decode_share_deny(struct nfsd4_compoundargs *argp, u32 *x)
|
||||
return nfserr_bad_xdr;
|
||||
}
|
||||
|
||||
static __be32 nfsd4_decode_opaque(struct nfsd4_compoundargs *argp, struct xdr_netobj *o)
|
||||
{
|
||||
DECODE_HEAD;
|
||||
|
||||
READ_BUF(4);
|
||||
o->len = be32_to_cpup(p++);
|
||||
|
||||
if (o->len == 0 || o->len > NFS4_OPAQUE_LIMIT)
|
||||
return nfserr_bad_xdr;
|
||||
|
||||
READ_BUF(o->len);
|
||||
SAVEMEM(o->data, o->len);
|
||||
|
||||
DECODE_TAIL;
|
||||
}
|
||||
|
||||
static __be32
|
||||
nfsd4_decode_open(struct nfsd4_compoundargs *argp, struct nfsd4_open *open)
|
||||
{
|
||||
|
Loading…
Reference in New Issue
Block a user