ubi: block: fix null-pointer-dereference in ubiblock_create()
Similar to commit adbf4c4954e3 ("ubi: block: fix memleak in ubiblock_create()"), 'dev->gd' is not assigned but dereferenced if blk_mq_alloc_tag_set() fails, and leading to a null-pointer-dereference. Fix it by using pr_err() and variable 'dev' to print error log. Additionally, the log in the error handle path of idr_alloc() has been improved by using pr_err(), too. Before initializing device name, using dev_err() will print error log with 'null' instead of the actual device name, like this: block (null): ... ~~~~~~ It is unclear. Using pr_err() can print more details of the device. The improved log is: ubiblock0_0: ... Fixes: 77567b25ab9f ("ubi: use blk_mq_alloc_disk and blk_cleanup_disk") Reported-by: Dan Carpenter <dan.carpenter@linaro.org> Signed-off-by: Li Nan <linan122@huawei.com> Reviewed-by: Zhihao Cheng <chengzhihao1@huawei.com> Reviewed-by: Daniel Golle <daniel@makrotopia.org> Signed-off-by: Richard Weinberger <richard@nod.at>
This commit is contained in:
parent
39986148bc
commit
4f9d406c8c
@ -390,7 +390,8 @@ int ubiblock_create(struct ubi_volume_info *vi)
|
||||
|
||||
ret = blk_mq_alloc_tag_set(&dev->tag_set);
|
||||
if (ret) {
|
||||
dev_err(disk_to_dev(dev->gd), "blk_mq_alloc_tag_set failed");
|
||||
pr_err("ubiblock%d_%d: blk_mq_alloc_tag_set failed\n",
|
||||
dev->ubi_num, dev->vol_id);
|
||||
goto out_free_dev;
|
||||
}
|
||||
|
||||
@ -407,8 +408,8 @@ int ubiblock_create(struct ubi_volume_info *vi)
|
||||
gd->minors = 1;
|
||||
gd->first_minor = idr_alloc(&ubiblock_minor_idr, dev, 0, 0, GFP_KERNEL);
|
||||
if (gd->first_minor < 0) {
|
||||
dev_err(disk_to_dev(gd),
|
||||
"block: dynamic minor allocation failed");
|
||||
pr_err("ubiblock%d_%d: block: dynamic minor allocation failed\n",
|
||||
dev->ubi_num, dev->vol_id);
|
||||
ret = -ENODEV;
|
||||
goto out_cleanup_disk;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user