Commit 8ae20abd authored by Trond Myklebust's avatar Trond Myklebust

NFS4: Fix incorrect use of sizeof() in fs/nfs/nfs4xdr.c

The XDR code should not depend on the physical allocation size of
structures like nfs4_stateid and nfs4_verifier since those may have to
change at some future date. We therefore replace all uses of
sizeof() with constants like NFS4_VERIFIER_SIZE and NFS4_STATEID_SIZE.

This also has the side-effect of fixing some warnings of the type
	format ‘%u’ expects type ‘unsigned int’, but argument X has type
		‘long unsigned int’
on 64-bit systems
Signed-off-by: default avatarTrond Myklebust <Trond.Myklebust@netapp.com>
parent 60945cb7
...@@ -646,10 +646,10 @@ static int encode_close(struct xdr_stream *xdr, const struct nfs_closeargs *arg) ...@@ -646,10 +646,10 @@ static int encode_close(struct xdr_stream *xdr, const struct nfs_closeargs *arg)
{ {
__be32 *p; __be32 *p;
RESERVE_SPACE(8+sizeof(arg->stateid->data)); RESERVE_SPACE(8+NFS4_STATEID_SIZE);
WRITE32(OP_CLOSE); WRITE32(OP_CLOSE);
WRITE32(arg->seqid->sequence->counter); WRITE32(arg->seqid->sequence->counter);
WRITEMEM(arg->stateid->data, sizeof(arg->stateid->data)); WRITEMEM(arg->stateid->data, NFS4_STATEID_SIZE);
return 0; return 0;
} }
...@@ -793,17 +793,17 @@ static int encode_lock(struct xdr_stream *xdr, const struct nfs_lock_args *args) ...@@ -793,17 +793,17 @@ static int encode_lock(struct xdr_stream *xdr, const struct nfs_lock_args *args)
WRITE64(nfs4_lock_length(args->fl)); WRITE64(nfs4_lock_length(args->fl));
WRITE32(args->new_lock_owner); WRITE32(args->new_lock_owner);
if (args->new_lock_owner){ if (args->new_lock_owner){
RESERVE_SPACE(40); RESERVE_SPACE(4+NFS4_STATEID_SIZE+20);
WRITE32(args->open_seqid->sequence->counter); WRITE32(args->open_seqid->sequence->counter);
WRITEMEM(args->open_stateid->data, sizeof(args->open_stateid->data)); WRITEMEM(args->open_stateid->data, NFS4_STATEID_SIZE);
WRITE32(args->lock_seqid->sequence->counter); WRITE32(args->lock_seqid->sequence->counter);
WRITE64(args->lock_owner.clientid); WRITE64(args->lock_owner.clientid);
WRITE32(4); WRITE32(4);
WRITE32(args->lock_owner.id); WRITE32(args->lock_owner.id);
} }
else { else {
RESERVE_SPACE(20); RESERVE_SPACE(NFS4_STATEID_SIZE+4);
WRITEMEM(args->lock_stateid->data, sizeof(args->lock_stateid->data)); WRITEMEM(args->lock_stateid->data, NFS4_STATEID_SIZE);
WRITE32(args->lock_seqid->sequence->counter); WRITE32(args->lock_seqid->sequence->counter);
} }
...@@ -830,11 +830,11 @@ static int encode_locku(struct xdr_stream *xdr, const struct nfs_locku_args *arg ...@@ -830,11 +830,11 @@ static int encode_locku(struct xdr_stream *xdr, const struct nfs_locku_args *arg
{ {
__be32 *p; __be32 *p;
RESERVE_SPACE(44); RESERVE_SPACE(12+NFS4_STATEID_SIZE+16);
WRITE32(OP_LOCKU); WRITE32(OP_LOCKU);
WRITE32(nfs4_lock_type(args->fl, 0)); WRITE32(nfs4_lock_type(args->fl, 0));
WRITE32(args->seqid->sequence->counter); WRITE32(args->seqid->sequence->counter);
WRITEMEM(args->stateid->data, sizeof(args->stateid->data)); WRITEMEM(args->stateid->data, NFS4_STATEID_SIZE);
WRITE64(args->fl->fl_start); WRITE64(args->fl->fl_start);
WRITE64(nfs4_lock_length(args->fl)); WRITE64(nfs4_lock_length(args->fl));
...@@ -966,9 +966,9 @@ static inline void encode_claim_delegate_cur(struct xdr_stream *xdr, const struc ...@@ -966,9 +966,9 @@ static inline void encode_claim_delegate_cur(struct xdr_stream *xdr, const struc
{ {
__be32 *p; __be32 *p;
RESERVE_SPACE(4+sizeof(stateid->data)); RESERVE_SPACE(4+NFS4_STATEID_SIZE);
WRITE32(NFS4_OPEN_CLAIM_DELEGATE_CUR); WRITE32(NFS4_OPEN_CLAIM_DELEGATE_CUR);
WRITEMEM(stateid->data, sizeof(stateid->data)); WRITEMEM(stateid->data, NFS4_STATEID_SIZE);
encode_string(xdr, name->len, name->name); encode_string(xdr, name->len, name->name);
} }
...@@ -996,9 +996,9 @@ static int encode_open_confirm(struct xdr_stream *xdr, const struct nfs_open_con ...@@ -996,9 +996,9 @@ static int encode_open_confirm(struct xdr_stream *xdr, const struct nfs_open_con
{ {
__be32 *p; __be32 *p;
RESERVE_SPACE(8+sizeof(arg->stateid->data)); RESERVE_SPACE(4+NFS4_STATEID_SIZE+4);
WRITE32(OP_OPEN_CONFIRM); WRITE32(OP_OPEN_CONFIRM);
WRITEMEM(arg->stateid->data, sizeof(arg->stateid->data)); WRITEMEM(arg->stateid->data, NFS4_STATEID_SIZE);
WRITE32(arg->seqid->sequence->counter); WRITE32(arg->seqid->sequence->counter);
return 0; return 0;
...@@ -1008,9 +1008,9 @@ static int encode_open_downgrade(struct xdr_stream *xdr, const struct nfs_closea ...@@ -1008,9 +1008,9 @@ static int encode_open_downgrade(struct xdr_stream *xdr, const struct nfs_closea
{ {
__be32 *p; __be32 *p;
RESERVE_SPACE(8+sizeof(arg->stateid->data)); RESERVE_SPACE(4+NFS4_STATEID_SIZE+4);
WRITE32(OP_OPEN_DOWNGRADE); WRITE32(OP_OPEN_DOWNGRADE);
WRITEMEM(arg->stateid->data, sizeof(arg->stateid->data)); WRITEMEM(arg->stateid->data, NFS4_STATEID_SIZE);
WRITE32(arg->seqid->sequence->counter); WRITE32(arg->seqid->sequence->counter);
encode_share_access(xdr, arg->open_flags); encode_share_access(xdr, arg->open_flags);
return 0; return 0;
...@@ -1045,12 +1045,12 @@ static void encode_stateid(struct xdr_stream *xdr, const struct nfs_open_context ...@@ -1045,12 +1045,12 @@ static void encode_stateid(struct xdr_stream *xdr, const struct nfs_open_context
nfs4_stateid stateid; nfs4_stateid stateid;
__be32 *p; __be32 *p;
RESERVE_SPACE(16); RESERVE_SPACE(NFS4_STATEID_SIZE);
if (ctx->state != NULL) { if (ctx->state != NULL) {
nfs4_copy_stateid(&stateid, ctx->state, ctx->lockowner); nfs4_copy_stateid(&stateid, ctx->state, ctx->lockowner);
WRITEMEM(stateid.data, sizeof(stateid.data)); WRITEMEM(stateid.data, NFS4_STATEID_SIZE);
} else } else
WRITEMEM(zero_stateid.data, sizeof(zero_stateid.data)); WRITEMEM(zero_stateid.data, NFS4_STATEID_SIZE);
} }
static int encode_read(struct xdr_stream *xdr, const struct nfs_readargs *args) static int encode_read(struct xdr_stream *xdr, const struct nfs_readargs *args)
...@@ -1079,10 +1079,10 @@ static int encode_readdir(struct xdr_stream *xdr, const struct nfs4_readdir_arg ...@@ -1079,10 +1079,10 @@ static int encode_readdir(struct xdr_stream *xdr, const struct nfs4_readdir_arg
int replen; int replen;
__be32 *p; __be32 *p;
RESERVE_SPACE(32+sizeof(nfs4_verifier)); RESERVE_SPACE(12+NFS4_VERIFIER_SIZE+20);
WRITE32(OP_READDIR); WRITE32(OP_READDIR);
WRITE64(readdir->cookie); WRITE64(readdir->cookie);
WRITEMEM(readdir->verifier.data, sizeof(readdir->verifier.data)); WRITEMEM(readdir->verifier.data, NFS4_VERIFIER_SIZE);
WRITE32(readdir->count >> 1); /* We're not doing readdirplus */ WRITE32(readdir->count >> 1); /* We're not doing readdirplus */
WRITE32(readdir->count); WRITE32(readdir->count);
WRITE32(2); WRITE32(2);
...@@ -1190,9 +1190,9 @@ encode_setacl(struct xdr_stream *xdr, struct nfs_setaclargs *arg) ...@@ -1190,9 +1190,9 @@ encode_setacl(struct xdr_stream *xdr, struct nfs_setaclargs *arg)
{ {
__be32 *p; __be32 *p;
RESERVE_SPACE(4+sizeof(zero_stateid.data)); RESERVE_SPACE(4+NFS4_STATEID_SIZE);
WRITE32(OP_SETATTR); WRITE32(OP_SETATTR);
WRITEMEM(zero_stateid.data, sizeof(zero_stateid.data)); WRITEMEM(zero_stateid.data, NFS4_STATEID_SIZE);
RESERVE_SPACE(2*4); RESERVE_SPACE(2*4);
WRITE32(1); WRITE32(1);
WRITE32(FATTR4_WORD0_ACL); WRITE32(FATTR4_WORD0_ACL);
...@@ -1220,9 +1220,9 @@ static int encode_setattr(struct xdr_stream *xdr, const struct nfs_setattrargs * ...@@ -1220,9 +1220,9 @@ static int encode_setattr(struct xdr_stream *xdr, const struct nfs_setattrargs *
int status; int status;
__be32 *p; __be32 *p;
RESERVE_SPACE(4+sizeof(arg->stateid.data)); RESERVE_SPACE(4+NFS4_STATEID_SIZE);
WRITE32(OP_SETATTR); WRITE32(OP_SETATTR);
WRITEMEM(arg->stateid.data, sizeof(arg->stateid.data)); WRITEMEM(arg->stateid.data, NFS4_STATEID_SIZE);
if ((status = encode_attrs(xdr, arg->iap, server))) if ((status = encode_attrs(xdr, arg->iap, server)))
return status; return status;
...@@ -1234,9 +1234,9 @@ static int encode_setclientid(struct xdr_stream *xdr, const struct nfs4_setclien ...@@ -1234,9 +1234,9 @@ static int encode_setclientid(struct xdr_stream *xdr, const struct nfs4_setclien
{ {
__be32 *p; __be32 *p;
RESERVE_SPACE(4 + sizeof(setclientid->sc_verifier->data)); RESERVE_SPACE(4 + NFS4_VERIFIER_SIZE);
WRITE32(OP_SETCLIENTID); WRITE32(OP_SETCLIENTID);
WRITEMEM(setclientid->sc_verifier->data, sizeof(setclientid->sc_verifier->data)); WRITEMEM(setclientid->sc_verifier->data, NFS4_VERIFIER_SIZE);
encode_string(xdr, setclientid->sc_name_len, setclientid->sc_name); encode_string(xdr, setclientid->sc_name_len, setclientid->sc_name);
RESERVE_SPACE(4); RESERVE_SPACE(4);
...@@ -1253,10 +1253,10 @@ static int encode_setclientid_confirm(struct xdr_stream *xdr, const struct nfs_c ...@@ -1253,10 +1253,10 @@ static int encode_setclientid_confirm(struct xdr_stream *xdr, const struct nfs_c
{ {
__be32 *p; __be32 *p;
RESERVE_SPACE(12 + sizeof(client_state->cl_confirm.data)); RESERVE_SPACE(12 + NFS4_VERIFIER_SIZE);
WRITE32(OP_SETCLIENTID_CONFIRM); WRITE32(OP_SETCLIENTID_CONFIRM);
WRITE64(client_state->cl_clientid); WRITE64(client_state->cl_clientid);
WRITEMEM(client_state->cl_confirm.data, sizeof(client_state->cl_confirm.data)); WRITEMEM(client_state->cl_confirm.data, NFS4_VERIFIER_SIZE);
return 0; return 0;
} }
...@@ -1284,10 +1284,10 @@ static int encode_delegreturn(struct xdr_stream *xdr, const nfs4_stateid *statei ...@@ -1284,10 +1284,10 @@ static int encode_delegreturn(struct xdr_stream *xdr, const nfs4_stateid *statei
{ {
__be32 *p; __be32 *p;
RESERVE_SPACE(20); RESERVE_SPACE(4+NFS4_STATEID_SIZE);
WRITE32(OP_DELEGRETURN); WRITE32(OP_DELEGRETURN);
WRITEMEM(stateid->data, sizeof(stateid->data)); WRITEMEM(stateid->data, NFS4_STATEID_SIZE);
return 0; return 0;
} }
...@@ -2897,8 +2897,8 @@ static int decode_close(struct xdr_stream *xdr, struct nfs_closeres *res) ...@@ -2897,8 +2897,8 @@ static int decode_close(struct xdr_stream *xdr, struct nfs_closeres *res)
status = decode_op_hdr(xdr, OP_CLOSE); status = decode_op_hdr(xdr, OP_CLOSE);
if (status) if (status)
return status; return status;
READ_BUF(sizeof(res->stateid.data)); READ_BUF(NFS4_STATEID_SIZE);
COPYMEM(res->stateid.data, sizeof(res->stateid.data)); COPYMEM(res->stateid.data, NFS4_STATEID_SIZE);
return 0; return 0;
} }
...@@ -3186,8 +3186,8 @@ static int decode_lock(struct xdr_stream *xdr, struct nfs_lock_res *res) ...@@ -3186,8 +3186,8 @@ static int decode_lock(struct xdr_stream *xdr, struct nfs_lock_res *res)
status = decode_op_hdr(xdr, OP_LOCK); status = decode_op_hdr(xdr, OP_LOCK);
if (status == 0) { if (status == 0) {
READ_BUF(sizeof(res->stateid.data)); READ_BUF(NFS4_STATEID_SIZE);
COPYMEM(res->stateid.data, sizeof(res->stateid.data)); COPYMEM(res->stateid.data, NFS4_STATEID_SIZE);
} else if (status == -NFS4ERR_DENIED) } else if (status == -NFS4ERR_DENIED)
return decode_lock_denied(xdr, NULL); return decode_lock_denied(xdr, NULL);
return status; return status;
...@@ -3209,8 +3209,8 @@ static int decode_locku(struct xdr_stream *xdr, struct nfs_locku_res *res) ...@@ -3209,8 +3209,8 @@ static int decode_locku(struct xdr_stream *xdr, struct nfs_locku_res *res)
status = decode_op_hdr(xdr, OP_LOCKU); status = decode_op_hdr(xdr, OP_LOCKU);
if (status == 0) { if (status == 0) {
READ_BUF(sizeof(res->stateid.data)); READ_BUF(NFS4_STATEID_SIZE);
COPYMEM(res->stateid.data, sizeof(res->stateid.data)); COPYMEM(res->stateid.data, NFS4_STATEID_SIZE);
} }
return status; return status;
} }
...@@ -3251,8 +3251,8 @@ static int decode_delegation(struct xdr_stream *xdr, struct nfs_openres *res) ...@@ -3251,8 +3251,8 @@ static int decode_delegation(struct xdr_stream *xdr, struct nfs_openres *res)
res->delegation_type = 0; res->delegation_type = 0;
return 0; return 0;
} }
READ_BUF(20); READ_BUF(NFS4_STATEID_SIZE+4);
COPYMEM(res->delegation.data, sizeof(res->delegation.data)); COPYMEM(res->delegation.data, NFS4_STATEID_SIZE);
READ32(res->do_recall); READ32(res->do_recall);
switch (delegation_type) { switch (delegation_type) {
case NFS4_OPEN_DELEGATE_READ: case NFS4_OPEN_DELEGATE_READ:
...@@ -3275,8 +3275,8 @@ static int decode_open(struct xdr_stream *xdr, struct nfs_openres *res) ...@@ -3275,8 +3275,8 @@ static int decode_open(struct xdr_stream *xdr, struct nfs_openres *res)
status = decode_op_hdr(xdr, OP_OPEN); status = decode_op_hdr(xdr, OP_OPEN);
if (status) if (status)
return status; return status;
READ_BUF(sizeof(res->stateid.data)); READ_BUF(NFS4_STATEID_SIZE);
COPYMEM(res->stateid.data, sizeof(res->stateid.data)); COPYMEM(res->stateid.data, NFS4_STATEID_SIZE);
decode_change_info(xdr, &res->cinfo); decode_change_info(xdr, &res->cinfo);
...@@ -3302,8 +3302,8 @@ static int decode_open_confirm(struct xdr_stream *xdr, struct nfs_open_confirmre ...@@ -3302,8 +3302,8 @@ static int decode_open_confirm(struct xdr_stream *xdr, struct nfs_open_confirmre
status = decode_op_hdr(xdr, OP_OPEN_CONFIRM); status = decode_op_hdr(xdr, OP_OPEN_CONFIRM);
if (status) if (status)
return status; return status;
READ_BUF(sizeof(res->stateid.data)); READ_BUF(NFS4_STATEID_SIZE);
COPYMEM(res->stateid.data, sizeof(res->stateid.data)); COPYMEM(res->stateid.data, NFS4_STATEID_SIZE);
return 0; return 0;
} }
...@@ -3315,8 +3315,8 @@ static int decode_open_downgrade(struct xdr_stream *xdr, struct nfs_closeres *re ...@@ -3315,8 +3315,8 @@ static int decode_open_downgrade(struct xdr_stream *xdr, struct nfs_closeres *re
status = decode_op_hdr(xdr, OP_OPEN_DOWNGRADE); status = decode_op_hdr(xdr, OP_OPEN_DOWNGRADE);
if (status) if (status)
return status; return status;
READ_BUF(sizeof(res->stateid.data)); READ_BUF(NFS4_STATEID_SIZE);
COPYMEM(res->stateid.data, sizeof(res->stateid.data)); COPYMEM(res->stateid.data, NFS4_STATEID_SIZE);
return 0; return 0;
} }
...@@ -3590,9 +3590,9 @@ static int decode_setclientid(struct xdr_stream *xdr, struct nfs_client *clp) ...@@ -3590,9 +3590,9 @@ static int decode_setclientid(struct xdr_stream *xdr, struct nfs_client *clp)
} }
READ32(nfserr); READ32(nfserr);
if (nfserr == NFS_OK) { if (nfserr == NFS_OK) {
READ_BUF(8 + sizeof(clp->cl_confirm.data)); READ_BUF(8 + NFS4_VERIFIER_SIZE);
READ64(clp->cl_clientid); READ64(clp->cl_clientid);
COPYMEM(clp->cl_confirm.data, sizeof(clp->cl_confirm.data)); COPYMEM(clp->cl_confirm.data, NFS4_VERIFIER_SIZE);
} else if (nfserr == NFSERR_CLID_INUSE) { } else if (nfserr == NFSERR_CLID_INUSE) {
uint32_t len; uint32_t len;
......
...@@ -16,6 +16,7 @@ ...@@ -16,6 +16,7 @@
#include <linux/types.h> #include <linux/types.h>
#define NFS4_VERIFIER_SIZE 8 #define NFS4_VERIFIER_SIZE 8
#define NFS4_STATEID_SIZE 16
#define NFS4_FHSIZE 128 #define NFS4_FHSIZE 128
#define NFS4_MAXPATHLEN PATH_MAX #define NFS4_MAXPATHLEN PATH_MAX
#define NFS4_MAXNAMLEN NAME_MAX #define NFS4_MAXNAMLEN NAME_MAX
...@@ -113,7 +114,7 @@ struct nfs4_acl { ...@@ -113,7 +114,7 @@ struct nfs4_acl {
}; };
typedef struct { char data[NFS4_VERIFIER_SIZE]; } nfs4_verifier; typedef struct { char data[NFS4_VERIFIER_SIZE]; } nfs4_verifier;
typedef struct { char data[16]; } nfs4_stateid; typedef struct { char data[NFS4_STATEID_SIZE]; } nfs4_stateid;
enum nfs_opnum4 { enum nfs_opnum4 {
OP_ACCESS = 3, OP_ACCESS = 3,
......
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