diff options
Diffstat (limited to 'fs/nfsd/nfs4xdr.c')
| -rw-r--r-- | fs/nfsd/nfs4xdr.c | 19 | 
1 files changed, 5 insertions, 14 deletions
diff --git a/fs/nfsd/nfs4xdr.c b/fs/nfsd/nfs4xdr.c index 1cf154511da..888a600dad8 100644 --- a/fs/nfsd/nfs4xdr.c +++ b/fs/nfsd/nfs4xdr.c @@ -344,10 +344,7 @@ nfsd4_decode_fattr(struct nfsd4_compoundargs *argp, u32 *bmval,  			   all 32 bits of 'nseconds'. */  			READ_BUF(12);  			len += 12; -			READ32(dummy32); -			if (dummy32) -				return nfserr_inval; -			READ32(iattr->ia_atime.tv_sec); +			READ64(iattr->ia_atime.tv_sec);  			READ32(iattr->ia_atime.tv_nsec);  			if (iattr->ia_atime.tv_nsec >= (u32)1000000000)  				return nfserr_inval; @@ -370,10 +367,7 @@ nfsd4_decode_fattr(struct nfsd4_compoundargs *argp, u32 *bmval,  			   all 32 bits of 'nseconds'. */  			READ_BUF(12);  			len += 12; -			READ32(dummy32); -			if (dummy32) -				return nfserr_inval; -			READ32(iattr->ia_mtime.tv_sec); +			READ64(iattr->ia_mtime.tv_sec);  			READ32(iattr->ia_mtime.tv_nsec);  			if (iattr->ia_mtime.tv_nsec >= (u32)1000000000)  				return nfserr_inval; @@ -2372,8 +2366,7 @@ out_acl:  	if (bmval1 & FATTR4_WORD1_TIME_ACCESS) {  		if ((buflen -= 12) < 0)  			goto out_resource; -		WRITE32(0); -		WRITE32(stat.atime.tv_sec); +		WRITE64((s64)stat.atime.tv_sec);  		WRITE32(stat.atime.tv_nsec);  	}  	if (bmval1 & FATTR4_WORD1_TIME_DELTA) { @@ -2386,15 +2379,13 @@ out_acl:  	if (bmval1 & FATTR4_WORD1_TIME_METADATA) {  		if ((buflen -= 12) < 0)  			goto out_resource; -		WRITE32(0); -		WRITE32(stat.ctime.tv_sec); +		WRITE64((s64)stat.ctime.tv_sec);  		WRITE32(stat.ctime.tv_nsec);  	}  	if (bmval1 & FATTR4_WORD1_TIME_MODIFY) {  		if ((buflen -= 12) < 0)  			goto out_resource; -		WRITE32(0); -		WRITE32(stat.mtime.tv_sec); +		WRITE64((s64)stat.mtime.tv_sec);  		WRITE32(stat.mtime.tv_nsec);  	}  	if (bmval1 & FATTR4_WORD1_MOUNTED_ON_FILEID) {  |