提交 5b064708 编写于 作者: O Oliver Neukum 提交者: Greg Kroah-Hartman

USB: fix autosuspend race in skeleton driver

as the skeleton driver was made ready for autosuspend a race condition
was introduced. The reference to get device must be gotten before the
autosuspend counter is upped, as this operation may sleep, dropping BKL.
Dropping BKL means that the pointer to the device may become invalid.
Here's the fix.
Signed-off-by: NOliver Neukum <oneukum@suse.de>
Signed-off-by: NGreg Kroah-Hartman <gregkh@suse.de>
上级 57e4f041
......@@ -90,13 +90,15 @@ static int skel_open(struct inode *inode, struct file *file)
goto exit;
}
/* increment our usage count for the device */
kref_get(&dev->kref);
/* prevent the device from being autosuspended */
retval = usb_autopm_get_interface(interface);
if (retval)
if (retval) {
kref_put(&dev->kref, skel_delete);
goto exit;
/* increment our usage count for the device */
kref_get(&dev->kref);
}
/* save our object in the file's private structure */
file->private_data = dev;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册