USB: auerswald: fix file release handler
If this down_interruptible() does fail due to signal_pending() then the state of the driver will get trashed in interesting ways, because userspace cannot and will not retry the close(). Cc: Jiri Slaby <jirislaby@gmail.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
This commit is contained in:
parent
fcbd963912
commit
be23edf848
|
@ -1822,16 +1822,10 @@ static int auerchar_release (struct inode *inode, struct file *file)
|
||||||
pauerswald_t cp;
|
pauerswald_t cp;
|
||||||
dbg("release");
|
dbg("release");
|
||||||
|
|
||||||
/* get the mutexes */
|
down(&ccp->mutex);
|
||||||
if (down_interruptible (&ccp->mutex)) {
|
|
||||||
return -ERESTARTSYS;
|
|
||||||
}
|
|
||||||
cp = ccp->auerdev;
|
cp = ccp->auerdev;
|
||||||
if (cp) {
|
if (cp) {
|
||||||
if (down_interruptible (&cp->mutex)) {
|
down(&cp->mutex);
|
||||||
up (&ccp->mutex);
|
|
||||||
return -ERESTARTSYS;
|
|
||||||
}
|
|
||||||
/* remove an open service */
|
/* remove an open service */
|
||||||
auerswald_removeservice (cp, &ccp->scontext);
|
auerswald_removeservice (cp, &ccp->scontext);
|
||||||
/* detach from device */
|
/* detach from device */
|
||||||
|
|
Loading…
Reference in New Issue