Messages in this thread | | | Date | Wed, 07 Jul 2010 14:52:58 +0200 | From | Jiri Slaby <> | Subject | MEDIA: lirc, improper locking |
| |
Hi,
stanse found a locking error in lirc_dev_fop_read: if (mutex_lock_interruptible(&ir->irctl_lock)) return -ERESTARTSYS; ... while (written < length && ret == 0) { if (mutex_lock_interruptible(&ir->irctl_lock)) { #1 ret = -ERESTARTSYS; break; } ... }
remove_wait_queue(&ir->buf->wait_poll, &wait); set_current_state(TASK_RUNNING); mutex_unlock(&ir->irctl_lock); #2
If lock at #1 fails, it beaks out of the loop, with the lock unlocked, but there is another "unlock" at #2.
regards, -- js
| |