pcmcia: fix error handling in cm4000_cs.c
In the original code we used -ENODEV as the number of bytes to copy_to_user() and we didn't release the locks. Signed-off-by: Dan Carpenter <error27@gmail.com> Acked-by: Harald Welte <laforge@gnumonks.org> Signed-off-by: Dominik Brodowski <linux@dominikbrodowski.net>
This commit is contained in:
parent
42d284b986
commit
07a71415d5
|
@ -1026,14 +1026,16 @@ static ssize_t cmm_read(struct file *filp, __user char *buf, size_t count,
|
||||||
|
|
||||||
xoutb(0, REG_FLAGS1(iobase)); /* clear detectCMM */
|
xoutb(0, REG_FLAGS1(iobase)); /* clear detectCMM */
|
||||||
/* last check before exit */
|
/* last check before exit */
|
||||||
if (!io_detect_cm4000(iobase, dev))
|
if (!io_detect_cm4000(iobase, dev)) {
|
||||||
count = -ENODEV;
|
rc = -ENODEV;
|
||||||
|
goto release_io;
|
||||||
|
}
|
||||||
|
|
||||||
if (test_bit(IS_INVREV, &dev->flags) && count > 0)
|
if (test_bit(IS_INVREV, &dev->flags) && count > 0)
|
||||||
str_invert_revert(dev->rbuf, count);
|
str_invert_revert(dev->rbuf, count);
|
||||||
|
|
||||||
if (copy_to_user(buf, dev->rbuf, count))
|
if (copy_to_user(buf, dev->rbuf, count))
|
||||||
return -EFAULT;
|
rc = -EFAULT;
|
||||||
|
|
||||||
release_io:
|
release_io:
|
||||||
clear_bit(LOCK_IO, &dev->flags);
|
clear_bit(LOCK_IO, &dev->flags);
|
||||||
|
|
Loading…
Reference in New Issue