Подробности
[В начало]
Проблема в реализации № L0019
Краткое описание
drivers/mtd/mtd_blkdevs.c: Небезопасный вызов функции module_put
Подробное описание
В драйвере drivers/mtd/mtd_blkdevs.c в функции 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 }
Способ воспроизведения
заменить:
141 goto out_tr;на
141 goto out;
Компонент
linux-kernel 2.6.32.6
Принято
http://lkml.org/lkml/2010/1/12/246
commit
Статус
Исправлено в ядре 2.6.35
[В начало]
»