Commit f439696c authored by Ian Abbott's avatar Ian Abbott Committed by Greg Kroah-Hartman

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: default avatarIan Abbott <abbotti@mev.co.uk>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 2e299cc9
...@@ -1059,12 +1059,12 @@ int comedi_auto_config(struct device *hardware_device, ...@@ -1059,12 +1059,12 @@ int comedi_auto_config(struct device *hardware_device,
ret = driver->auto_attach(dev, context); ret = driver->auto_attach(dev, context);
if (ret >= 0) if (ret >= 0)
ret = comedi_device_postconfig(dev); ret = comedi_device_postconfig(dev);
mutex_unlock(&dev->mutex);
if (ret < 0) { if (ret < 0) {
dev_warn(hardware_device, dev_warn(hardware_device,
"driver '%s' failed to auto-configure device.\n", "driver '%s' failed to auto-configure device.\n",
driver->driver_name); driver->driver_name);
mutex_unlock(&dev->mutex);
comedi_release_hardware_device(hardware_device); comedi_release_hardware_device(hardware_device);
} else { } else {
/* /*
...@@ -1074,6 +1074,7 @@ int comedi_auto_config(struct device *hardware_device, ...@@ -1074,6 +1074,7 @@ int comedi_auto_config(struct device *hardware_device,
dev_info(dev->class_dev, dev_info(dev->class_dev,
"driver '%s' has successfully auto-configured '%s'.\n", "driver '%s' has successfully auto-configured '%s'.\n",
driver->driver_name, dev->board_name); driver->driver_name, dev->board_name);
mutex_unlock(&dev->mutex);
} }
return ret; return ret;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment