nfs41: verify CB_SEQUENCE position in callback compound
authorBenny Halevy <bhalevy@panasas.com>
Wed, 1 Apr 2009 13:23:27 +0000 (09:23 -0400)
committerBenny Halevy <bhalevy@panasas.com>
Wed, 17 Jun 2009 21:11:39 +0000 (14:11 -0700)
CB_SEQUENCE must appear first in the callback compound RPC.
If it is not the first operation NFS4ERR_SEQUENCE_POS must be returned.
If the first operation ni the CB_COMPOUND is not CB_SEQUENCE then
NFS4ERR_OP_NOT_IN_SESSION must be returned.

Signed-off-by: Ricardo Labiaga <ricardo.labiaga@netapp.com>
Signed-off-by: Benny Halevy <bhalevy@panasas.com>
[nfs41: refactor op preprocessing out of process_op]
Signed-off-by: Benny Halevy <bhalevy@panasas.com>
fs/nfs/callback_xdr.c

index 56a3cc5..537f21d 100644 (file)
@@ -521,6 +521,14 @@ out:
 static __be32
 preprocess_nfs41_op(int nop, unsigned int op_nr, struct callback_op **op)
 {
+       if (op_nr == OP_CB_SEQUENCE) {
+               if (nop != 0)
+                       return htonl(NFS4ERR_SEQUENCE_POS);
+       } else {
+               if (nop == 0)
+                       return htonl(NFS4ERR_OP_NOT_IN_SESSION);
+       }
+
        switch (op_nr) {
        case OP_CB_GETATTR:
        case OP_CB_RECALL: