Commit 1ca4367b authored by Omar Sandoval's avatar Omar Sandoval Committed by Sasha Levin

virtio_blk: fix panic in initialization error path

[ Upstream commit 6bf6b0aa ]

If blk_mq_init_queue() returns an error, it gets assigned to
vblk->disk->queue. Then, when we call put_disk(), we end up calling
blk_put_queue() with the ERR_PTR, causing a bad dereference. Fix it by
only assigning to vblk->disk->queue on success.
Signed-off-by: default avatarOmar Sandoval <osandov@fb.com>
Reviewed-by: default avatarJeff Moyer <jmoyer@redhat.com>
Signed-off-by: default avatarJens Axboe <axboe@fb.com>
Signed-off-by: default avatarSasha Levin <alexander.levin@verizon.com>
parent e07b3b23
...@@ -642,11 +642,12 @@ static int virtblk_probe(struct virtio_device *vdev) ...@@ -642,11 +642,12 @@ static int virtblk_probe(struct virtio_device *vdev)
if (err) if (err)
goto out_put_disk; goto out_put_disk;
q = vblk->disk->queue = blk_mq_init_queue(&vblk->tag_set); q = blk_mq_init_queue(&vblk->tag_set);
if (IS_ERR(q)) { if (IS_ERR(q)) {
err = -ENOMEM; err = -ENOMEM;
goto out_free_tags; goto out_free_tags;
} }
vblk->disk->queue = q;
q->queuedata = vblk; q->queuedata = vblk;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment