blk-mq: fix double-free in error path
authorTony Battersby <tonyb@cybernetics.com>
Wed, 11 Feb 2015 16:32:30 +0000 (11:32 -0500)
committerJens Axboe <axboe@fb.com>
Wed, 11 Feb 2015 16:35:21 +0000 (09:35 -0700)
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.

Cc: <stable@vger.kernel.org>
Signed-off-by: Tony Battersby <tonyb@cybernetics.com>
Signed-off-by: Jens Axboe <axboe@fb.com>
block/blk-mq-tag.c

index e3387a74a9a2e63134512f7dd521266d61181115..d53a764b05eacde776a4454054795d1c0277d676 100644 (file)
@@ -524,6 +524,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;
        }