block/nullb: fix NULL dereference
authorShaohua Li <shli@fb.com>
Fri, 25 Aug 2017 20:46:25 +0000 (13:46 -0700)
committerJens Axboe <axboe@kernel.dk>
Fri, 25 Aug 2017 20:52:01 +0000 (14:52 -0600)
Dan reported this:

The patch 2984c8684f96: "nullb: factor disk parameters" from Aug 14,
2017, leads to the following Smatch complaint:

drivers/block/null_blk.c:1759 null_init_tag_set()
 error: we previously assumed 'nullb' could be null (see line
1750)

  1755 set->cmd_size = sizeof(struct nullb_cmd);
  1756 set->flags = BLK_MQ_F_SHOULD_MERGE;
  1757 set->driver_data = NULL;
  1758
  1759 if (nullb->dev->blocking)
                    ^^^^^^^^^^^^^^^^^^^^
And an unchecked dereference.

nullb could be NULL here.

Reported-by: Dan Carpenter <dan.carpenter@oracle.com>
Signed-off-by: Shaohua Li <shli@fb.com>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
drivers/block/null_blk.c

index 70b17db8c21fd95843e32d9c147933515240529e..6472135255496d5d4167bfd2d378ec72ca146d6b 100644 (file)
@@ -1756,7 +1756,7 @@ static int null_init_tag_set(struct nullb *nullb, struct blk_mq_tag_set *set)
        set->flags = BLK_MQ_F_SHOULD_MERGE;
        set->driver_data = NULL;
 
-       if (nullb->dev->blocking)
+       if ((nullb && nullb->dev->blocking) || g_blocking)
                set->flags |= BLK_MQ_F_BLOCKING;
 
        return blk_mq_alloc_tag_set(set);