linux-block.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 0/4] Add blk_validate_block_size() helper for drivers to validate block size
@ 2021-10-25  9:43 Xie Yongji
  2021-10-25  9:43 ` [PATCH 1/4] block: Add a helper to validate the " Xie Yongji
                   ` (3 more replies)
  0 siblings, 4 replies; 9+ messages in thread
From: Xie Yongji @ 2021-10-25  9:43 UTC (permalink / raw)
  To: axboe, hch, josef, mst, jasowang, stefanha, kwolf
  Cc: linux-block, nbd, virtualization

The block layer can't support the block size larger than
page size yet, so driver needs to validate the block size
before setting it. Now this validation is done in device drivers
with some duplicated codes. This series tries to add a block
layer helper for it and makes loop driver, nbd driver and
virtio-blk driver use it.

Xie Yongji (4):
  block: Add a helper to validate the block size
  nbd: Use blk_validate_block_size() to validate block size
  loop: Use blk_validate_block_size() to validate block size
  virtio-blk: Use blk_validate_block_size() to validate block size

 drivers/block/loop.c       | 17 ++---------------
 drivers/block/nbd.c        |  3 ++-
 drivers/block/virtio_blk.c |  7 +++++--
 include/linux/blkdev.h     |  8 ++++++++
 4 files changed, 17 insertions(+), 18 deletions(-)

-- 
2.11.0


^ permalink raw reply	[flat|nested] 9+ messages in thread

* [PATCH 1/4] block: Add a helper to validate the block size
  2021-10-25  9:43 [PATCH 0/4] Add blk_validate_block_size() helper for drivers to validate block size Xie Yongji
@ 2021-10-25  9:43 ` Xie Yongji
  2021-10-25  9:43 ` [PATCH 2/4] nbd: Use blk_validate_block_size() to validate " Xie Yongji
                   ` (2 subsequent siblings)
  3 siblings, 0 replies; 9+ messages in thread
From: Xie Yongji @ 2021-10-25  9:43 UTC (permalink / raw)
  To: axboe, hch, josef, mst, jasowang, stefanha, kwolf
  Cc: linux-block, nbd, virtualization

There are some duplicated codes to validate the block
size in block drivers. This limitation actually comes
from block layer, so this patch tries to add a new block
layer helper for that.

Signed-off-by: Xie Yongji <xieyongji@bytedance.com>
---
 include/linux/blkdev.h | 8 ++++++++
 1 file changed, 8 insertions(+)

diff --git a/include/linux/blkdev.h b/include/linux/blkdev.h
index 12b9dbcc980e..805cd02d7914 100644
--- a/include/linux/blkdev.h
+++ b/include/linux/blkdev.h
@@ -235,6 +235,14 @@ struct request {
 	void *end_io_data;
 };
 
+static inline int blk_validate_block_size(unsigned int bsize)
+{
+	if (bsize < 512 || bsize > PAGE_SIZE || !is_power_of_2(bsize))
+		return -EINVAL;
+
+	return 0;
+}
+
 static inline bool blk_op_is_passthrough(unsigned int op)
 {
 	op &= REQ_OP_MASK;
-- 
2.11.0


^ permalink raw reply	[flat|nested] 9+ messages in thread

* [PATCH 2/4] nbd: Use blk_validate_block_size() to validate block size
  2021-10-25  9:43 [PATCH 0/4] Add blk_validate_block_size() helper for drivers to validate block size Xie Yongji
  2021-10-25  9:43 ` [PATCH 1/4] block: Add a helper to validate the " Xie Yongji
@ 2021-10-25  9:43 ` Xie Yongji
  2021-10-25  9:43 ` [PATCH 3/4] loop: " Xie Yongji
  2021-10-25  9:43 ` [PATCH 4/4] virtio-blk: " Xie Yongji
  3 siblings, 0 replies; 9+ messages in thread
From: Xie Yongji @ 2021-10-25  9:43 UTC (permalink / raw)
  To: axboe, hch, josef, mst, jasowang, stefanha, kwolf
  Cc: linux-block, nbd, virtualization

Use the block layer helper to validate block size instead
of open coding it.

Signed-off-by: Xie Yongji <xieyongji@bytedance.com>
---
 drivers/block/nbd.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/drivers/block/nbd.c b/drivers/block/nbd.c
index 1183f7872b71..3f58c3eb38b6 100644
--- a/drivers/block/nbd.c
+++ b/drivers/block/nbd.c
@@ -323,7 +323,8 @@ static int nbd_set_size(struct nbd_device *nbd, loff_t bytesize,
 {
 	if (!blksize)
 		blksize = 1u << NBD_DEF_BLKSIZE_BITS;
-	if (blksize < 512 || blksize > PAGE_SIZE || !is_power_of_2(blksize))
+
+	if (blk_validate_block_size(blksize))
 		return -EINVAL;
 
 	nbd->config->bytesize = bytesize;
-- 
2.11.0


^ permalink raw reply	[flat|nested] 9+ messages in thread

* [PATCH 3/4] loop: Use blk_validate_block_size() to validate block size
  2021-10-25  9:43 [PATCH 0/4] Add blk_validate_block_size() helper for drivers to validate block size Xie Yongji
  2021-10-25  9:43 ` [PATCH 1/4] block: Add a helper to validate the " Xie Yongji
  2021-10-25  9:43 ` [PATCH 2/4] nbd: Use blk_validate_block_size() to validate " Xie Yongji
@ 2021-10-25  9:43 ` Xie Yongji
  2021-10-25  9:43 ` [PATCH 4/4] virtio-blk: " Xie Yongji
  3 siblings, 0 replies; 9+ messages in thread
From: Xie Yongji @ 2021-10-25  9:43 UTC (permalink / raw)
  To: axboe, hch, josef, mst, jasowang, stefanha, kwolf
  Cc: linux-block, nbd, virtualization

Remove loop_validate_block_size() and use the block layer helper
to validate block size.

Signed-off-by: Xie Yongji <xieyongji@bytedance.com>
---
 drivers/block/loop.c | 17 ++---------------
 1 file changed, 2 insertions(+), 15 deletions(-)

diff --git a/drivers/block/loop.c b/drivers/block/loop.c
index 7bf4686af774..dfc72a1f6500 100644
--- a/drivers/block/loop.c
+++ b/drivers/block/loop.c
@@ -273,19 +273,6 @@ static void __loop_update_dio(struct loop_device *lo, bool dio)
 }
 
 /**
- * loop_validate_block_size() - validates the passed in block size
- * @bsize: size to validate
- */
-static int
-loop_validate_block_size(unsigned short bsize)
-{
-	if (bsize < 512 || bsize > PAGE_SIZE || !is_power_of_2(bsize))
-		return -EINVAL;
-
-	return 0;
-}
-
-/**
  * loop_set_size() - sets device size and notifies userspace
  * @lo: struct loop_device to set the size for
  * @size: new size of the loop device
@@ -1236,7 +1223,7 @@ static int loop_configure(struct loop_device *lo, fmode_t mode,
 	}
 
 	if (config->block_size) {
-		error = loop_validate_block_size(config->block_size);
+		error = blk_validate_block_size(config->block_size);
 		if (error)
 			goto out_unlock;
 	}
@@ -1759,7 +1746,7 @@ static int loop_set_block_size(struct loop_device *lo, unsigned long arg)
 	if (lo->lo_state != Lo_bound)
 		return -ENXIO;
 
-	err = loop_validate_block_size(arg);
+	err = blk_validate_block_size(arg);
 	if (err)
 		return err;
 
-- 
2.11.0


^ permalink raw reply	[flat|nested] 9+ messages in thread

* [PATCH 4/4] virtio-blk: Use blk_validate_block_size() to validate block size
  2021-10-25  9:43 [PATCH 0/4] Add blk_validate_block_size() helper for drivers to validate block size Xie Yongji
                   ` (2 preceding siblings ...)
  2021-10-25  9:43 ` [PATCH 3/4] loop: " Xie Yongji
@ 2021-10-25  9:43 ` Xie Yongji
  2021-10-25 13:19   ` Michael S. Tsirkin
  3 siblings, 1 reply; 9+ messages in thread
From: Xie Yongji @ 2021-10-25  9:43 UTC (permalink / raw)
  To: axboe, hch, josef, mst, jasowang, stefanha, kwolf
  Cc: linux-block, nbd, virtualization

The block layer can't support the block size larger than
page size yet. If an untrusted device presents an invalid
block size in configuration space, it will result in the
kernel crash something like below:

[  506.154324] BUG: kernel NULL pointer dereference, address: 0000000000000008
[  506.160416] RIP: 0010:create_empty_buffers+0x24/0x100
[  506.174302] Call Trace:
[  506.174651]  create_page_buffers+0x4d/0x60
[  506.175207]  block_read_full_page+0x50/0x380
[  506.175798]  ? __mod_lruvec_page_state+0x60/0xa0
[  506.176412]  ? __add_to_page_cache_locked+0x1b2/0x390
[  506.177085]  ? blkdev_direct_IO+0x4a0/0x4a0
[  506.177644]  ? scan_shadow_nodes+0x30/0x30
[  506.178206]  ? lru_cache_add+0x42/0x60
[  506.178716]  do_read_cache_page+0x695/0x740
[  506.179278]  ? read_part_sector+0xe0/0xe0
[  506.179821]  read_part_sector+0x36/0xe0
[  506.180337]  adfspart_check_ICS+0x32/0x320
[  506.180890]  ? snprintf+0x45/0x70
[  506.181350]  ? read_part_sector+0xe0/0xe0
[  506.181906]  bdev_disk_changed+0x229/0x5c0
[  506.182483]  blkdev_get_whole+0x6d/0x90
[  506.183013]  blkdev_get_by_dev+0x122/0x2d0
[  506.183562]  device_add_disk+0x39e/0x3c0
[  506.184472]  virtblk_probe+0x3f8/0x79b [virtio_blk]
[  506.185461]  virtio_dev_probe+0x15e/0x1d0 [virtio]

So this patch tries to use the block layer helper to
validate the block size.

Signed-off-by: Xie Yongji <xieyongji@bytedance.com>
---
 drivers/block/virtio_blk.c | 7 +++++--
 1 file changed, 5 insertions(+), 2 deletions(-)

diff --git a/drivers/block/virtio_blk.c b/drivers/block/virtio_blk.c
index 303caf2d17d0..5bcacefe969e 100644
--- a/drivers/block/virtio_blk.c
+++ b/drivers/block/virtio_blk.c
@@ -815,9 +815,12 @@ static int virtblk_probe(struct virtio_device *vdev)
 	err = virtio_cread_feature(vdev, VIRTIO_BLK_F_BLK_SIZE,
 				   struct virtio_blk_config, blk_size,
 				   &blk_size);
-	if (!err)
+	if (!err) {
+		if (blk_validate_block_size(blk_size))
+			goto out_cleanup_disk;
+
 		blk_queue_logical_block_size(q, blk_size);
-	else
+	} else
 		blk_size = queue_logical_block_size(q);
 
 	/* Use topology information if available */
-- 
2.11.0


^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH 4/4] virtio-blk: Use blk_validate_block_size() to validate block size
  2021-10-25  9:43 ` [PATCH 4/4] virtio-blk: " Xie Yongji
@ 2021-10-25 13:19   ` Michael S. Tsirkin
  2021-10-25 13:47     ` Yongji Xie
  0 siblings, 1 reply; 9+ messages in thread
From: Michael S. Tsirkin @ 2021-10-25 13:19 UTC (permalink / raw)
  To: Xie Yongji
  Cc: axboe, hch, josef, jasowang, stefanha, kwolf, linux-block, nbd,
	virtualization

On Mon, Oct 25, 2021 at 05:43:06PM +0800, Xie Yongji wrote:
> The block layer can't support the block size larger than
> page size yet. If an untrusted device presents an invalid
> block size in configuration space, it will result in the
> kernel crash something like below:
> 
> [  506.154324] BUG: kernel NULL pointer dereference, address: 0000000000000008
> [  506.160416] RIP: 0010:create_empty_buffers+0x24/0x100
> [  506.174302] Call Trace:
> [  506.174651]  create_page_buffers+0x4d/0x60
> [  506.175207]  block_read_full_page+0x50/0x380
> [  506.175798]  ? __mod_lruvec_page_state+0x60/0xa0
> [  506.176412]  ? __add_to_page_cache_locked+0x1b2/0x390
> [  506.177085]  ? blkdev_direct_IO+0x4a0/0x4a0
> [  506.177644]  ? scan_shadow_nodes+0x30/0x30
> [  506.178206]  ? lru_cache_add+0x42/0x60
> [  506.178716]  do_read_cache_page+0x695/0x740
> [  506.179278]  ? read_part_sector+0xe0/0xe0
> [  506.179821]  read_part_sector+0x36/0xe0
> [  506.180337]  adfspart_check_ICS+0x32/0x320
> [  506.180890]  ? snprintf+0x45/0x70
> [  506.181350]  ? read_part_sector+0xe0/0xe0
> [  506.181906]  bdev_disk_changed+0x229/0x5c0
> [  506.182483]  blkdev_get_whole+0x6d/0x90
> [  506.183013]  blkdev_get_by_dev+0x122/0x2d0
> [  506.183562]  device_add_disk+0x39e/0x3c0
> [  506.184472]  virtblk_probe+0x3f8/0x79b [virtio_blk]
> [  506.185461]  virtio_dev_probe+0x15e/0x1d0 [virtio]
> 
> So this patch tries to use the block layer helper to
> validate the block size.
> 
> Signed-off-by: Xie Yongji <xieyongji@bytedance.com>
> ---
>  drivers/block/virtio_blk.c | 7 +++++--
>  1 file changed, 5 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/block/virtio_blk.c b/drivers/block/virtio_blk.c
> index 303caf2d17d0..5bcacefe969e 100644
> --- a/drivers/block/virtio_blk.c
> +++ b/drivers/block/virtio_blk.c
> @@ -815,9 +815,12 @@ static int virtblk_probe(struct virtio_device *vdev)
>  	err = virtio_cread_feature(vdev, VIRTIO_BLK_F_BLK_SIZE,
>  				   struct virtio_blk_config, blk_size,
>  				   &blk_size);
> -	if (!err)
> +	if (!err) {
> +		if (blk_validate_block_size(blk_size))
> +			goto out_cleanup_disk;
> +


Did you test this with an invalid blk size? It seems unlikely that it
fails properly the way you'd expect.

>  		blk_queue_logical_block_size(q, blk_size);
> -	else
> +	} else
>  		blk_size = queue_logical_block_size(q);
>  
>  	/* Use topology information if available */
> -- 
> 2.11.0


^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH 4/4] virtio-blk: Use blk_validate_block_size() to validate block size
  2021-10-25 13:19   ` Michael S. Tsirkin
@ 2021-10-25 13:47     ` Yongji Xie
  2021-10-25 17:21       ` Michael S. Tsirkin
  0 siblings, 1 reply; 9+ messages in thread
From: Yongji Xie @ 2021-10-25 13:47 UTC (permalink / raw)
  To: Michael S. Tsirkin
  Cc: Jens Axboe, Christoph Hellwig, Josef Bacik, Jason Wang,
	Stefan Hajnoczi, Kevin Wolf, linux-block, nbd, virtualization

On Mon, Oct 25, 2021 at 9:20 PM Michael S. Tsirkin <mst@redhat.com> wrote:
>
> On Mon, Oct 25, 2021 at 05:43:06PM +0800, Xie Yongji wrote:
> > The block layer can't support the block size larger than
> > page size yet. If an untrusted device presents an invalid
> > block size in configuration space, it will result in the
> > kernel crash something like below:
> >
> > [  506.154324] BUG: kernel NULL pointer dereference, address: 0000000000000008
> > [  506.160416] RIP: 0010:create_empty_buffers+0x24/0x100
> > [  506.174302] Call Trace:
> > [  506.174651]  create_page_buffers+0x4d/0x60
> > [  506.175207]  block_read_full_page+0x50/0x380
> > [  506.175798]  ? __mod_lruvec_page_state+0x60/0xa0
> > [  506.176412]  ? __add_to_page_cache_locked+0x1b2/0x390
> > [  506.177085]  ? blkdev_direct_IO+0x4a0/0x4a0
> > [  506.177644]  ? scan_shadow_nodes+0x30/0x30
> > [  506.178206]  ? lru_cache_add+0x42/0x60
> > [  506.178716]  do_read_cache_page+0x695/0x740
> > [  506.179278]  ? read_part_sector+0xe0/0xe0
> > [  506.179821]  read_part_sector+0x36/0xe0
> > [  506.180337]  adfspart_check_ICS+0x32/0x320
> > [  506.180890]  ? snprintf+0x45/0x70
> > [  506.181350]  ? read_part_sector+0xe0/0xe0
> > [  506.181906]  bdev_disk_changed+0x229/0x5c0
> > [  506.182483]  blkdev_get_whole+0x6d/0x90
> > [  506.183013]  blkdev_get_by_dev+0x122/0x2d0
> > [  506.183562]  device_add_disk+0x39e/0x3c0
> > [  506.184472]  virtblk_probe+0x3f8/0x79b [virtio_blk]
> > [  506.185461]  virtio_dev_probe+0x15e/0x1d0 [virtio]
> >
> > So this patch tries to use the block layer helper to
> > validate the block size.
> >
> > Signed-off-by: Xie Yongji <xieyongji@bytedance.com>
> > ---
> >  drivers/block/virtio_blk.c | 7 +++++--
> >  1 file changed, 5 insertions(+), 2 deletions(-)
> >
> > diff --git a/drivers/block/virtio_blk.c b/drivers/block/virtio_blk.c
> > index 303caf2d17d0..5bcacefe969e 100644
> > --- a/drivers/block/virtio_blk.c
> > +++ b/drivers/block/virtio_blk.c
> > @@ -815,9 +815,12 @@ static int virtblk_probe(struct virtio_device *vdev)
> >       err = virtio_cread_feature(vdev, VIRTIO_BLK_F_BLK_SIZE,
> >                                  struct virtio_blk_config, blk_size,
> >                                  &blk_size);
> > -     if (!err)
> > +     if (!err) {
> > +             if (blk_validate_block_size(blk_size))
> > +                     goto out_cleanup_disk;
> > +
>
>
> Did you test this with an invalid blk size? It seems unlikely that it
> fails properly the way you'd expect.
>

Oops... Sorry, I just checked whether the block device is created with
invalid block size.

Will send v2 soon!

Thanks,
Yongji

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH 4/4] virtio-blk: Use blk_validate_block_size() to validate block size
  2021-10-25 13:47     ` Yongji Xie
@ 2021-10-25 17:21       ` Michael S. Tsirkin
  2021-10-26 14:37         ` Yongji Xie
  0 siblings, 1 reply; 9+ messages in thread
From: Michael S. Tsirkin @ 2021-10-25 17:21 UTC (permalink / raw)
  To: Yongji Xie
  Cc: Jens Axboe, Christoph Hellwig, Josef Bacik, Jason Wang,
	Stefan Hajnoczi, Kevin Wolf, linux-block, nbd, virtualization

On Mon, Oct 25, 2021 at 09:47:34PM +0800, Yongji Xie wrote:
> On Mon, Oct 25, 2021 at 9:20 PM Michael S. Tsirkin <mst@redhat.com> wrote:
> >
> > On Mon, Oct 25, 2021 at 05:43:06PM +0800, Xie Yongji wrote:
> > > The block layer can't support the block size larger than
> > > page size yet. If an untrusted device presents an invalid
> > > block size in configuration space, it will result in the
> > > kernel crash something like below:
> > >
> > > [  506.154324] BUG: kernel NULL pointer dereference, address: 0000000000000008
> > > [  506.160416] RIP: 0010:create_empty_buffers+0x24/0x100
> > > [  506.174302] Call Trace:
> > > [  506.174651]  create_page_buffers+0x4d/0x60
> > > [  506.175207]  block_read_full_page+0x50/0x380
> > > [  506.175798]  ? __mod_lruvec_page_state+0x60/0xa0
> > > [  506.176412]  ? __add_to_page_cache_locked+0x1b2/0x390
> > > [  506.177085]  ? blkdev_direct_IO+0x4a0/0x4a0
> > > [  506.177644]  ? scan_shadow_nodes+0x30/0x30
> > > [  506.178206]  ? lru_cache_add+0x42/0x60
> > > [  506.178716]  do_read_cache_page+0x695/0x740
> > > [  506.179278]  ? read_part_sector+0xe0/0xe0
> > > [  506.179821]  read_part_sector+0x36/0xe0
> > > [  506.180337]  adfspart_check_ICS+0x32/0x320
> > > [  506.180890]  ? snprintf+0x45/0x70
> > > [  506.181350]  ? read_part_sector+0xe0/0xe0
> > > [  506.181906]  bdev_disk_changed+0x229/0x5c0
> > > [  506.182483]  blkdev_get_whole+0x6d/0x90
> > > [  506.183013]  blkdev_get_by_dev+0x122/0x2d0
> > > [  506.183562]  device_add_disk+0x39e/0x3c0
> > > [  506.184472]  virtblk_probe+0x3f8/0x79b [virtio_blk]
> > > [  506.185461]  virtio_dev_probe+0x15e/0x1d0 [virtio]
> > >
> > > So this patch tries to use the block layer helper to
> > > validate the block size.
> > >
> > > Signed-off-by: Xie Yongji <xieyongji@bytedance.com>
> > > ---
> > >  drivers/block/virtio_blk.c | 7 +++++--
> > >  1 file changed, 5 insertions(+), 2 deletions(-)
> > >
> > > diff --git a/drivers/block/virtio_blk.c b/drivers/block/virtio_blk.c
> > > index 303caf2d17d0..5bcacefe969e 100644
> > > --- a/drivers/block/virtio_blk.c
> > > +++ b/drivers/block/virtio_blk.c
> > > @@ -815,9 +815,12 @@ static int virtblk_probe(struct virtio_device *vdev)
> > >       err = virtio_cread_feature(vdev, VIRTIO_BLK_F_BLK_SIZE,
> > >                                  struct virtio_blk_config, blk_size,
> > >                                  &blk_size);
> > > -     if (!err)
> > > +     if (!err) {
> > > +             if (blk_validate_block_size(blk_size))
> > > +                     goto out_cleanup_disk;
> > > +
> >
> >
> > Did you test this with an invalid blk size? It seems unlikely that it
> > fails properly the way you'd expect.
> >
> 
> Oops... Sorry, I just checked whether the block device is created with
> invalid block size.
> 
> Will send v2 soon!
> 
> Thanks,
> Yongji

Please avoid doing that in the future. Posting untested patches is only
acceptable if you make it abundantly clear that they are untested.

-- 
MST


^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH 4/4] virtio-blk: Use blk_validate_block_size() to validate block size
  2021-10-25 17:21       ` Michael S. Tsirkin
@ 2021-10-26 14:37         ` Yongji Xie
  0 siblings, 0 replies; 9+ messages in thread
From: Yongji Xie @ 2021-10-26 14:37 UTC (permalink / raw)
  To: Michael S. Tsirkin
  Cc: Jens Axboe, Christoph Hellwig, Josef Bacik, Jason Wang,
	Stefan Hajnoczi, Kevin Wolf, linux-block, nbd, virtualization

On Tue, Oct 26, 2021 at 1:21 AM Michael S. Tsirkin <mst@redhat.com> wrote:
>
> On Mon, Oct 25, 2021 at 09:47:34PM +0800, Yongji Xie wrote:
> > On Mon, Oct 25, 2021 at 9:20 PM Michael S. Tsirkin <mst@redhat.com> wrote:
> > >
> > > On Mon, Oct 25, 2021 at 05:43:06PM +0800, Xie Yongji wrote:
> > > > The block layer can't support the block size larger than
> > > > page size yet. If an untrusted device presents an invalid
> > > > block size in configuration space, it will result in the
> > > > kernel crash something like below:
> > > >
> > > > [  506.154324] BUG: kernel NULL pointer dereference, address: 0000000000000008
> > > > [  506.160416] RIP: 0010:create_empty_buffers+0x24/0x100
> > > > [  506.174302] Call Trace:
> > > > [  506.174651]  create_page_buffers+0x4d/0x60
> > > > [  506.175207]  block_read_full_page+0x50/0x380
> > > > [  506.175798]  ? __mod_lruvec_page_state+0x60/0xa0
> > > > [  506.176412]  ? __add_to_page_cache_locked+0x1b2/0x390
> > > > [  506.177085]  ? blkdev_direct_IO+0x4a0/0x4a0
> > > > [  506.177644]  ? scan_shadow_nodes+0x30/0x30
> > > > [  506.178206]  ? lru_cache_add+0x42/0x60
> > > > [  506.178716]  do_read_cache_page+0x695/0x740
> > > > [  506.179278]  ? read_part_sector+0xe0/0xe0
> > > > [  506.179821]  read_part_sector+0x36/0xe0
> > > > [  506.180337]  adfspart_check_ICS+0x32/0x320
> > > > [  506.180890]  ? snprintf+0x45/0x70
> > > > [  506.181350]  ? read_part_sector+0xe0/0xe0
> > > > [  506.181906]  bdev_disk_changed+0x229/0x5c0
> > > > [  506.182483]  blkdev_get_whole+0x6d/0x90
> > > > [  506.183013]  blkdev_get_by_dev+0x122/0x2d0
> > > > [  506.183562]  device_add_disk+0x39e/0x3c0
> > > > [  506.184472]  virtblk_probe+0x3f8/0x79b [virtio_blk]
> > > > [  506.185461]  virtio_dev_probe+0x15e/0x1d0 [virtio]
> > > >
> > > > So this patch tries to use the block layer helper to
> > > > validate the block size.
> > > >
> > > > Signed-off-by: Xie Yongji <xieyongji@bytedance.com>
> > > > ---
> > > >  drivers/block/virtio_blk.c | 7 +++++--
> > > >  1 file changed, 5 insertions(+), 2 deletions(-)
> > > >
> > > > diff --git a/drivers/block/virtio_blk.c b/drivers/block/virtio_blk.c
> > > > index 303caf2d17d0..5bcacefe969e 100644
> > > > --- a/drivers/block/virtio_blk.c
> > > > +++ b/drivers/block/virtio_blk.c
> > > > @@ -815,9 +815,12 @@ static int virtblk_probe(struct virtio_device *vdev)
> > > >       err = virtio_cread_feature(vdev, VIRTIO_BLK_F_BLK_SIZE,
> > > >                                  struct virtio_blk_config, blk_size,
> > > >                                  &blk_size);
> > > > -     if (!err)
> > > > +     if (!err) {
> > > > +             if (blk_validate_block_size(blk_size))
> > > > +                     goto out_cleanup_disk;
> > > > +
> > >
> > >
> > > Did you test this with an invalid blk size? It seems unlikely that it
> > > fails properly the way you'd expect.
> > >
> >
> > Oops... Sorry, I just checked whether the block device is created with
> > invalid block size.
> >
> > Will send v2 soon!
> >
> > Thanks,
> > Yongji
>
> Please avoid doing that in the future. Posting untested patches is only
> acceptable if you make it abundantly clear that they are untested.
>

Certainly

Thanks,
Yongji

^ permalink raw reply	[flat|nested] 9+ messages in thread

end of thread, other threads:[~2021-10-26 14:39 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-10-25  9:43 [PATCH 0/4] Add blk_validate_block_size() helper for drivers to validate block size Xie Yongji
2021-10-25  9:43 ` [PATCH 1/4] block: Add a helper to validate the " Xie Yongji
2021-10-25  9:43 ` [PATCH 2/4] nbd: Use blk_validate_block_size() to validate " Xie Yongji
2021-10-25  9:43 ` [PATCH 3/4] loop: " Xie Yongji
2021-10-25  9:43 ` [PATCH 4/4] virtio-blk: " Xie Yongji
2021-10-25 13:19   ` Michael S. Tsirkin
2021-10-25 13:47     ` Yongji Xie
2021-10-25 17:21       ` Michael S. Tsirkin
2021-10-26 14:37         ` Yongji Xie

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).