]> git.hungrycats.org Git - linux/commitdiff
blk-mq: fix double-free in error path
authorTony Battersby <tonyb@cybernetics.com>
Wed, 11 Feb 2015 16:32:30 +0000 (11:32 -0500)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 6 Mar 2015 22:57:29 +0000 (14:57 -0800)
commit 564e559f2baf6a868768d0cac286980b3cfd6e30 upstream.

If the allocation of bt->bs fails, then bt->map can be freed twice, once
in blk_mq_init_bitmap_tags() -> bt_alloc(), and once in
blk_mq_init_bitmap_tags() -> bt_free().  Fix by setting the pointer to
NULL after the first free.

Signed-off-by: Tony Battersby <tonyb@cybernetics.com>
Signed-off-by: Jens Axboe <axboe@fb.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
block/blk-mq-tag.c

index 60c9d4a93fe470ced7471cd8653d8a00fc8922d7..3a415ecfe3d4fbd34b3038eb3acb5eae41f2778f 100644 (file)
@@ -509,6 +509,7 @@ static int bt_alloc(struct blk_mq_bitmap_tags *bt, unsigned int depth,
        bt->bs = kzalloc(BT_WAIT_QUEUES * sizeof(*bt->bs), GFP_KERNEL);
        if (!bt->bs) {
                kfree(bt->map);
+               bt->map = NULL;
                return -ENOMEM;
        }