• Hans Verkuil's avatar
    [media] vb2: fix vb2_thread_stop race conditions · 6cf11ee6
    Hans Verkuil authored
    The locking scheme inside the vb2 thread is unsafe when stopping the
    thread. In particular kthread_stop was called *after* internal data
    structures were cleaned up instead of doing that before. In addition,
    internal vb2 functions were called after threadio->stop was set to
    true and vb2_internal_streamoff was called. This is also not allowed.
    
    All this led to a variety of race conditions and kernel warnings and/or
    oopses.
    
    Fixed by moving the kthread_stop call up before the cleanup takes
    place, and by checking threadio->stop before calling internal vb2
    queuing operations.
    Signed-off-by: default avatarHans Verkuil <hans.verkuil@cisco.com>
    Cc: <stable@vger.kernel.org>      # for v3.16 and up
    Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@osg.samsung.com>
    6cf11ee6
videobuf2-core.c 95.5 KB