mirror of https://gitee.com/openkylin/linux.git
staging: comedi: don't release mutex too early in comedi_auto_config()
`comedi_auto_config()` uses `dev->class_dev` for logging a kernel message after releasing `dev->mutex`. There is an unlikely possibility that the Comedi device `dev` will have been removed by the `COMEDI_DEVCONFIG` ioctl() command. Keep hold of the mutex until the kernel message has been sent to prevent that. The function can call `comedi_release_hardware_device()` on error. In that case, the mutex must be unlocked before that. Signed-off-by: Ian Abbott <abbotti@mev.co.uk> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
2e299cc969
commit
f439696c81
|
@ -1059,12 +1059,12 @@ int comedi_auto_config(struct device *hardware_device,
|
|||
ret = driver->auto_attach(dev, context);
|
||||
if (ret >= 0)
|
||||
ret = comedi_device_postconfig(dev);
|
||||
mutex_unlock(&dev->mutex);
|
||||
|
||||
if (ret < 0) {
|
||||
dev_warn(hardware_device,
|
||||
"driver '%s' failed to auto-configure device.\n",
|
||||
driver->driver_name);
|
||||
mutex_unlock(&dev->mutex);
|
||||
comedi_release_hardware_device(hardware_device);
|
||||
} else {
|
||||
/*
|
||||
|
@ -1074,6 +1074,7 @@ int comedi_auto_config(struct device *hardware_device,
|
|||
dev_info(dev->class_dev,
|
||||
"driver '%s' has successfully auto-configured '%s'.\n",
|
||||
driver->driver_name, dev->board_name);
|
||||
mutex_unlock(&dev->mutex);
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue