Re: [PATCH] block: Fix start and length check added to iov_iter_extract_bvecs()
From: Keith Busch
Date: Wed Aug 26 2026 - 14:35:08 EST
On Wed, Aug 26, 2026 at 07:18:37PM +0100, David Howells wrote:
> @@ -1921,15 +1921,19 @@ ssize_t iov_iter_extract_bvecs(struct iov_iter *iter, struct bio_vec *bv,
> unsigned short max_vecs, unsigned mem_align_mask,
> iov_iter_extraction_t extraction_flags)
> {
> - unsigned long start = (unsigned long)iter_iov_addr(iter);
> unsigned short entries_left = max_vecs - *nr_vecs;
> unsigned short nr_pages, i = 0;
> size_t left, offset, len;
> struct page **pages;
> ssize_t size;
>
> - if ((start | iter_iov_len(iter)) & mem_align_mask)
> + if (iov_iter_alignment(iter) & mem_align_mask) {
> + pr_warn("%u %zx %x\n",
> + iter->iter_type,
> + iov_iter_alignment(iter),
> + mem_align_mask);
> return -EINVAL;
> + }
iov_iter_alignment loops over all the vectors when we only need to
examine the current one here.