• Andrei Vagin's avatar
    pid: fix lockdep deadlock warning due to ucount_lock · add7c65c
    Andrei Vagin authored
    =========================================================
    [ INFO: possible irq lock inversion dependency detected ]
    4.10.0-rc2-00024-g4aecec9-dirty #118 Tainted: G        W
    ---------------------------------------------------------
    swapper/1/0 just changed the state of lock:
     (&(&sighand->siglock)->rlock){-.....}, at: [<ffffffffbd0a1bc6>] __lock_task_sighand+0xb6/0x2c0
    but this lock took another, HARDIRQ-unsafe lock in the past:
     (ucounts_lock){+.+...}
    and interrupts could create inverse lock ordering between them.
    other info that might help us debug this:
    Chain exists of:                 &(&sighand->siglock)->rlock --> &(&tty->ctrl_lock)->rlock --> ucounts_lock
     Possible interrupt unsafe locking scenario:
           CPU0                    CPU1
           ----                    ----
      lock(ucounts_lock);
                                   local_irq_disable();
                                   lock(&(&sighand->siglock)->rlock);
                                   lock(&(&tty->ctrl_lock)->rlock);
      <Interrupt>
        lock(&(&sighand->siglock)->rlock);
    
     *** DEADLOCK ***
    
    This patch removes a dependency between rlock and ucount_lock.
    
    Fixes: f333c700 ("pidns: Add a limit on the number of pid namespaces")
    Cc: stable@vger.kernel.org
    Signed-off-by: default avatarAndrei Vagin <avagin@openvz.org>
    Acked-by: default avatarAl Viro <viro@ZenIV.linux.org.uk>
    Signed-off-by: default avatarEric W. Biederman <ebiederm@xmission.com>
    add7c65c
pid_namespace.c 11 KB