• Eiichi Tsukata's avatar
    x86/stacktrace: Prevent access_ok() warnings in arch_stack_walk_user() · 2af7c857
    Eiichi Tsukata authored
    When arch_stack_walk_user() is called from atomic contexts, access_ok() can
    trigger the following warning if compiled with CONFIG_DEBUG_ATOMIC_SLEEP=y.
    
    Reproducer:
    
      // CONFIG_DEBUG_ATOMIC_SLEEP=y
      # cd /sys/kernel/debug/tracing
      # echo 1 > options/userstacktrace
      # echo 1 > events/irq/irq_handler_entry/enable
    
      WARNING: CPU: 0 PID: 2649 at arch/x86/kernel/stacktrace.c:103 arch_stack_walk_user+0x6e/0xf6
      CPU: 0 PID: 2649 Comm: bash Not tainted 5.3.0-rc1+ #99
      RIP: 0010:arch_stack_walk_user+0x6e/0xf6
      Call Trace:
       <IRQ>
       stack_trace_save_user+0x10a/0x16d
       trace_buffer_unlock_commit_regs+0x185/0x240
       trace_event_buffer_commit+0xec/0x330
       trace_event_raw_event_irq_handler_entry+0x159/0x1e0
       __handle_irq_event_percpu+0x22d/0x440
       handle_irq_event_percpu+0x70/0x100
       handle_irq_event+0x5a/0x8b
       handle_edge_irq+0x12f/0x3f0
       handle_irq+0x34/0x40
       do_IRQ+0xa6/0x1f0
       common_interrupt+0xf/0xf
       </IRQ>
    
    Fix it by calling __range_not_ok() directly instead of access_ok() as
    copy_from_user_nmi() does. This is fine here because the actual copy is
    inside a pagefault disabled region.
    Reported-by: default avatarJuri Lelli <juri.lelli@gmail.com>
    Signed-off-by: default avatarEiichi Tsukata <devel@etsukata.com>
    Signed-off-by: default avatarThomas Gleixner <tglx@linutronix.de>
    Link: https://lkml.kernel.org/r/20190722083216.16192-2-devel@etsukata.com
    2af7c857
stacktrace.c 3.21 KB