Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

Staging: comedi: unlock on error in usbdux_ao_inttrig()

If we had an invalid trignum (anything other than zero is invalid) then
we returned without unlocking. I've modified this function to just have
one return point.

Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>

authored by

Dan Carpenter and committed by
Greg Kroah-Hartman
d6610a50 2d2c880f

+9 -6
+9 -6
drivers/staging/comedi/drivers/usbduxsigma.c
··· 1523 1523 return -EFAULT; 1524 1524 1525 1525 down(&this_usbduxsub->sem); 1526 + 1526 1527 if (!(this_usbduxsub->probed)) { 1527 - up(&this_usbduxsub->sem); 1528 - return -ENODEV; 1528 + ret = -ENODEV; 1529 + goto out; 1529 1530 } 1530 1531 if (trignum != 0) { 1531 1532 dev_err(&this_usbduxsub->interface->dev, 1532 1533 "comedi%d: usbdux_ao_inttrig: invalid trignum\n", 1533 1534 dev->minor); 1534 - return -EINVAL; 1535 + ret = -EINVAL; 1536 + goto out; 1535 1537 } 1536 1538 if (!(this_usbduxsub->ao_cmd_running)) { 1537 1539 this_usbduxsub->ao_cmd_running = 1; ··· 1543 1541 "comedi%d: usbdux_ao_inttrig: submitURB: " 1544 1542 "err=%d\n", dev->minor, ret); 1545 1543 this_usbduxsub->ao_cmd_running = 0; 1546 - up(&this_usbduxsub->sem); 1547 - return ret; 1544 + goto out; 1548 1545 } 1549 1546 s->async->inttrig = NULL; 1550 1547 } else { ··· 1551 1550 "comedi%d: ao_inttrig but acqu is already running.\n", 1552 1551 dev->minor); 1553 1552 } 1553 + ret = 1; 1554 + out: 1554 1555 up(&this_usbduxsub->sem); 1555 - return 1; 1556 + return ret; 1556 1557 } 1557 1558 1558 1559 static int usbdux_ao_cmdtest(struct comedi_device *dev,