All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v3 0/4] Block layer patches for kernel v5.8
@ 2020-05-19  4:07 Bart Van Assche
  2020-05-19  4:07 ` [PATCH v3 1/4] block: Fix type of first compat_put_{,u}long() argument Bart Van Assche
                   ` (4 more replies)
  0 siblings, 5 replies; 9+ messages in thread
From: Bart Van Assche @ 2020-05-19  4:07 UTC (permalink / raw)
  To: Jens Axboe
  Cc: linux-block, Christoph Hellwig, Ming Lei, Alexander Potapenko,
	Bart Van Assche

Hi Jens,

The patches in this series are what I came up with as the result of
analyzing Alexander Potapenko's report about reading from null_blk.
Please consider these patches for kernel v5.8.

Thanks,

Bart.

Changes compared to v2:
- In patch 4/4, use __rq_for_each_bio() (Ming).

Changes compared to v1:
- Adjusted the comments added by patch "Document the bio_vec properties" as
  requested by Christoph.
- Left out the patch "Fix zero_fill_bio()" since it is not necessary.
- Moved zero_fill_bvec() from patch "Fix zero_fill_bio()" into patch
  "null_blk: Zero-initialize read buffers in non-memory-backed mode".

Bart Van Assche (4):
  block: Fix type of first compat_put_{,u}long() argument
  bio.h: Declare the arguments of the bio iteration functions const
  block: Document the bio_vec properties
  null_blk: Zero-initialize read buffers in non-memory-backed mode

 block/ioctl.c                 |  4 ++--
 drivers/block/null_blk_main.c | 26 ++++++++++++++++++++++++++
 include/linux/bio.h           |  6 +++---
 include/linux/bvec.h          | 13 +++++++++++--
 4 files changed, 42 insertions(+), 7 deletions(-)


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

* [PATCH v3 1/4] block: Fix type of first compat_put_{,u}long() argument
  2020-05-19  4:07 [PATCH v3 0/4] Block layer patches for kernel v5.8 Bart Van Assche
@ 2020-05-19  4:07 ` Bart Van Assche
  2020-05-19  8:34   ` Johannes Thumshirn
  2020-05-19  4:07 ` [PATCH v3 2/4] bio.h: Declare the arguments of the bio iteration functions const Bart Van Assche
                   ` (3 subsequent siblings)
  4 siblings, 1 reply; 9+ messages in thread
From: Bart Van Assche @ 2020-05-19  4:07 UTC (permalink / raw)
  To: Jens Axboe
  Cc: linux-block, Christoph Hellwig, Ming Lei, Alexander Potapenko,
	Bart Van Assche, Arnd Bergmann

This patch fixes the following sparse warnings:

block/ioctl.c:209:16: warning: incorrect type in argument 1 (different address spaces)
block/ioctl.c:209:16:    expected void const volatile [noderef] <asn:1> *
block/ioctl.c:209:16:    got signed int [usertype] *argp
block/ioctl.c:214:16: warning: incorrect type in argument 1 (different address spaces)
block/ioctl.c:214:16:    expected void const volatile [noderef] <asn:1> *
block/ioctl.c:214:16:    got unsigned int [usertype] *argp
block/ioctl.c:666:40: warning: incorrect type in argument 1 (different address spaces)
block/ioctl.c:666:40:    expected signed int [usertype] *argp
block/ioctl.c:666:40:    got void [noderef] <asn:1> *argp
block/ioctl.c:672:41: warning: incorrect type in argument 1 (different address spaces)
block/ioctl.c:672:41:    expected unsigned int [usertype] *argp
block/ioctl.c:672:41:    got void [noderef] <asn:1> *argp

Cc: Arnd Bergmann <arnd@arndb.de>
Acked-by: Arnd Bergmann <arnd@arndb.de>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Fixes: 9b81648cb5e3 ("compat_ioctl: simplify up block/ioctl.c")
Signed-off-by: Bart Van Assche <bvanassche@acm.org>
---
 block/ioctl.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/block/ioctl.c b/block/ioctl.c
index 75c64811b534..bdb3bbb253d9 100644
--- a/block/ioctl.c
+++ b/block/ioctl.c
@@ -204,12 +204,12 @@ static int put_u64(u64 __user *argp, u64 val)
 }
 
 #ifdef CONFIG_COMPAT
-static int compat_put_long(compat_long_t *argp, long val)
+static int compat_put_long(compat_long_t __user *argp, long val)
 {
 	return put_user(val, argp);
 }
 
-static int compat_put_ulong(compat_ulong_t *argp, compat_ulong_t val)
+static int compat_put_ulong(compat_ulong_t __user *argp, compat_ulong_t val)
 {
 	return put_user(val, argp);
 }

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

* [PATCH v3 2/4] bio.h: Declare the arguments of the bio iteration functions const
  2020-05-19  4:07 [PATCH v3 0/4] Block layer patches for kernel v5.8 Bart Van Assche
  2020-05-19  4:07 ` [PATCH v3 1/4] block: Fix type of first compat_put_{,u}long() argument Bart Van Assche
@ 2020-05-19  4:07 ` Bart Van Assche
  2020-05-19  8:35   ` Johannes Thumshirn
  2020-05-19  4:07 ` [PATCH v3 3/4] block: Document the bio_vec properties Bart Van Assche
                   ` (2 subsequent siblings)
  4 siblings, 1 reply; 9+ messages in thread
From: Bart Van Assche @ 2020-05-19  4:07 UTC (permalink / raw)
  To: Jens Axboe
  Cc: linux-block, Christoph Hellwig, Ming Lei, Alexander Potapenko,
	Bart Van Assche, Chaitanya Kulkarni, Damien Le Moal

This change makes it possible to pass 'const struct bio *' arguments to
these functions.

Reviewed-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Chaitanya Kulkarni <chaitanya.kulkarni@wdc.com>
Cc: Ming Lei <ming.lei@redhat.com>
Cc: Damien Le Moal <damien.lemoal@wdc.com>
Cc: Chaitanya Kulkarni <chaitanya.kulkarni@wdc.com>
Cc: Alexander Potapenko <glider@google.com>
Signed-off-by: Bart Van Assche <bvanassche@acm.org>
---
 include/linux/bio.h | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/include/linux/bio.h b/include/linux/bio.h
index a0ee494a6329..950c9dc44c4f 100644
--- a/include/linux/bio.h
+++ b/include/linux/bio.h
@@ -70,7 +70,7 @@ static inline bool bio_has_data(struct bio *bio)
 	return false;
 }
 
-static inline bool bio_no_advance_iter(struct bio *bio)
+static inline bool bio_no_advance_iter(const struct bio *bio)
 {
 	return bio_op(bio) == REQ_OP_DISCARD ||
 	       bio_op(bio) == REQ_OP_SECURE_ERASE ||
@@ -138,8 +138,8 @@ static inline bool bio_next_segment(const struct bio *bio,
 #define bio_for_each_segment_all(bvl, bio, iter) \
 	for (bvl = bvec_init_iter_all(&iter); bio_next_segment((bio), &iter); )
 
-static inline void bio_advance_iter(struct bio *bio, struct bvec_iter *iter,
-				    unsigned bytes)
+static inline void bio_advance_iter(const struct bio *bio,
+				    struct bvec_iter *iter, unsigned int bytes)
 {
 	iter->bi_sector += bytes >> 9;
 

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

* [PATCH v3 3/4] block: Document the bio_vec properties
  2020-05-19  4:07 [PATCH v3 0/4] Block layer patches for kernel v5.8 Bart Van Assche
  2020-05-19  4:07 ` [PATCH v3 1/4] block: Fix type of first compat_put_{,u}long() argument Bart Van Assche
  2020-05-19  4:07 ` [PATCH v3 2/4] bio.h: Declare the arguments of the bio iteration functions const Bart Van Assche
@ 2020-05-19  4:07 ` Bart Van Assche
  2020-05-19 15:21   ` Christoph Hellwig
  2020-05-19  4:07 ` [PATCH v3 4/4] null_blk: Zero-initialize read buffers in non-memory-backed mode Bart Van Assche
  2020-05-19 15:40 ` [PATCH v3 0/4] Block layer patches for kernel v5.8 Jens Axboe
  4 siblings, 1 reply; 9+ messages in thread
From: Bart Van Assche @ 2020-05-19  4:07 UTC (permalink / raw)
  To: Jens Axboe
  Cc: linux-block, Christoph Hellwig, Ming Lei, Alexander Potapenko,
	Bart Van Assche, Christoph Hellwig

Since it is nontrivial that nth_page() does not have to be used for a
bio_vec, document this.

CC: Christoph Hellwig <hch@infradead.org>
Cc: Ming Lei <ming.lei@redhat.com>
Signed-off-by: Bart Van Assche <bvanassche@acm.org>
---
 include/linux/bvec.h | 13 +++++++++++--
 1 file changed, 11 insertions(+), 2 deletions(-)

diff --git a/include/linux/bvec.h b/include/linux/bvec.h
index a81c13ac1972..ac0c7299d5b8 100644
--- a/include/linux/bvec.h
+++ b/include/linux/bvec.h
@@ -12,8 +12,17 @@
 #include <linux/errno.h>
 #include <linux/mm.h>
 
-/*
- * was unsigned short, but we might as well be ready for > 64kB I/O pages
+/**
+ * struct bio_vec - a contiguous range of physical memory addresses
+ * @bv_page:   First page associated with the address range.
+ * @bv_len:    Number of bytes in the address range.
+ * @bv_offset: Start of the address range relative to the start of @bv_page.
+ *
+ * The following holds for a bvec if n * PAGE_SIZE < bv_offset + bv_len:
+ *
+ *   nth_page(@bv_page, n) == @bv_page + n
+ *
+ * This holds because page_is_mergeable() checks the above property.
  */
 struct bio_vec {
 	struct page	*bv_page;

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

* [PATCH v3 4/4] null_blk: Zero-initialize read buffers in non-memory-backed mode
  2020-05-19  4:07 [PATCH v3 0/4] Block layer patches for kernel v5.8 Bart Van Assche
                   ` (2 preceding siblings ...)
  2020-05-19  4:07 ` [PATCH v3 3/4] block: Document the bio_vec properties Bart Van Assche
@ 2020-05-19  4:07 ` Bart Van Assche
  2020-05-19 15:40 ` [PATCH v3 0/4] Block layer patches for kernel v5.8 Jens Axboe
  4 siblings, 0 replies; 9+ messages in thread
From: Bart Van Assche @ 2020-05-19  4:07 UTC (permalink / raw)
  To: Jens Axboe
  Cc: linux-block, Christoph Hellwig, Ming Lei, Alexander Potapenko,
	Bart Van Assche, Damien Le Moal, Chaitanya Kulkarni

This patch suppresses an uninteresting KMSAN complaint without affecting
performance of the null_blk driver if CONFIG_KMSAN is disabled.

Cc: Christoph Hellwig <hch@lst.de>
Cc: Ming Lei <ming.lei@redhat.com>
Cc: Damien Le Moal <damien.lemoal@wdc.com>
Cc: Chaitanya Kulkarni <chaitanya.kulkarni@wdc.com>
Cc: Alexander Potapenko <glider@google.com>
Reported-by: Alexander Potapenko <glider@google.com>
Tested-by: Alexander Potapenko <glider@google.com>
Signed-off-by: Bart Van Assche <bvanassche@acm.org>
---
 drivers/block/null_blk_main.c | 26 ++++++++++++++++++++++++++
 1 file changed, 26 insertions(+)

diff --git a/drivers/block/null_blk_main.c b/drivers/block/null_blk_main.c
index 06f5761fccb6..b06c85a9cff1 100644
--- a/drivers/block/null_blk_main.c
+++ b/drivers/block/null_blk_main.c
@@ -1250,8 +1250,34 @@ static inline blk_status_t null_handle_memory_backed(struct nullb_cmd *cmd,
 	return errno_to_blk_status(err);
 }
 
+static void nullb_zero_read_cmd_buffer(struct nullb_cmd *cmd)
+{
+	struct nullb_device *dev = cmd->nq->dev;
+	struct bio *bio;
+
+	if (dev->memory_backed)
+		return;
+
+	if (dev->queue_mode == NULL_Q_BIO && bio_op(cmd->bio) == REQ_OP_READ) {
+		zero_fill_bio(cmd->bio);
+	} else if (req_op(cmd->rq) == REQ_OP_READ) {
+		__rq_for_each_bio(bio, cmd->rq)
+			zero_fill_bio(bio);
+	}
+}
+
 static inline void nullb_complete_cmd(struct nullb_cmd *cmd)
 {
+	/*
+	 * Since root privileges are required to configure the null_blk
+	 * driver, it is fine that this driver does not initialize the
+	 * data buffers of read commands. Zero-initialize these buffers
+	 * anyway if KMSAN is enabled to prevent that KMSAN complains
+	 * about null_blk not initializing read data buffers.
+	 */
+	if (IS_ENABLED(CONFIG_KMSAN))
+		nullb_zero_read_cmd_buffer(cmd);
+
 	/* Complete IO by inline, softirq or timer */
 	switch (cmd->nq->dev->irqmode) {
 	case NULL_IRQ_SOFTIRQ:

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

* Re: [PATCH v3 1/4] block: Fix type of first compat_put_{,u}long() argument
  2020-05-19  4:07 ` [PATCH v3 1/4] block: Fix type of first compat_put_{,u}long() argument Bart Van Assche
@ 2020-05-19  8:34   ` Johannes Thumshirn
  0 siblings, 0 replies; 9+ messages in thread
From: Johannes Thumshirn @ 2020-05-19  8:34 UTC (permalink / raw)
  To: Bart Van Assche, Jens Axboe
  Cc: linux-block, Christoph Hellwig, Ming Lei, Alexander Potapenko,
	Arnd Bergmann

Looks good,
Reviewed-by: Johannes Thumshirn <johannes.thumshirn@wdc.com>

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

* Re: [PATCH v3 2/4] bio.h: Declare the arguments of the bio iteration functions const
  2020-05-19  4:07 ` [PATCH v3 2/4] bio.h: Declare the arguments of the bio iteration functions const Bart Van Assche
@ 2020-05-19  8:35   ` Johannes Thumshirn
  0 siblings, 0 replies; 9+ messages in thread
From: Johannes Thumshirn @ 2020-05-19  8:35 UTC (permalink / raw)
  To: Bart Van Assche, Jens Axboe
  Cc: linux-block, Christoph Hellwig, Ming Lei, Alexander Potapenko,
	Chaitanya Kulkarni, Damien Le Moal

Looks good,
Reviewed-by: Johannes Thumshirn <johannes.thumshirn@wdc.com>

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

* Re: [PATCH v3 3/4] block: Document the bio_vec properties
  2020-05-19  4:07 ` [PATCH v3 3/4] block: Document the bio_vec properties Bart Van Assche
@ 2020-05-19 15:21   ` Christoph Hellwig
  0 siblings, 0 replies; 9+ messages in thread
From: Christoph Hellwig @ 2020-05-19 15:21 UTC (permalink / raw)
  To: Bart Van Assche
  Cc: Jens Axboe, linux-block, Christoph Hellwig, Ming Lei,
	Alexander Potapenko, Christoph Hellwig

On Mon, May 18, 2020 at 09:07:36PM -0700, Bart Van Assche wrote:
> Since it is nontrivial that nth_page() does not have to be used for a
> bio_vec, document this.

Looks good,

Reviewed-by: Christoph Hellwig <hch@lst.de>

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

* Re: [PATCH v3 0/4] Block layer patches for kernel v5.8
  2020-05-19  4:07 [PATCH v3 0/4] Block layer patches for kernel v5.8 Bart Van Assche
                   ` (3 preceding siblings ...)
  2020-05-19  4:07 ` [PATCH v3 4/4] null_blk: Zero-initialize read buffers in non-memory-backed mode Bart Van Assche
@ 2020-05-19 15:40 ` Jens Axboe
  4 siblings, 0 replies; 9+ messages in thread
From: Jens Axboe @ 2020-05-19 15:40 UTC (permalink / raw)
  To: Bart Van Assche
  Cc: linux-block, Christoph Hellwig, Ming Lei, Alexander Potapenko

On 5/18/20 10:07 PM, Bart Van Assche wrote:
> Hi Jens,
> 
> The patches in this series are what I came up with as the result of
> analyzing Alexander Potapenko's report about reading from null_blk.
> Please consider these patches for kernel v5.8.

Applied, thanks.

-- 
Jens Axboe


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

end of thread, other threads:[~2020-05-19 15:40 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-05-19  4:07 [PATCH v3 0/4] Block layer patches for kernel v5.8 Bart Van Assche
2020-05-19  4:07 ` [PATCH v3 1/4] block: Fix type of first compat_put_{,u}long() argument Bart Van Assche
2020-05-19  8:34   ` Johannes Thumshirn
2020-05-19  4:07 ` [PATCH v3 2/4] bio.h: Declare the arguments of the bio iteration functions const Bart Van Assche
2020-05-19  8:35   ` Johannes Thumshirn
2020-05-19  4:07 ` [PATCH v3 3/4] block: Document the bio_vec properties Bart Van Assche
2020-05-19 15:21   ` Christoph Hellwig
2020-05-19  4:07 ` [PATCH v3 4/4] null_blk: Zero-initialize read buffers in non-memory-backed mode Bart Van Assche
2020-05-19 15:40 ` [PATCH v3 0/4] Block layer patches for kernel v5.8 Jens Axboe

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.