Skip to content
  • Mark Rutland's avatar
    arm64: entry: fix context tracking for el0_sp_pc · f6b01e50
    Mark Rutland authored
    commit 46b0567c upstream.
    
    Commit 6c81fe79 ("arm64: enable context tracking") did not
    update el0_sp_pc to use ct_user_exit, but this appears to have been
    unintentional. In commit 6ab6463a
    
     ("arm64: adjust el0_sync so
    that a function can be called") we made x0 available, and in the return
    to userspace we call ct_user_enter in the kernel_exit macro.
    
    Due to this, we currently don't correctly inform RCU of the user->kernel
    transition, and may erroneously account for time spent in the kernel as
    if we were in an extended quiescent state when CONFIG_CONTEXT_TRACKING
    is enabled.
    
    As we do record the kernel->user transition, a userspace application
    making accesses from an unaligned stack pointer can demonstrate the
    imbalance, provoking the following warning:
    
    ------------[ cut here ]------------
    WARNING: CPU: 2 PID: 3660 at kernel/context_tracking.c:75 context_tracking_enter+0xd8/0xe4()
    Modules linked in:
    CPU: 2 PID: 3660 Comm: a.out Not tainted 4.1.0-rc7+ #8
    Hardware name: ARM Juno development board (r0) (DT)
    Call trace:
    [<ffffffc000089914>] dump_backtrace+0x0/0x124
    [<ffffffc000089a48>] show_stack+0x10/0x1c
    [<ffffffc0005b3cbc>] dump_stack+0x84/0xc8
    [<ffffffc0000b3214>] warn_slowpath_common+0x98/0xd0
    [<ffffffc0000b330c>] warn_slowpath_null+0x14/0x20
    [<ffffffc00013ada4>] context_tracking_enter+0xd4/0xe4
    [<ffffffc0005b534c>] preempt_schedule_irq+0xd4/0x114
    [<ffffffc00008561c>] el1_preempt+0x4/0x28
    [<ffffffc0001b8040>] exit_files+0x38/0x4c
    [<ffffffc0000b5b94>] do_exit+0x430/0x978
    [<ffffffc0000b614c>] do_group_exit+0x40/0xd4
    [<ffffffc0000c0208>] get_signal+0x23c/0x4f4
    [<ffffffc0000890b4>] do_signal+0x1ac/0x518
    [<ffffffc000089650>] do_notify_resume+0x5c/0x68
    ---[ end trace 963c192600337066 ]---
    
    This patch adds the missing ct_user_exit to the el0_sp_pc entry path,
    correcting the context tracking for this case.
    
    Signed-off-by: default avatarMark Rutland <mark.rutland@arm.com>
    Acked-by: default avatarWill Deacon <will.deacon@arm.com>
    Fixes: 6c81fe79
    
     ("arm64: enable context tracking")
    Signed-off-by: default avatarCatalin Marinas <catalin.marinas@arm.com>
    Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    f6b01e50