> On Jan 12, 2021, at 5:50 PM, Luck, Tony <tony.l...@intel.com> wrote:
> 
> On Tue, Jan 12, 2021 at 02:04:55PM -0800, Andy Lutomirski wrote:
>>> But we know that the fault happend in a get_user() or copy_from_user() call
>>> (i.e. an RIP with an extable recovery address).  Does context switch
>>> access user memory?
>> 
>> No, but NMI can.
>> 
>> The case that would be very very hard to deal with is if we get an NMI just 
>> before IRET/SYSRET and get #MC inside that NMI.
>> 
>> What we should probably do is have a percpu list of pending memory failure 
>> cleanups and just accept that we’re going to sometimes get a second MCE (or 
>> third or fourth) before we can get to it.
>> 
>> Can we do the cleanup from an interrupt?  IPI-to-self might be a credible 
>> approach, if so.
> 
> You seem to be looking for a solution that is entirely contained within
> the machine check handling code. Willing to allow for repeated machine
> checks from the same poison address in order to achieve that.
> 
> I'm opposed to mutliple machine checks.  Willing to make some changes
> in core code to avoid repeated access to the same poison location.

How about more questions before the showdown?

If we made core code changes to avoid this, what would they be?  We really can 
do user access from NMI and #DB, and those can happen in horrible places. We 
could have the pagetable lock held, be in the middle of CoWing the very page we 
tripped over, etc. I think we really can’t count on being able to write to the 
PTEs from #MC. Similarly, we might have IRQs off, so we can’t broadcast a TLB 
flush. And we might be in the middle of entry, exit, or CR3 switches, and I 
don’t see a particularly clean way to write CR3 without risking accidentally 
returning to user mode with the wrong CR3.

So I’m sort of at a loss as to what we can do.  All user memory accessors can 
handle failure, and they will all avoid infinite looping.  If we can tolerate 
repeated MCE, we can survive.  But there’s not a whole lot we can do from these 
horrible contexts.

Hmm.  Maybe if we have SMAP we could play with EFLAGS.AC?  I can imagine this 
having various regrettable side effects, though.

Reply via email to