• Stefan Richter's avatar
    ieee1394: dv1394: fix possible deadlock in multithreaded clients · 8449fc3a
    Stefan Richter authored
    Fix a possible though highly unlikely deadlock:
    
    Thread A:                  Thread B:
     - acquire mmap_sem         - dv1394_ioctl/read/write()
     - dv1394_mmap()            - acquire video->mtx
     - acquire video->mtx       - copy_to/from_user(), possible page fault:
                                  acquire mmap_sem
    
    The simplest fix is to use mutex_trylock() instead of mutex_lock() in
    dv1394_mmap().  This changes the behavior under contention in a way
    which is visible to userspace clients.  However, my guess is that no
    clients exist which use mmap vs. ioctl/read/write on the dv1394
    character device file interface in concurrent threads.
    Reported-by: default avatarJohannes Weiner <hannes@saeurebad.de>
    Signed-off-by: default avatarStefan Richter <stefanr@s5r6.in-berlin.de>
    8449fc3a
dv1394.c 72.5 KB