Commit c551866e authored by Ricardo Labiaga's avatar Ricardo Labiaga Committed by J. Bruce Fields

nfsd41: nfsd4_decode_compound() does not recognize all ops

The server incorrectly assumes that the operations in the
array start with value 0.  The first operation (OP_ACCESS)
has a value of 3, causing the check in nfsd4_decode_compound
to be off.

Instead of comparing that the operation number is less than
the number of elements in the array, the server should verify
that it is less than the maximum valid operation number
defined by LAST_NFS4_OP.
Signed-off-by: default avatarRicardo Labiaga <Ricardo.Labiaga@netapp.com>
Signed-off-by: default avatarJ. Bruce Fields <bfields@citi.umich.edu>
parent 7284ce6c
...@@ -1434,7 +1434,7 @@ nfsd4_decode_compound(struct nfsd4_compoundargs *argp) ...@@ -1434,7 +1434,7 @@ nfsd4_decode_compound(struct nfsd4_compoundargs *argp)
} }
op->opnum = ntohl(*argp->p++); op->opnum = ntohl(*argp->p++);
if (op->opnum >= OP_ACCESS && op->opnum < ops->nops) if (op->opnum >= OP_ACCESS && op->opnum <= LAST_NFS4_OP)
op->status = ops->decoders[op->opnum](argp, &op->u); op->status = ops->decoders[op->opnum](argp, &op->u);
else { else {
op->opnum = OP_ILLEGAL; op->opnum = OP_ILLEGAL;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment