Commit e6d53f5f authored by Omar Sandoval's avatar Omar Sandoval Committed by Greg Kroah-Hartman

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>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 952d07ac
...@@ -630,11 +630,12 @@ static int virtblk_probe(struct virtio_device *vdev) ...@@ -630,11 +630,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