ubi: block: Fix a possible use-after-free bug in ubiblock_create()
authorHarshit Mogalapalli <harshit.m.mogalapalli@oracle.com>
Tue, 14 Feb 2023 09:38:01 +0000 (01:38 -0800)
committerRichard Weinberger <richard@nod.at>
Tue, 14 Feb 2023 14:17:55 +0000 (15:17 +0100)
Smatch warns:
drivers/mtd/ubi/block.c:438 ubiblock_create()
warn: '&dev->list' not removed from list

'dev' is freed in 'out_free_dev:, but it is still on the list.

To fix this, delete the list item before freeing.

Fixes: 91cc8fbcc8c7 ("ubi: block: set BLK_MQ_F_BLOCKING")
Signed-off-by: Harshit Mogalapalli <harshit.m.mogalapalli@oracle.com>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Richard Weinberger <richard@nod.at>
drivers/mtd/ubi/block.c

index 6a9eb2c860b5a9b299b74836825715ecf45d6791..1de87062c67b9b54ca6664abeadefaf4971dbafb 100644 (file)
@@ -429,6 +429,7 @@ int ubiblock_create(struct ubi_volume_info *vi)
        return 0;
 
 out_remove_minor:
+       list_del(&dev->list);
        idr_remove(&ubiblock_minor_idr, gd->first_minor);
 out_cleanup_disk:
        put_disk(dev->gd);