lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Date:	Wed, 23 Nov 2011 15:29:17 +0800
From:	Cong Wang <xiyou.wangcong@...il.com>
To:	Dave Jones <davej@...hat.com>,
	Linux Kernel <linux-kernel@...r.kernel.org>,
	Greg Kroah-Hartman <gregkh@...e.de>,
	Havard Skinnemoen <hskinnemoen@...gle.com>
Subject: Re: tty related lockdep trace during bootup on 3.2-rc2

On Wed, Nov 23, 2011 at 11:38 AM, Dave Jones <davej@...hat.com> wrote:
> From Linus' current tree...
>
> related to 5dc2470c602da8851907ec18942cd876c3b4ecc1 maybe ?
>
>        Dave
>
> [   40.778011] ======================================================
> [   40.780010] [ INFO: possible circular locking dependency detected ]
> [   40.780010] 3.2.0-rc2+ #8
> [   40.780010] -------------------------------------------------------
> [   40.780010] modem-manager/1141 is trying to acquire lock:
> [   40.780010]  (big_tty_mutex){+.+.+.}, at: [<ffffffff81682807>] tty_lock+0x17/0x19
> [   40.780010]
> [   40.780010] but task is already holding lock:
> [   40.780010]  (open_mutex){+.+...}, at: [<ffffffffa032b321>] acm_tty_close+0x41/0xc0 [cdc_acm]
> [   40.780010]
> [   40.780010] which lock already depends on the new lock.
> [   40.780010]
> [   40.780010]
> [   40.780010] the existing dependency chain (in reverse order) is:
> [   40.780010]
> [   40.780010] -> #1 (open_mutex){+.+...}:
> [   40.780010]        [<ffffffff810c1d9d>] lock_acquire+0x9d/0x210
> [   40.780010]        [<ffffffff8168003e>] __mutex_lock_common+0x5e/0x4f0
> [   40.780010]        [<ffffffff81680604>] mutex_lock_nested+0x44/0x50
> [   40.780010]        [<ffffffffa032b715>] acm_tty_open+0x35/0x230 [cdc_acm]
> [   40.780010]        [<ffffffff813c1087>] tty_open+0x247/0x5d0
> [   40.780010]        [<ffffffff811b5408>] chrdev_open+0x258/0x350
> [   40.780010]        [<ffffffff811ad9a4>] __dentry_open+0x384/0x550
> [   40.780010]        [<ffffffff811af194>] nameidata_to_filp+0x74/0x80
> [   40.780010]        [<ffffffff811c0b6c>] do_last+0x26c/0x920
> [   40.780010]        [<ffffffff811c1335>] path_openat+0xd5/0x3e0
> [   40.780010]        [<ffffffff811c1762>] do_filp_open+0x42/0xa0
> [   40.780010]        [<ffffffff811af297>] do_sys_open+0xf7/0x1d0
> [   40.780010]        [<ffffffff811af390>] sys_open+0x20/0x30
> [   40.780010]        [<ffffffff81689f82>] system_call_fastpath+0x16/0x1b
> [   40.780010]
> [   40.780010] -> #0 (big_tty_mutex){+.+.+.}:
> [   40.780010]        [<ffffffff810c112e>] __lock_acquire+0x16ce/0x1c40
> [   40.780010]        [<ffffffff810c1d9d>] lock_acquire+0x9d/0x210
> [   40.780010]        [<ffffffff8168003e>] __mutex_lock_common+0x5e/0x4f0
> [   40.780010]        [<ffffffff81680604>] mutex_lock_nested+0x44/0x50
> [   40.780010]        [<ffffffff81682807>] tty_lock+0x17/0x19
> [   40.780010]        [<ffffffff813c91ad>] tty_port_close_start+0x17d/0x210
> [   40.780010]        [<ffffffffa032b32f>] acm_tty_close+0x4f/0xc0 [cdc_acm]
> [   40.780010]        [<ffffffff813c09e7>] tty_release+0x167/0x5c0
> [   40.780010]        [<ffffffff811b252e>] fput+0xfe/0x2d0
> [   40.780010]        [<ffffffff811adee9>] filp_close+0x69/0x90
> [   40.780010]        [<ffffffff811ae1d0>] sys_close+0xc0/0x1a0
> [   40.780010]        [<ffffffff81689f82>] system_call_fastpath+0x16/0x1b
> [   40.780010]
> [   40.780010] other info that might help us debug this:
> [   40.780010]
> [   40.780010]  Possible unsafe locking scenario:
> [   40.780010]
> [   40.780010]        CPU0                    CPU1
> [   40.780010]        ----                    ----
> [   40.780010]   lock(open_mutex);
> [   40.780010]                                lock(big_tty_mutex);
> [   40.780010]                                lock(open_mutex);
> [   40.780010]   lock(big_tty_mutex);
> [   40.780010]
> [   40.780010]  *** DEADLOCK ***
> [   40.780010]
> [   40.780010] 1 lock held by modem-manager/1141:
> [   40.780010]  #0:  (open_mutex){+.+...}, at: [<ffffffffa032b321>] acm_tty_close+0x41/0xc0 [cdc_acm]
> [   40.780010]
> [   40.780010] stack backtrace:
> [   40.780010] Pid: 1141, comm: modem-manager Not tainted 3.2.0-rc2+ #8
> [   40.780010] Call Trace:
> [   40.780010]  [<ffffffff81675378>] print_circular_bug+0x202/0x213
> [   40.780010]  [<ffffffff810c112e>] __lock_acquire+0x16ce/0x1c40
> [   40.780010]  [<ffffffff81021f62>] ? native_sched_clock+0x22/0x70
> [   40.780010]  [<ffffffff810ae2c5>] ? sched_clock_local+0x25/0x90
> [   40.780010]  [<ffffffff810c1d9d>] lock_acquire+0x9d/0x210
> [   40.780010]  [<ffffffff81682807>] ? tty_lock+0x17/0x19
> [   40.780010]  [<ffffffff810c180a>] ? lock_release_non_nested+0x16a/0x350
> [   40.780010]  [<ffffffff8168003e>] __mutex_lock_common+0x5e/0x4f0
> [   40.780010]  [<ffffffff81682807>] ? tty_lock+0x17/0x19
> [   40.780010]  [<ffffffff810c2796>] ? mark_held_locks+0x86/0x150
> [   40.780010]  [<ffffffff816807ae>] ? mutex_unlock+0xe/0x10
> [   40.780010]  [<ffffffff81682807>] ? tty_lock+0x17/0x19
> [   40.780010]  [<ffffffff81680604>] mutex_lock_nested+0x44/0x50
> [   40.780010]  [<ffffffff81682807>] tty_lock+0x17/0x19
> [   40.780010]  [<ffffffff813c91ad>] tty_port_close_start+0x17d/0x210
> [   40.780010]  [<ffffffffa032b32f>] acm_tty_close+0x4f/0xc0 [cdc_acm]
> [   40.780010]  [<ffffffff813c09e7>] tty_release+0x167/0x5c0
> [   40.780010]  [<ffffffff81021fb9>] ? sched_clock+0x9/0x10
> [   40.780010]  [<ffffffff810ae2c5>] ? sched_clock_local+0x25/0x90
> [   40.780010]  [<ffffffff811b252e>] fput+0xfe/0x2d0
> [   40.780010]  [<ffffffff811adee9>] filp_close+0x69/0x90
> [   40.780010]  [<ffffffff811ae1d0>] sys_close+0xc0/0x1a0
> [   40.780010]  [<ffffffff81689f82>] system_call_fastpath+0x16/0x1b
>

Will the following untested patch fix this problem?

------->
tty_port_close_start() will acquire big_tty_mutex, so don't
call it with  open_mutex held.

Signed-off-by: WANG Cong <xiyou.wangcong@...il.com>

View attachment "tty-fix.patch" of type "text/x-patch" (745 bytes)

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ