diff options
author | Benny Halevy <bhalevy@panasas.com> | 2009-04-01 15:23:27 +0200 |
---|---|---|
committer | Benny Halevy <bhalevy@panasas.com> | 2009-06-17 23:11:39 +0200 |
commit | 281fe15dc1d6ad46992f18b7a6644269ec5f7138 (patch) | |
tree | 168baccd85401f61433c99b3f14b5b3ff833ff1d /fs | |
parent | nfs41: cb_sequence xdr implementation (diff) | |
download | linux-281fe15dc1d6ad46992f18b7a6644269ec5f7138.tar.xz linux-281fe15dc1d6ad46992f18b7a6644269ec5f7138.zip |
nfs41: verify CB_SEQUENCE position in callback compound
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>
Diffstat (limited to 'fs')
-rw-r--r-- | fs/nfs/callback_xdr.c | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/fs/nfs/callback_xdr.c b/fs/nfs/callback_xdr.c index 56a3cc510107..537f21da6e5f 100644 --- a/fs/nfs/callback_xdr.c +++ b/fs/nfs/callback_xdr.c @@ -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: |