pktcdvd: fix BUG caused by sysfs module reference semantics change
pkt_setup_dev() expects module reference to be held on invocation. This used to be true for sysfs callbacks but not anymore. Test and grab module reference around pkt_setup_dev() in class_pktcdvd_store_add(). Signed-off-by: Tejun Heo <htejun@gmail.com> Acked-by: Peter Osterlund <petero2@telia.com> Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
This commit is contained in:
@@ -358,10 +358,19 @@ static ssize_t class_pktcdvd_store_add(struct class *c, const char *buf,
|
|||||||
size_t count)
|
size_t count)
|
||||||
{
|
{
|
||||||
unsigned int major, minor;
|
unsigned int major, minor;
|
||||||
|
|
||||||
if (sscanf(buf, "%u:%u", &major, &minor) == 2) {
|
if (sscanf(buf, "%u:%u", &major, &minor) == 2) {
|
||||||
|
/* pkt_setup_dev() expects caller to hold reference to self */
|
||||||
|
if (!try_module_get(THIS_MODULE))
|
||||||
|
return -ENODEV;
|
||||||
|
|
||||||
pkt_setup_dev(MKDEV(major, minor), NULL);
|
pkt_setup_dev(MKDEV(major, minor), NULL);
|
||||||
|
|
||||||
|
module_put(THIS_MODULE);
|
||||||
|
|
||||||
return count;
|
return count;
|
||||||
}
|
}
|
||||||
|
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user