Details
[Home]
Issue of the Implementation # L0019
Brief
drivers/mtd/mtd_blkdevs.c: Unsafe use of function module_put
Detailed Description
In driver drivers/mtd/mtd_blkdevs.c.ldv.c in function blktrans_open:
131 static int blktrans_open(struct block_device *bdev, fmode_t mode) 132 { 133 struct mtd_blktrans_dev *dev = bdev->bd_disk->private_data; 134 struct mtd_blktrans_ops *tr = dev->tr; 135 int ret = -ENODEV; 136 137 if (!get_mtd_device(NULL, dev->mtd->index)) 138 goto out; 139 140 if (!try_module_get(tr->owner)) 141 goto out_tr; 142 143 /* FIXME: Locking. A hot pluggable device can go away 144 (del_mtd_device can be called for it) without its module 145 being unloaded. */ 146 dev->mtd->usecount++; 147 148 ret = 0; 149 if (tr->open && (ret = tr->open(dev))) { 150 dev->mtd->usecount--; 151 put_mtd_device(dev->mtd); 152 out_tr: 153 module_put(tr->owner); 154 } 155 out: 156 return ret; 157 }
Reproducing
replace
141 goto out_tr;with
141 goto out;
Component
linux-kernel 2.6.32.6
Accepted
http://lkml.org/lkml/2010/1/12/246
commit
Status
Fixed in kernel 2.6.35
[Home]
»