]> www.infradead.org Git - users/dwmw2/linux.git/commitdiff
lib/iov_iter: fix bvec iterator setup
authorMing Lei <ming.lei@redhat.com>
Sat, 2 Nov 2024 01:42:11 +0000 (09:42 +0800)
committerJens Axboe <axboe@kernel.dk>
Sat, 2 Nov 2024 02:18:21 +0000 (20:18 -0600)
.bi_size of bvec iterator should be initialized as real max size for
walking, and .bi_bvec_done just counts how many bytes need to be
skipped in the 1st bvec, so .bi_size isn't related with .bi_bvec_done.

This patch fixes bvec iterator initialization, and the inner `size`
check isn't needed any more, so revert Eric Dumazet's commit
7bc802acf193 ("iov-iter: do not return more bytes than requested in
iov_iter_extract_bvec_pages()").

Cc: Eric Dumazet <edumazet@google.com>
Fixes: e4e535bff2bc ("iov_iter: don't require contiguous pages in iov_iter_extract_bvec_pages")
Reported-by: syzbot+71abe7ab2b70bca770fd@syzkaller.appspotmail.com
Tested-by: syzbot+71abe7ab2b70bca770fd@syzkaller.appspotmail.com
Signed-off-by: Ming Lei <ming.lei@redhat.com>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
lib/iov_iter.c

index c761f6db3cb482dd613c93720417dab568535652..4a54c7af62c05811465049e82dc57365932c137a 100644 (file)
@@ -1700,7 +1700,7 @@ static ssize_t iov_iter_extract_bvec_pages(struct iov_iter *i,
                skip = 0;
        }
        bi.bi_idx = 0;
-       bi.bi_size = maxsize + skip;
+       bi.bi_size = maxsize;
        bi.bi_bvec_done = skip;
 
        maxpages = want_pages_array(pages, maxsize, skip, maxpages);