Patch "NFSD: Fix NFSv3 SETATTR/CREATE's handling of large file sizes" has been added to the 5.10-stable tree

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



This is a note to let you know that I've just added the patch titled

    NFSD: Fix NFSv3 SETATTR/CREATE's handling of large file sizes

to the 5.10-stable tree which can be found at:
    http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary

The filename of the patch is:
     nfsd-fix-nfsv3-setattr-create-s-handling-of-large-fi.patch
and it can be found in the queue-5.10 subdirectory.

If you, or anyone else, feels it should not be added to the stable tree,
please let <stable@xxxxxxxxxxxxxxx> know about it.



commit 3bdd1c65ac7609f93617c426b6ffd6b226ad892a
Author: Chuck Lever <chuck.lever@xxxxxxxxxx>
Date:   Tue Jan 25 15:59:57 2022 -0500

    NFSD: Fix NFSv3 SETATTR/CREATE's handling of large file sizes
    
    [ Upstream commit a648fdeb7c0e17177a2280344d015dba3fbe3314 ]
    
    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@xxxxxxxxxxxxxxx
    Signed-off-by: Chuck Lever <chuck.lever@xxxxxxxxxx>
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/fs/nfsd/nfs3xdr.c b/fs/nfsd/nfs3xdr.c
index 7c45ba4db61be..2e47a07029f1d 100644
--- a/fs/nfsd/nfs3xdr.c
+++ b/fs/nfsd/nfs3xdr.c
@@ -254,7 +254,7 @@ svcxdr_decode_sattr3(struct svc_rqst *rqstp, struct xdr_stream *xdr,
 		if (xdr_stream_decode_u64(xdr, &newsize) < 0)
 			return false;
 		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)
 		return false;




[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux