Re: [Linux Kernel Bug][drivers/media/dvb] possible deadlock in dvb_demux_release

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Dear Linux Developers for DVB,

I am reaching out to query if there is any update for this possible
deadlock in dvb_demux_release.

If any further information is required, please let me know.

Best,
Chenyuan

On Thu, Feb 1, 2024 at 10:08 AM Chenyuan Yang <chenyuan0y@xxxxxxxxx> wrote:
>
> Dear Linux Developers for DVB,
>
> We encountered "possible deadlock in dvb_demux_release" when testing
> the dvb driver with Syzkaller and our generated specifications.
>
> The C and syz reproducers and the config for the kernel are attached.
>
> ```
> ======================================================
> WARNING: possible circular locking dependency detected
> 6.6.0-gd2f51b3516da #1 Not tainted
> ------------------------------------------------------
> syz-executor325/10412 is trying to acquire lock:
> ffff8880468d8ad8 (&dmxdev->mutex){+.+.}-{3:3}, at:
> dvb_dmxdev_filter_free linux/drivers/media/dvb-core/dmxdev.c:833
> [inline]
> ffff8880468d8ad8 (&dmxdev->mutex){+.+.}-{3:3}, at:
> dvb_demux_release+0x8a/0x600
> linux/drivers/media/dvb-core/dmxdev.c:1246
>
> but task is already holding lock:
> ffffc9000a5aa4c0 (&ctx->mutex){+.+.}-{3:3}, at: _dmxdev_lock+0x40/0x90
> linux/drivers/media/dvb-core/dvb_vb2.c:110
>
> which lock already depends on the new lock.
>
>
> the existing dependency chain (in reverse order) is:
>
> -> #1 (&ctx->mutex){+.+.}-{3:3}:
>        __lock_release linux/kernel/locking/lockdep.c:5467 [inline]
>        lock_release+0x3c0/0x870 linux/kernel/locking/lockdep.c:5773
>        __mutex_unlock_slowpath+0x9e/0x600 linux/kernel/locking/mutex.c:907
>        dvb_demux_do_ioctl+0x3ab/0x1630
> linux/drivers/media/dvb-core/dmxdev.c:1171
>        dvb_usercopy+0xc2/0x280 linux/drivers/media/dvb-core/dvbdev.c:986
>        dvb_demux_ioctl+0x31/0x40 linux/drivers/media/dvb-core/dmxdev.c:1185
>        vfs_ioctl linux/fs/ioctl.c:51 [inline]
>        __do_sys_ioctl linux/fs/ioctl.c:871 [inline]
>        __se_sys_ioctl linux/fs/ioctl.c:857 [inline]
>        __x64_sys_ioctl+0x1a2/0x210 linux/fs/ioctl.c:857
>        do_syscall_x64 linux/arch/x86/entry/common.c:51 [inline]
>        do_syscall_64+0x40/0x110 linux/arch/x86/entry/common.c:82
>        entry_SYSCALL_64_after_hwframe+0x63/0x6b
>
> -> #0 (&dmxdev->mutex){+.+.}-{3:3}:
>        check_prev_add linux/kernel/locking/lockdep.c:3134 [inline]
>        check_prevs_add linux/kernel/locking/lockdep.c:3253 [inline]
>        validate_chain linux/kernel/locking/lockdep.c:3868 [inline]
>        __lock_acquire+0x24a1/0x3b40 linux/kernel/locking/lockdep.c:5136
>        lock_acquire linux/kernel/locking/lockdep.c:5753 [inline]
>        lock_acquire+0x219/0x650 linux/kernel/locking/lockdep.c:5718
>        __mutex_lock_common linux/kernel/locking/mutex.c:603 [inline]
>        __mutex_lock+0x14c/0x940 linux/kernel/locking/mutex.c:747
>        dvb_dmxdev_filter_free linux/drivers/media/dvb-core/dmxdev.c:833 [inline]
>        dvb_demux_release+0x8a/0x600 linux/drivers/media/dvb-core/dmxdev.c:1246
>        __fput+0x287/0xbf0 linux/fs/file_table.c:394
>        task_work_run+0x16d/0x260 linux/kernel/task_work.c:180
>        exit_task_work linux/./include/linux/task_work.h:38 [inline]
>        do_exit+0xc38/0x2c00 linux/kernel/exit.c:871
>        do_group_exit+0xd9/0x2b0 linux/kernel/exit.c:1021
>        get_signal+0x244a/0x2640 linux/kernel/signal.c:2904
>        arch_do_signal_or_restart+0x86/0x7e0 linux/arch/x86/kernel/signal.c:309
>        exit_to_user_mode_loop linux/kernel/entry/common.c:168 [inline]
>        exit_to_user_mode_prepare+0x150/0x250 linux/kernel/entry/common.c:204
>        __syscall_exit_to_user_mode_work linux/kernel/entry/common.c:285 [inline]
>        syscall_exit_to_user_mode+0x1b/0x50 linux/kernel/entry/common.c:296
>        do_syscall_64+0x4d/0x110 linux/arch/x86/entry/common.c:88
>        entry_SYSCALL_64_after_hwframe+0x63/0x6b
>
> other info that might help us debug this:
>
>  Possible unsafe locking scenario:
>
>        CPU0                    CPU1
>        ----                    ----
>   lock(&ctx->mutex);
>                                lock(&dmxdev->mutex);
>                                lock(&ctx->mutex);
>   lock(&dmxdev->mutex);
>
>  *** DEADLOCK ***
> ```
>
> If you have any questions or require more information, please feel
> free to contact us.
>
> Reported-by: Chenyuan Yang <chenyuan0y@xxxxxxxxx>
>
> Best,
> Chenyuan





[Index of Archives]     [Linux Input]     [Video for Linux]     [Gstreamer Embedded]     [Mplayer Users]     [Linux USB Devel]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Yosemite Backpacking]

  Powered by Linux