powerpc/64: Initialise thread_info for emergency stacks
authorNicholas Piggin <npiggin@gmail.com>
Wed, 21 Jun 2017 05:58:29 +0000 (15:58 +1000)
committerBen Hutchings <ben@decadent.org.uk>
Fri, 15 Sep 2017 17:30:55 +0000 (18:30 +0100)
commit7c9465d11cd1057399d3183d29d223615bb4ecc6
treefcd4389cefb11dfe6b013e730b3e9496340317e2
parent852ea2ac1449e35cc62d4d91b8f8b90ea15f1e83
powerpc/64: Initialise thread_info for emergency stacks

commit 34f19ff1b5a0d11e46df479623d6936460105c9f upstream.

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.

Reported-by: Abdul Haleem <abdhalee@linux.vnet.ibm.com>
Signed-off-by: Nicholas 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: Michael Ellerman <mpe@ellerman.id.au>
[bwh: Backported to 3.2:
 - There's only one emergency stack
 - No need to call klp_init_thread_info()
 - Add the ti variable in emergency_stack_init()]
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
arch/powerpc/kernel/setup_64.c