Re: [PATCH 2/3] x86/mce: Avoid infinite loop for copy from user recovery
From: Jue Wang
Date: Mon Aug 02 2021 - 11:30:13 EST
On Sat, Jul 31, 2021 at 1:43 PM Luck, Tony <tony.luck@xxxxxxxxx> wrote:
>
> > After cherry picking patch 1 & 2, I saw the following with 2 UC errors injected
> > into the user space buffer passed into write(2), as expected:
> >
> > [ 287.994754] Kernel panic - not syncing: Machine checks to different
> > user pages
>
> Interesting. What are the offsets of the two injected errors in your test (both
> w.r.t. the start of the buffer, and within a page).
They are just random offsets into the first 2 pages of the buffer (4k aligned),
1 error per page. To be precise: 0x440 and 0x1c0 within each page.
>
> > The kernel tested with has its x86/mce and mm/memory-failure aligned with
> > upstream till around 2020/11.
> >
> > Is there any other patch that I have missed to the write syscall etc?
>
> There is a long series of patches from Al Viro to lib/iov_iter.c that are maybe
> also relevent in making the kernel copy from user stop at the first poison
> address in the buffer.
Thanks for the pointer.
Looks like [1],[2] are not yet merged.
Is lib/iov_iter.c the only place the kernel performs a copy from user
and gets multiple
poisons? I suspect not.
For example, lots of kernel accesses to user space memory are from kernel agents
like khugepaged, NUMA auto balancing etc. These paths are not handled by the fix
to lib/iov_iter.c.
I think the fix might have to be made to #MC handler's behavior wrt
the task work.
Send #MC signals and perform memory-failures actions from a task work is fine
for #MCs originated from user space, but not suitable for kernel
accessing poisoned
memory (user space memory). For the latter #MC handler must handle
#MC recovery in the exception context without resorting to task work;
this may be
OK since the recovery action for the later case is minimal: mark PG_hwpoison and
remove the kernel mapping.
1. https://lore.kernel.org/linux-mm/20210326000235.370514-2-tony.luck@xxxxxxxxx/
2. https://lore.kernel.org/linux-mm/20210326000235.370514-3-tony.luck@xxxxxxxxx/
>
> -Tony