]> 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)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 6 Mar 2015 22:52:56 +0000 (14:52 -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 ff18dab6b585fc7daf97ee312092bbf69249f64f..702ae29b8d90ff820aa3bc47a3f0c0cd535d1d55 100644 (file)
@@ -500,6 +500,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;
        }