Подробности
[В начало]
Проблема в реализации № 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
[В начало]
»