bcache: fix use-after-free in register_bcache()
authorColy Li <colyli@suse.de>
Thu, 23 Jan 2020 17:01:30 +0000 (01:01 +0800)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 24 Feb 2020 07:36:57 +0000 (08:36 +0100)
[ Upstream commit ae3cd299919af6eb670d5af0bc9d7ba14086bd8e ]

The patch "bcache: rework error unwinding in register_bcache" introduces
a use-after-free regression in register_bcache(). Here are current code,
2510 out_free_path:
2511         kfree(path);
2512 out_module_put:
2513         module_put(THIS_MODULE);
2514 out:
2515         pr_info("error %s: %s", path, err);
2516         return ret;
If some error happens and the above code path is executed, at line 2511
path is released, but referenced at line 2515. Then KASAN reports a use-
after-free error message.

This patch changes line 2515 in the following way to fix the problem,
2515         pr_info("error %s: %s", path?path:"", err);

Signed-off-by: Coly Li <colyli@suse.de>
Cc: Christoph Hellwig <hch@lst.de>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
Signed-off-by: Sasha Levin <sashal@kernel.org>
drivers/md/bcache/super.c

index 86f7e09..485ebc2 100644 (file)
@@ -2472,10 +2472,11 @@ out_free_sb:
        kfree(sb);
 out_free_path:
        kfree(path);
+       path = NULL;
 out_module_put:
        module_put(THIS_MODULE);
 out:
-       pr_info("error %s: %s", path, err);
+       pr_info("error %s: %s", path?path:"", err);
        return ret;
 }