lkml.org 
[lkml]   [2020]   [Dec]   [28]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.10 460/717] s390/test_unwind: fix CALL_ON_STACK tests
    Date
    From: Heiko Carstens <hca@linux.ibm.com>

    [ Upstream commit f22b9c219a798e1bf11110a3d2733d883e6da059 ]

    The CALL_ON_STACK tests use the no_dat stack to switch to a different
    stack for unwinding tests. If an interrupt or machine check happens
    while using that stack, and previously being on the async stack, the
    interrupt / machine check entry code (SWITCH_ASYNC) will assume that
    the previous context did not use the async stack and happily use the
    async stack again.

    This will lead to stack corruption of the previous context.

    To solve this disable both interrupts and machine checks before
    switching to the no_dat stack.

    Fixes: 7868249fbbc8 ("s390/test_unwind: add CALL_ON_STACK tests")
    Signed-off-by: Heiko Carstens <hca@linux.ibm.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    arch/s390/lib/test_unwind.c | 7 +++++--
    1 file changed, 5 insertions(+), 2 deletions(-)

    diff --git a/arch/s390/lib/test_unwind.c b/arch/s390/lib/test_unwind.c
    index 7c988994931f0..6bad84c372dcb 100644
    --- a/arch/s390/lib/test_unwind.c
    +++ b/arch/s390/lib/test_unwind.c
    @@ -205,12 +205,15 @@ static noinline int unwindme_func3(struct unwindme *u)
    /* This function must appear in the backtrace. */
    static noinline int unwindme_func2(struct unwindme *u)
    {
    + unsigned long flags;
    int rc;

    if (u->flags & UWM_SWITCH_STACK) {
    - preempt_disable();
    + local_irq_save(flags);
    + local_mcck_disable();
    rc = CALL_ON_STACK(unwindme_func3, S390_lowcore.nodat_stack, 1, u);
    - preempt_enable();
    + local_mcck_enable();
    + local_irq_restore(flags);
    return rc;
    } else {
    return unwindme_func3(u);
    --
    2.27.0


    \
     
     \ /
      Last update: 2020-12-28 15:40    [W:3.057 / U:1.184 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site