On Sat, May 16, 2020 at 2:19 AM Bart Van Assche <bvanassche@xxxxxxx> wrote: > > This patch suppresses an uninteresting KMSAN complaint without affecting > performance of the null_blk driver if CONFIG_KMSAN is disabled. > > Cc: Christoph Hellwig <hch@xxxxxx> > Cc: Ming Lei <ming.lei@xxxxxxxxxx> > Cc: Damien Le Moal <damien.lemoal@xxxxxxx> > Cc: Chaitanya Kulkarni <chaitanya.kulkarni@xxxxxxx> > Cc: Alexander Potapenko <glider@xxxxxxxxxx> > Reported-by: Alexander Potapenko <glider@xxxxxxxxxx> > Signed-off-by: Bart Van Assche <bvanassche@xxxxxxx> Tested-by: Alexander Potapenko <glider@xxxxxxxxxx> > --- > drivers/block/null_blk_main.c | 30 ++++++++++++++++++++++++++++++ > 1 file changed, 30 insertions(+) > > diff --git a/drivers/block/null_blk_main.c b/drivers/block/null_blk_main.c > index 06f5761fccb6..df1e144eeaa4 100644 > --- a/drivers/block/null_blk_main.c > +++ b/drivers/block/null_blk_main.c > @@ -1250,8 +1250,38 @@ static inline blk_status_t null_handle_memory_backed(struct nullb_cmd *cmd, > return errno_to_blk_status(err); > } > > +static void nullb_zero_rq_data_buffer(const struct request *rq) > +{ > + struct req_iterator iter; > + struct bio_vec bvec; > + > + rq_for_each_bvec(bvec, rq, iter) > + zero_fill_bvec(&bvec); > +} > + > +static void nullb_zero_read_cmd_buffer(struct nullb_cmd *cmd) > +{ > + struct nullb_device *dev = cmd->nq->dev; > + > + 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) > + nullb_zero_rq_data_buffer(cmd->rq); > +} > + > +/* Complete a request. Only called if dev->memory_backed == 0. */ > 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: -- Alexander Potapenko Software Engineer Google Germany GmbH Erika-Mann-Straße, 33 80636 München Geschäftsführer: Paul Manicle, Halimah DeLaine Prado Registergericht und -nummer: Hamburg, HRB 86891 Sitz der Gesellschaft: Hamburg