• Vineet Gupta's avatar
    ARC: show_regs: lockdep: re-enable preemption · 96af7d92
    Vineet Gupta authored
    [ Upstream commit f731a8e8 ]
    
    signal handling core calls show_regs() with preemption disabled which
    on ARC takes mmap_sem for mm/vma access, causing lockdep splat.
    
    | [ARCLinux]# ./segv-null-ptr
    | potentially unexpected fatal signal 11.
    | BUG: sleeping function called from invalid context at kernel/fork.c:1011
    | in_atomic(): 1, irqs_disabled(): 0, pid: 70, name: segv-null-ptr
    | no locks held by segv-null-ptr/70.
    | CPU: 0 PID: 70 Comm: segv-null-ptr Not tainted 4.18.0+ #69
    |
    | Stack Trace:
    |  arc_unwind_core+0xcc/0x100
    |  ___might_sleep+0x17a/0x190
    |  mmput+0x16/0xb8
    |  show_regs+0x52/0x310
    |  get_signal+0x5ee/0x610
    |  do_signal+0x2c/0x218
    |  resume_user_mode_begin+0x90/0xd8
    
    Workaround by re-enabling preemption temporarily.
    
    Note that the preemption disabling in core code around show_regs()
    was introduced by commit 3a9f84d3 ("signals, debug: fix BUG: using
    smp_processor_id() in preemptible code in print_fatal_signal()")
    
    to silence a differnt lockdep seen on x86 bakc in 2009.
    
    Cc: <stable@vger.kernel.org>
    Signed-off-by: default avatarVineet Gupta <vgupta@synopsys.com>
    Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
    96af7d92
troubleshoot.c 6.46 KB