mirror of
https://github.com/torvalds/linux.git
synced 2026-09-14 16:10:02 +02:00
nfsd: use NSEC_PER_SEC in nfsd4_decode_nfstime4()
nfsd4_decode_nfstime4() open-codes the nanoseconds upper bound as the literal (u32)1000000000. Use the named constant NSEC_PER_SEC instead, matching the NFSv3 setattr check and improving readability. The original code cast the literal to u32 to force an unsigned comparison, which matters on 32-bit where tv_nsec is a 32-bit signed long: an out-of-range u32 wire nseconds (>= 0x80000000) assigned to it becomes negative and a signed compare against NSEC_PER_SEC (a signed long) would wrongly pass. Keep that protection by casting tv_nsec to unsigned long, the same width as tv_nsec, matching timespec64_valid(). No functional change. Signed-off-by: Robbie Ko <robbieko@synology.com> Reviewed-by: Jeff Layton <jlayton@kernel.org> Link: https://patch.msgid.link/20260616054027.2360930-3-robbieko@synology.com Signed-off-by: Chuck Lever <cel@kernel.org>
This commit is contained in:
parent
eb0eca7720
commit
868f1ff2e7
|
|
@ -244,7 +244,7 @@ nfsd4_decode_nfstime4(struct nfsd4_compoundargs *argp, struct timespec64 *tv)
|
|||
return nfserr_bad_xdr;
|
||||
p = xdr_decode_hyper(p, &tv->tv_sec);
|
||||
tv->tv_nsec = be32_to_cpup(p++);
|
||||
if (tv->tv_nsec >= (u32)1000000000)
|
||||
if ((unsigned long)tv->tv_nsec >= NSEC_PER_SEC)
|
||||
return nfserr_inval;
|
||||
return nfs_ok;
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user