summaryrefslogtreecommitdiff
path: root/drivers/ipack/Kconfig
diff options
context:
space:
mode:
authorNicholas Piggin <npiggin@gmail.com>2017-12-06 11:21:14 +0300
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2017-12-14 11:28:13 +0300
commit8950c982fffd9700ca7ef2fc2586638e47669f19 (patch)
tree3f953fe6df67976be25d7f681d104bb00b387a8d /drivers/ipack/Kconfig
parentffb17c0cce843d2a07db0765b30ee754c9ef3bec (diff)
downloadlinux-8950c982fffd9700ca7ef2fc2586638e47669f19.tar.xz
powerpc/64s: Initialize ISAv3 MMU registers before setting partition table
commit 371b80447ff33ddac392c189cf884a5a3e18faeb upstream. kexec can leave MMU registers set when booting into a new kernel, the PIDR (Process Identification Register) in particular. The boot sequence does not zero PIDR, so it only gets set when CPUs first switch to a userspace processes (until then it's running a kernel thread with effective PID = 0). This leaves a window where a process table entry and page tables are set up due to user processes running on other CPUs, that happen to match with a stale PID. The CPU with that PID may cause speculative accesses that address quadrant 0 (aka userspace addresses), which will result in cached translations and PWC (Page Walk Cache) for that process, on a CPU which is not in the mm_cpumask and so they will not be invalidated properly. The most common result is the kernel hanging in infinite page fault loops soon after kexec (usually in schedule_tail, which is usually the first non-speculative quadrant 0 access to a new PID) due to a stale PWC. However being a stale translation error, it could result in anything up to security and data corruption problems. Fix this by zeroing out PIDR at boot and kexec. Fixes: 7e381c0ff618 ("powerpc/mm/radix: Add mmu context handling callback for radix") Signed-off-by: Nicholas Piggin <npiggin@gmail.com> Signed-off-by: Michael Ellerman <mpe@ellerman.id.au> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'drivers/ipack/Kconfig')
0 files changed, 0 insertions, 0 deletions