Re: [PATCH v3] x86/fault: Send a SIGBUS to user process always for hwpoison page access.

From: Luck, Tony
Date: Tue Feb 23 2021 - 11:43:47 EST


On Tue, Feb 23, 2021 at 07:33:46AM -0800, Andy Lutomirski wrote:
>
> > On Feb 23, 2021, at 4:44 AM, Aili Yao <yaoaili@xxxxxxxxxxxx> wrote:
> >
> > On Fri, 5 Feb 2021 17:01:35 +0800
> > Aili Yao <yaoaili@xxxxxxxxxxxx> wrote:
> >
> >> When one page is already hwpoisoned by MCE AO action, processes may not
> >> be killed, processes mapping this page may make a syscall include this
> >> page and result to trigger a VM_FAULT_HWPOISON fault, as it's in kernel
> >> mode it may be fixed by fixup_exception, current code will just return
> >> error code to user code.
> >>
> >> This is not sufficient, we should send a SIGBUS to the process and log
> >> the info to console, as we can't trust the process will handle the error
> >> correctly.
> >>
> >> Suggested-by: Feng Yang <yangfeng1@xxxxxxxxxxxx>
> >> Signed-off-by: Aili Yao <yaoaili@xxxxxxxxxxxx>
> >> ---
> >> arch/x86/mm/fault.c | 62 +++++++++++++++++++++++++++++----------------
> >> 1 file changed, 40 insertions(+), 22 deletions(-)
> >>
> > Hi luto;
> > Is there any feedback?
>
> At the very least, this needs a clear explanation of why your proposed behavior is better than the existing behavior.

The explanation is buried in that "can't trust the process" line.

E.g. user space isn't good about checking for failed write(2) syscalls.
So if the poison was in a user buffer passed to write(fd, buffer, count)
sending a SIGBUS would be the action if they read the poison directly,
so it seems reasonable to send the same signal if the kernel read their
poison for them.

It would avoid users that didn't check the return value merrily proceeding
as if everything was ok.

-Tony