Re: [PATCH stable 4.19, 5.4] x86/mm: Change so poison pages are either unmapped or marked uncacheable

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Mon, Jun 15, 2020 at 11:00:03AM -0700, Tony Luck wrote:
> From: "Luck, Tony" <tony.luck@xxxxxxxxx>
> 
> commit 17fae1294ad9d711b2c3dd0edef479d40c76a5e8 upstream
> 
> 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).
> 
> Reported-by: Jue Wang <juew@xxxxxxxxxx>
> Tested-by: Jue Wang <juew@xxxxxxxxxx>
> Fixes: 284ce4011ba6 ("x86/memory_failure: Introduce {set, clear}_mce_nospec()")
> Cc: <stable@xxxxxxxxxxxxxxx>
> Signed-off-by: Tony Luck <tony.luck@xxxxxxxxx>
> Signed-off-by: Tony Luck <tony.luck@xxxxxxxxx>
> Link: https://lore.kernel.org/r/20200520163546.GA7977@xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
> ---
>  arch/x86/include/asm/set_memory.h | 19 +++++++++++++------
>  arch/x86/kernel/cpu/mce/core.c    | 11 +++++++++--
>  include/linux/set_memory.h        |  2 +-
>  3 files changed, 23 insertions(+), 9 deletions(-)

Thanks for both backports, now queued up.

greg k-h



[Index of Archives]     [Linux Kernel]     [Kernel Development Newbies]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite Hiking]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux