* [PATCH AUTOSEL 6.1 20/22] block: Allow bio_iov_iter_get_pages() with bio->bi_bdev unset [not found] <20230908193407.3463368-1-sashal@kernel.org> @ 2023-09-08 19:34 ` Sasha Levin 2023-09-11 9:54 ` Pavel Machek 0 siblings, 1 reply; 4+ messages in thread From: Sasha Levin @ 2023-09-08 19:34 UTC (permalink / raw) To: linux-kernel, stable Cc: Kent Overstreet, Jens Axboe, linux-block, Sasha Levin From: Kent Overstreet <kent.overstreet@linux.dev> [ Upstream commit 168145f617d57bf4e474901b7ffa869337a802e6 ] bio_iov_iter_get_pages() trims the IO based on the block size of the block device the IO will be issued to. However, bcachefs is a multi device filesystem; when we're creating the bio we don't yet know which block device the bio will be submitted to - we have to handle the alignment checks elsewhere. Thus this is needed to avoid a null ptr deref. Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev> Cc: Jens Axboe <axboe@kernel.dk> Cc: linux-block@vger.kernel.org Link: https://lore.kernel.org/r/20230813182636.2966159-3-kent.overstreet@linux.dev Signed-off-by: Jens Axboe <axboe@kernel.dk> Signed-off-by: Sasha Levin <sashal@kernel.org> --- block/bio.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/block/bio.c b/block/bio.c index d5cd825d6efc0..54c8d11f09663 100644 --- a/block/bio.c +++ b/block/bio.c @@ -1198,7 +1198,7 @@ static int __bio_iov_iter_get_pages(struct bio *bio, struct iov_iter *iter) struct page **pages = (struct page **)bv; ssize_t size, left; unsigned len, i = 0; - size_t offset, trim; + size_t offset; int ret = 0; /* @@ -1223,10 +1223,12 @@ static int __bio_iov_iter_get_pages(struct bio *bio, struct iov_iter *iter) nr_pages = DIV_ROUND_UP(offset + size, PAGE_SIZE); - trim = size & (bdev_logical_block_size(bio->bi_bdev) - 1); - iov_iter_revert(iter, trim); + if (bio->bi_bdev) { + size_t trim = size & (bdev_logical_block_size(bio->bi_bdev) - 1); + iov_iter_revert(iter, trim); + size -= trim; + } - size -= trim; if (unlikely(!size)) { ret = -EFAULT; goto out; -- 2.40.1 ^ permalink raw reply related [flat|nested] 4+ messages in thread
* Re: [PATCH AUTOSEL 6.1 20/22] block: Allow bio_iov_iter_get_pages() with bio->bi_bdev unset 2023-09-08 19:34 ` [PATCH AUTOSEL 6.1 20/22] block: Allow bio_iov_iter_get_pages() with bio->bi_bdev unset Sasha Levin @ 2023-09-11 9:54 ` Pavel Machek 2023-09-11 13:15 ` Jens Axboe 0 siblings, 1 reply; 4+ messages in thread From: Pavel Machek @ 2023-09-11 9:54 UTC (permalink / raw) To: Sasha Levin Cc: linux-kernel, stable, Kent Overstreet, Jens Axboe, linux-block [-- Attachment #1: Type: text/plain, Size: 1569 bytes --] Hi! > From: Kent Overstreet <kent.overstreet@linux.dev> > > [ Upstream commit 168145f617d57bf4e474901b7ffa869337a802e6 ] > > bio_iov_iter_get_pages() trims the IO based on the block size of the > block device the IO will be issued to. > > However, bcachefs is a multi device filesystem; when we're creating the > bio we don't yet know which block device the bio will be submitted to - > we have to handle the alignment checks elsewhere. > > Thus this is needed to avoid a null ptr deref. We are certainly not going to backport bcachefs to -stable. Please drop. BR, Pavel > +++ b/block/bio.c > @@ -1198,7 +1198,7 @@ static int __bio_iov_iter_get_pages(struct bio *bio, struct iov_iter *iter) > struct page **pages = (struct page **)bv; > ssize_t size, left; > unsigned len, i = 0; > - size_t offset, trim; > + size_t offset; > int ret = 0; > > /* > @@ -1223,10 +1223,12 @@ static int __bio_iov_iter_get_pages(struct bio *bio, struct iov_iter *iter) > > nr_pages = DIV_ROUND_UP(offset + size, PAGE_SIZE); > > - trim = size & (bdev_logical_block_size(bio->bi_bdev) - 1); > - iov_iter_revert(iter, trim); > + if (bio->bi_bdev) { > + size_t trim = size & (bdev_logical_block_size(bio->bi_bdev) - 1); > + iov_iter_revert(iter, trim); > + size -= trim; > + } > > - size -= trim; > if (unlikely(!size)) { > ret = -EFAULT; > goto out; -- DENX Software Engineering GmbH, Managing Director: Erika Unter HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany [-- Attachment #2: signature.asc --] [-- Type: application/pgp-signature, Size: 195 bytes --] ^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH AUTOSEL 6.1 20/22] block: Allow bio_iov_iter_get_pages() with bio->bi_bdev unset 2023-09-11 9:54 ` Pavel Machek @ 2023-09-11 13:15 ` Jens Axboe 2023-09-18 20:57 ` Sasha Levin 0 siblings, 1 reply; 4+ messages in thread From: Jens Axboe @ 2023-09-11 13:15 UTC (permalink / raw) To: Pavel Machek, Sasha Levin Cc: linux-kernel, stable, Kent Overstreet, linux-block On 9/11/23 3:54 AM, Pavel Machek wrote: > Hi! > >> From: Kent Overstreet <kent.overstreet@linux.dev> >> >> [ Upstream commit 168145f617d57bf4e474901b7ffa869337a802e6 ] >> >> bio_iov_iter_get_pages() trims the IO based on the block size of the >> block device the IO will be issued to. >> >> However, bcachefs is a multi device filesystem; when we're creating the >> bio we don't yet know which block device the bio will be submitted to - >> we have to handle the alignment checks elsewhere. >> >> Thus this is needed to avoid a null ptr deref. > > We are certainly not going to backport bcachefs to -stable. Please > drop. I already said as much 3 days ago: https://lore.kernel.org/all/cd341326-cfaf-4796-8894-2241e7b630d9@kernel.dk/ but didn't hear back yet. -- Jens Axboe ^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH AUTOSEL 6.1 20/22] block: Allow bio_iov_iter_get_pages() with bio->bi_bdev unset 2023-09-11 13:15 ` Jens Axboe @ 2023-09-18 20:57 ` Sasha Levin 0 siblings, 0 replies; 4+ messages in thread From: Sasha Levin @ 2023-09-18 20:57 UTC (permalink / raw) To: Jens Axboe Cc: Pavel Machek, linux-kernel, stable, Kent Overstreet, linux-block On Mon, Sep 11, 2023 at 07:15:18AM -0600, Jens Axboe wrote: >On 9/11/23 3:54 AM, Pavel Machek wrote: >> Hi! >> >>> From: Kent Overstreet <kent.overstreet@linux.dev> >>> >>> [ Upstream commit 168145f617d57bf4e474901b7ffa869337a802e6 ] >>> >>> bio_iov_iter_get_pages() trims the IO based on the block size of the >>> block device the IO will be issued to. >>> >>> However, bcachefs is a multi device filesystem; when we're creating the >>> bio we don't yet know which block device the bio will be submitted to - >>> we have to handle the alignment checks elsewhere. >>> >>> Thus this is needed to avoid a null ptr deref. >> >> We are certainly not going to backport bcachefs to -stable. Please >> drop. > >I already said as much 3 days ago: > >https://lore.kernel.org/all/cd341326-cfaf-4796-8894-2241e7b630d9@kernel.dk/ > >but didn't hear back yet. Dropped, and sorry for lack of timely replies on this - I let them collect feedback for a few weeks before going through it and dropping what needs to be dropped. -- Thanks, Sasha ^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2023-09-18 20:58 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
[not found] <20230908193407.3463368-1-sashal@kernel.org>
2023-09-08 19:34 ` [PATCH AUTOSEL 6.1 20/22] block: Allow bio_iov_iter_get_pages() with bio->bi_bdev unset Sasha Levin
2023-09-11 9:54 ` Pavel Machek
2023-09-11 13:15 ` Jens Axboe
2023-09-18 20:57 ` Sasha Levin
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox