Loading block/bio.c +2 −19 Original line number Diff line number Diff line Loading @@ -1324,32 +1324,15 @@ struct bio *bio_map_user_iov(struct request_queue *q, gfp_t gfp_mask) { int j; int nr_pages = 0; struct bio *bio; int ret; struct iov_iter i; struct iovec iov; struct bio_vec *bvec; iov_for_each(iov, i, *iter) { unsigned long uaddr = (unsigned long) iov.iov_base; unsigned long len = iov.iov_len; unsigned long end = (uaddr + len + PAGE_SIZE - 1) >> PAGE_SHIFT; unsigned long start = uaddr >> PAGE_SHIFT; /* * Overflow, abort */ if (end < start) return ERR_PTR(-EINVAL); nr_pages += end - start; } if (!nr_pages) if (!iov_iter_count(iter)) return ERR_PTR(-EINVAL); bio = bio_kmalloc(gfp_mask, nr_pages); bio = bio_kmalloc(gfp_mask, iov_iter_npages(iter, BIO_MAX_PAGES)); if (!bio) return ERR_PTR(-ENOMEM); Loading Loading
block/bio.c +2 −19 Original line number Diff line number Diff line Loading @@ -1324,32 +1324,15 @@ struct bio *bio_map_user_iov(struct request_queue *q, gfp_t gfp_mask) { int j; int nr_pages = 0; struct bio *bio; int ret; struct iov_iter i; struct iovec iov; struct bio_vec *bvec; iov_for_each(iov, i, *iter) { unsigned long uaddr = (unsigned long) iov.iov_base; unsigned long len = iov.iov_len; unsigned long end = (uaddr + len + PAGE_SIZE - 1) >> PAGE_SHIFT; unsigned long start = uaddr >> PAGE_SHIFT; /* * Overflow, abort */ if (end < start) return ERR_PTR(-EINVAL); nr_pages += end - start; } if (!nr_pages) if (!iov_iter_count(iter)) return ERR_PTR(-EINVAL); bio = bio_kmalloc(gfp_mask, nr_pages); bio = bio_kmalloc(gfp_mask, iov_iter_npages(iter, BIO_MAX_PAGES)); if (!bio) return ERR_PTR(-ENOMEM); Loading