mirror of
https://github.com/torvalds/linux.git
synced 2024-11-11 06:31:49 +00:00
NFSD: Fix NFSv3 SETATTR/CREATE's handling of large file sizes
iattr::ia_size is a loff_t, so these NFSv3 procedures must be careful to deal with incoming client size values that are larger than s64_max without corrupting the value. Silently capping the value results in storing a different value than the client passed in which is unexpected behavior, so remove the min_t() check in decode_sattr3(). Note that RFC 1813 permits only the WRITE procedure to return NFS3ERR_FBIG. We believe that NFSv3 reference implementations also return NFS3ERR_FBIG when ia_size is too large. Cc: stable@vger.kernel.org Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
This commit is contained in:
parent
e6faac3f58
commit
a648fdeb7c
@ -254,7 +254,7 @@ svcxdr_decode_sattr3(struct svc_rqst *rqstp, struct xdr_stream *xdr,
|
|||||||
if (xdr_stream_decode_u64(xdr, &newsize) < 0)
|
if (xdr_stream_decode_u64(xdr, &newsize) < 0)
|
||||||
return false;
|
return false;
|
||||||
iap->ia_valid |= ATTR_SIZE;
|
iap->ia_valid |= ATTR_SIZE;
|
||||||
iap->ia_size = min_t(u64, newsize, NFS_OFFSET_MAX);
|
iap->ia_size = newsize;
|
||||||
}
|
}
|
||||||
if (xdr_stream_decode_u32(xdr, &set_it) < 0)
|
if (xdr_stream_decode_u32(xdr, &set_it) < 0)
|
||||||
return false;
|
return false;
|
||||||
|
Loading…
Reference in New Issue
Block a user