• Nicholas Piggin's avatar
    powerpc/64: Initialise thread_info for emergency stacks · 34f19ff1
    Nicholas Piggin authored
    Emergency stacks have their thread_info mostly uninitialised, which in
    particular means garbage preempt_count values.
    
    Emergency stack code runs with interrupts disabled entirely, and is
    used very rarely, so this has been unnoticed so far. It was found by a
    proposed new powerpc watchdog that takes a soft-NMI directly from the
    masked_interrupt handler and using the emergency stack. That crashed
    at BUG_ON(in_nmi()) in nmi_enter(). preempt_count()s were found to be
    garbage.
    
    To fix this, zero the entire THREAD_SIZE allocation, and initialize
    the thread_info.
    
    Cc: stable@vger.kernel.org
    Reported-by: default avatarAbdul Haleem <abdhalee@linux.vnet.ibm.com>
    Signed-off-by: default avatarNicholas Piggin <npiggin@gmail.com>
    [mpe: Move it all into setup_64.c, use a function not a macro. Fix
          crashes on Cell by setting preempt_count to 0 not HARDIRQ_OFFSET]
    Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
    34f19ff1
setup_64.c 20.3 KB