Commit 4ef4aee6 authored by David Howells's avatar David Howells Committed by Steve French
Browse files

cifs: Fix cifs_limit_bvec_subset() to correctly check the maxmimum size



Fix cifs_limit_bvec_subset() so that it limits the span to the maximum
specified and won't return with a size greater than max_size.

Fixes: d08089f6 ("cifs: Change the I/O paths to use an iterator rather than a page list")
Cc: stable@vger.kernel.org # 6.3
Reported-by: default avatarShyam Prasad N <sprasad@microsoft.com>
Reviewed-by: default avatarShyam Prasad N <sprasad@microsoft.com>
Signed-off-by: default avatarDavid Howells <dhowells@redhat.com>
cc: Steve French <smfrench@gmail.com>
cc: Rohith Surabattula <rohiths.msft@gmail.com>
cc: Paulo Alcantara <pc@manguebit.com>
cc: Tom Talpey <tom@talpey.com>
cc: Jeff Layton <jlayton@kernel.org>
cc: linux-cifs@vger.kernel.org
cc: linux-fsdevel@vger.kernel.org
Signed-off-by: default avatarSteve French <stfrench@microsoft.com>
parent 44c026a7
Loading
Loading
Loading
Loading
+2 −1
Original line number Original line Diff line number Diff line
@@ -3353,9 +3353,10 @@ static size_t cifs_limit_bvec_subset(const struct iov_iter *iter, size_t max_siz
	while (n && ix < nbv) {
	while (n && ix < nbv) {
		len = min3(n, bvecs[ix].bv_len - skip, max_size);
		len = min3(n, bvecs[ix].bv_len - skip, max_size);
		span += len;
		span += len;
		max_size -= len;
		nsegs++;
		nsegs++;
		ix++;
		ix++;
		if (span >= max_size || nsegs >= max_segs)
		if (max_size == 0 || nsegs >= max_segs)
			break;
			break;
		skip = 0;
		skip = 0;
		n -= len;
		n -= len;