linux_dsm_epyc7002/arch
Tony Luck 17fae1294a x86/{mce,mm}: Unmap the entire page if the whole page is affected and poisoned
An interesting thing happened when a guest Linux instance took a machine
check. The VMM unmapped the bad page from guest physical space and
passed the machine check to the guest.

Linux took all the normal actions to offline the page from the process
that was using it. But then guest Linux crashed because it said there
was a second machine check inside the kernel with this stack trace:

do_memory_failure
    set_mce_nospec
         set_memory_uc
              _set_memory_uc
                   change_page_attr_set_clr
                        cpa_flush
                             clflush_cache_range_opt

This was odd, because a CLFLUSH instruction shouldn't raise a machine
check (it isn't consuming the data). Further investigation showed that
the VMM had passed in another machine check because is appeared that the
guest was accessing the bad page.

Fix is to check the scope of the poison by checking the MCi_MISC register.
If the entire page is affected, then unmap the page. If only part of the
page is affected, then mark the page as uncacheable.

This assumes that VMMs will do the logical thing and pass in the "whole
page scope" via the MCi_MISC register (since they unmapped the entire
page).

  [ bp: Adjust to x86/entry changes. ]

Fixes: 284ce4011b ("x86/memory_failure: Introduce {set, clear}_mce_nospec()")
Reported-by: Jue Wang <juew@google.com>
Signed-off-by: Tony Luck <tony.luck@intel.com>
Signed-off-by: Borislav Petkov <bp@suse.de>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Tested-by: Jue Wang <juew@google.com>
Cc: <stable@vger.kernel.org>
Link: https://lkml.kernel.org/r/20200520163546.GA7977@agluck-desk2.amr.corp.intel.com
2020-06-11 15:19:17 +02:00
..
alpha mmap locking API: convert mmap_sem API comments 2020-06-09 09:39:14 -07:00
arc mmap locking API: convert mmap_sem comments 2020-06-09 09:39:14 -07:00
arm Merge branch 'rwonce/rework' of git://git.kernel.org/pub/scm/linux/kernel/git/will/linux 2020-06-10 14:46:54 -07:00
arm64 locking/atomics: Flip fallbacks and instrumentation 2020-06-11 08:03:24 +02:00
c6x This time around we have 4 lines of diff in the core framework, removing a 2020-06-10 11:42:19 -07:00
csky mmap locking API: use coccinelle to convert mmap_sem rwsem call sites 2020-06-09 09:39:14 -07:00
h8300 This time around we have 4 lines of diff in the core framework, removing a 2020-06-10 11:42:19 -07:00
hexagon mmap locking API: use coccinelle to convert mmap_sem rwsem call sites 2020-06-09 09:39:14 -07:00
ia64 mmap locking API: convert mmap_sem comments 2020-06-09 09:39:14 -07:00
m68k This time around we have 4 lines of diff in the core framework, removing a 2020-06-10 11:42:19 -07:00
microblaze mmap locking API: convert mmap_sem comments 2020-06-09 09:39:14 -07:00
mips This time around we have 4 lines of diff in the core framework, removing a 2020-06-10 11:42:19 -07:00
nds32 mmap locking API: convert mmap_sem comments 2020-06-09 09:39:14 -07:00
nios2 mmap locking API: convert mmap_sem API comments 2020-06-09 09:39:14 -07:00
openrisc mmap locking API: convert mmap_sem API comments 2020-06-09 09:39:14 -07:00
parisc maccess: always use strict semantics for probe_kernel_read 2020-06-09 09:39:15 -07:00
powerpc arch/powerpc/mm/pgtable.c: another missed conversion 2020-06-10 14:44:46 -07:00
riscv mmap locking API: convert mmap_sem comments 2020-06-09 09:39:14 -07:00
s390 mmap locking API: convert mmap_sem comments 2020-06-09 09:39:14 -07:00
sh This time around we have 4 lines of diff in the core framework, removing a 2020-06-10 11:42:19 -07:00
sparc arch/sparc/mm/srmmu.c: fix build 2020-06-10 10:35:28 -07:00
um This pull request contains the following changes for UML: 2020-06-10 13:25:40 -07:00
unicore32 This time around we have 4 lines of diff in the core framework, removing a 2020-06-10 11:42:19 -07:00
x86 x86/{mce,mm}: Unmap the entire page if the whole page is affected and poisoned 2020-06-11 15:19:17 +02:00
xtensa mmap locking API: convert mmap_sem API comments 2020-06-09 09:39:14 -07:00
.gitignore .gitignore: add SPDX License Identifier 2020-03-25 11:50:48 +01:00
Kconfig This time around we have 4 lines of diff in the core framework, removing a 2020-06-10 11:42:19 -07:00