]> git.ipfire.org Git - thirdparty/kernel/stable.git/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)
committerLuis Henriques <luis.henriques@canonical.com>
Mon, 2 Mar 2015 13:17:12 +0000 (13:17 +0000)
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: Luis Henriques <luis.henriques@canonical.com>
block/blk-mq-tag.c

index 1caaa7c4605df929e654ae5ff4bc0d38de6c6d03..b88f4b375c27e4df3e9eed93dd40091e644a61e4 100644 (file)
@@ -511,6 +511,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;
        }