Showing error 1177

User: Jiri Slaby
Error type: Double Unlock
Error type description: Some lock is unlocked twice unintentionally in a sequence
File location: fs/inotify_user.c
Line in file: 494
Project: Linux Kernel
Project version: 2.6.28
Tools: Stanse (1.2)
Entered: 2012-04-30 10:52:00 UTC


Source:

464        }
465
466        finish_wait(&dev->wq, &wait);
467        if (ret)
468                return ret;
469
470        while (1) {
471                struct inotify_kernel_event *kevent;
472
473                ret = buf - start;
474                if (list_empty(&dev->events))
475                        break;
476
477                kevent = inotify_dev_get_event(dev);
478                if (event_size + kevent->event.len > count) {
479                        if (ret == 0 && count > 0) {
480                                /*
481                                 * could not get a single event because we
482                                 * didn't have enough buffer space.
483                                 */
484                                ret = -EINVAL;
485                        }
486                        break;
487                }
488                remove_kevent(dev, kevent);
489
490                /*
491                 * Must perform the copy_to_user outside the mutex in order
492                 * to avoid a lock order reversal with mmap_sem.
493                 */
494                mutex_unlock(&dev->ev_mutex);
495
496                if (copy_to_user(buf, &kevent->event, event_size)) {
497                        ret = -EFAULT;
498                        break;
499                }
500                buf += event_size;
501                count -= event_size;
502
503                if (kevent->name) {
504                        if (copy_to_user(buf, kevent->name, kevent->event.len)){
Show full sources