Loading fs/nfsd/nfs4xdr.c +31 −16 Original line number Diff line number Diff line Loading @@ -1310,31 +1310,46 @@ nfsd4_decode_setattr(struct nfsd4_compoundargs *argp, struct nfsd4_setattr *seta static __be32 nfsd4_decode_setclientid(struct nfsd4_compoundargs *argp, struct nfsd4_setclientid *setclientid) { DECODE_HEAD; __be32 *p, status; if (argp->minorversion >= 1) return nfserr_notsupp; READ_BUF(NFS4_VERIFIER_SIZE); COPYMEM(setclientid->se_verf.data, NFS4_VERIFIER_SIZE); status = nfsd4_decode_verifier4(argp, &setclientid->se_verf); if (status) return status; status = nfsd4_decode_opaque(argp, &setclientid->se_name); if (status) return status; if (xdr_stream_decode_u32(argp->xdr, &setclientid->se_callback_prog) < 0) return nfserr_bad_xdr; READ_BUF(8); setclientid->se_callback_prog = be32_to_cpup(p++); setclientid->se_callback_netid_len = be32_to_cpup(p++); READ_BUF(setclientid->se_callback_netid_len); SAVEMEM(setclientid->se_callback_netid_val, setclientid->se_callback_netid_len); READ_BUF(4); setclientid->se_callback_addr_len = be32_to_cpup(p++); if (xdr_stream_decode_u32(argp->xdr, &setclientid->se_callback_netid_len) < 0) return nfserr_bad_xdr; p = xdr_inline_decode(argp->xdr, setclientid->se_callback_netid_len); if (!p) return nfserr_bad_xdr; setclientid->se_callback_netid_val = svcxdr_tmpalloc(argp, setclientid->se_callback_netid_len); if (!setclientid->se_callback_netid_val) return nfserr_jukebox; memcpy(setclientid->se_callback_netid_val, p, setclientid->se_callback_netid_len); READ_BUF(setclientid->se_callback_addr_len); SAVEMEM(setclientid->se_callback_addr_val, setclientid->se_callback_addr_len); READ_BUF(4); setclientid->se_callback_ident = be32_to_cpup(p++); if (xdr_stream_decode_u32(argp->xdr, &setclientid->se_callback_addr_len) < 0) return nfserr_bad_xdr; p = xdr_inline_decode(argp->xdr, setclientid->se_callback_addr_len); if (!p) return nfserr_bad_xdr; setclientid->se_callback_addr_val = svcxdr_tmpalloc(argp, setclientid->se_callback_addr_len); if (!setclientid->se_callback_addr_val) return nfserr_jukebox; memcpy(setclientid->se_callback_addr_val, p, setclientid->se_callback_addr_len); if (xdr_stream_decode_u32(argp->xdr, &setclientid->se_callback_ident) < 0) return nfserr_bad_xdr; DECODE_TAIL; return nfs_ok; } static __be32 Loading Loading
fs/nfsd/nfs4xdr.c +31 −16 Original line number Diff line number Diff line Loading @@ -1310,31 +1310,46 @@ nfsd4_decode_setattr(struct nfsd4_compoundargs *argp, struct nfsd4_setattr *seta static __be32 nfsd4_decode_setclientid(struct nfsd4_compoundargs *argp, struct nfsd4_setclientid *setclientid) { DECODE_HEAD; __be32 *p, status; if (argp->minorversion >= 1) return nfserr_notsupp; READ_BUF(NFS4_VERIFIER_SIZE); COPYMEM(setclientid->se_verf.data, NFS4_VERIFIER_SIZE); status = nfsd4_decode_verifier4(argp, &setclientid->se_verf); if (status) return status; status = nfsd4_decode_opaque(argp, &setclientid->se_name); if (status) return status; if (xdr_stream_decode_u32(argp->xdr, &setclientid->se_callback_prog) < 0) return nfserr_bad_xdr; READ_BUF(8); setclientid->se_callback_prog = be32_to_cpup(p++); setclientid->se_callback_netid_len = be32_to_cpup(p++); READ_BUF(setclientid->se_callback_netid_len); SAVEMEM(setclientid->se_callback_netid_val, setclientid->se_callback_netid_len); READ_BUF(4); setclientid->se_callback_addr_len = be32_to_cpup(p++); if (xdr_stream_decode_u32(argp->xdr, &setclientid->se_callback_netid_len) < 0) return nfserr_bad_xdr; p = xdr_inline_decode(argp->xdr, setclientid->se_callback_netid_len); if (!p) return nfserr_bad_xdr; setclientid->se_callback_netid_val = svcxdr_tmpalloc(argp, setclientid->se_callback_netid_len); if (!setclientid->se_callback_netid_val) return nfserr_jukebox; memcpy(setclientid->se_callback_netid_val, p, setclientid->se_callback_netid_len); READ_BUF(setclientid->se_callback_addr_len); SAVEMEM(setclientid->se_callback_addr_val, setclientid->se_callback_addr_len); READ_BUF(4); setclientid->se_callback_ident = be32_to_cpup(p++); if (xdr_stream_decode_u32(argp->xdr, &setclientid->se_callback_addr_len) < 0) return nfserr_bad_xdr; p = xdr_inline_decode(argp->xdr, setclientid->se_callback_addr_len); if (!p) return nfserr_bad_xdr; setclientid->se_callback_addr_val = svcxdr_tmpalloc(argp, setclientid->se_callback_addr_len); if (!setclientid->se_callback_addr_val) return nfserr_jukebox; memcpy(setclientid->se_callback_addr_val, p, setclientid->se_callback_addr_len); if (xdr_stream_decode_u32(argp->xdr, &setclientid->se_callback_ident) < 0) return nfserr_bad_xdr; DECODE_TAIL; return nfs_ok; } static __be32 Loading