NFSD: Fix nfs4_verifier memory alignment
authorChuck Lever <chuck.lever@oracle.com>
Fri, 2 Mar 2012 22:13:50 +0000 (17:13 -0500)
committerJ. Bruce Fields <bfields@redhat.com>
Tue, 20 Mar 2012 19:36:15 +0000 (15:36 -0400)
commitab4684d1560f8d77f6ce82bd3f1f82937070d397
tree71da95fc7b956d6c69f9ecf5ef98a76b158c387f
parent8f199b8262cb150d055d29ba31faf0128ace4714
NFSD: Fix nfs4_verifier memory alignment

Clean up due to code review.

The nfs4_verifier's data field is not guaranteed to be u32-aligned.
Casting an array of chars to a u32 * is considered generally
hazardous.

We can fix most of this by using a __be32 array to generate the
verifier's contents and then byte-copying it into the verifier field.

However, there is one spot where there is a backwards compatibility
constraint: the do_nfsd_create() call expects a verifier which is
32-bit aligned.  Fix this spot by forcing the alignment of the create
verifier in the nfsd4_open args structure.

Also, sizeof(nfs4_verifer) is the size of the in-core verifier data
structure, but NFS4_VERIFIER_SIZE is the number of octets in an XDR'd
verifier.  The two are not interchangeable, even if they happen to
have the same value.

Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
Signed-off-by: J. Bruce Fields <bfields@redhat.com>
fs/nfsd/nfs4proc.c
fs/nfsd/nfs4state.c
fs/nfsd/nfs4xdr.c
fs/nfsd/xdr4.h