* Re: [PATCH 2/2] KVM, Fix QEMU-KVM is killed by guest SRAO MCE
[not found] ` <4BD69680.10402@redhat.com>
@ 2010-04-27 9:25 ` Huang Ying
2010-04-27 9:30 ` Avi Kivity
0 siblings, 1 reply; 5+ messages in thread
From: Huang Ying @ 2010-04-27 9:25 UTC (permalink / raw)
To: Avi Kivity
Cc: linux-kernel@vger.kernel.org, Andi Kleen, Andrew Morton,
masbock@linux.vnet.ibm.com, kvm
On Tue, 2010-04-27 at 15:47 +0800, Avi Kivity wrote:
> (please copy kvm@vger.kernel.org on kvm patches)
Sorry, will do that for all future patches.
> On 04/27/2010 10:04 AM, Huang Ying wrote:
> >
> > +static void kvm_send_hwpoison_signal(struct kvm *kvm, gfn_t gfn)
> > +{
> > + char buf[1];
> > + void __user *hva;
> > + int r;
> > +
> > + /* Touch the page, so send SIGBUS */
> > + hva = (void __user *)gfn_to_hva(kvm, gfn);
> > + r = copy_from_user(buf, hva, 1);
> >
>
> No error check? What will a copy_from_user() of poisoned page expected
> to return?
>
> Best to return -EFAULT on failure for consistency.
Just want to use the side effect of copy_from_user, SIGBUS will be sent
to current process because the page touched is marked as poisoned. That
is, failure is expected, so the return value is not checked.
> > +}
> > +
> > static int nonpaging_map(struct kvm_vcpu *vcpu, gva_t v, int write, gfn_t gfn)
> > {
> > int r;
> > @@ -1997,7 +2009,11 @@ static int nonpaging_map(struct kvm_vcpu
> > /* mmio */
> > if (is_error_pfn(pfn)) {
> > kvm_release_pfn_clean(pfn);
> > - return 1;
> > + if (is_hwpoison_pfn(pfn)) {
> > + kvm_send_hwpoison_signal(vcpu->kvm, gfn);
> > + return 0;
> > + } else
> > + return 1;
> > }
> >
>
> This is duplicated several times. Please introduce a kvm_handle_bad_page():
>
> if (is_error_pfn(pfn))
> return kvm_handle_bad_page(vcpu->kvm, gfn, pfn);
OK. Will do that.
Best Regards,
Huang Ying
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH 2/2] KVM, Fix QEMU-KVM is killed by guest SRAO MCE
2010-04-27 9:25 ` [PATCH 2/2] KVM, Fix QEMU-KVM is killed by guest SRAO MCE Huang Ying
@ 2010-04-27 9:30 ` Avi Kivity
2010-04-28 2:56 ` Huang Ying
0 siblings, 1 reply; 5+ messages in thread
From: Avi Kivity @ 2010-04-27 9:30 UTC (permalink / raw)
To: Huang Ying
Cc: linux-kernel@vger.kernel.org, Andi Kleen, Andrew Morton,
masbock@linux.vnet.ibm.com, kvm
On 04/27/2010 12:25 PM, Huang Ying wrote:
>
>
>> On 04/27/2010 10:04 AM, Huang Ying wrote:
>>
>>> +static void kvm_send_hwpoison_signal(struct kvm *kvm, gfn_t gfn)
>>> +{
>>> + char buf[1];
>>> + void __user *hva;
>>> + int r;
>>> +
>>> + /* Touch the page, so send SIGBUS */
>>> + hva = (void __user *)gfn_to_hva(kvm, gfn);
>>> + r = copy_from_user(buf, hva, 1);
>>>
>>>
>> No error check? What will a copy_from_user() of poisoned page expected
>> to return?
>>
>> Best to return -EFAULT on failure for consistency.
>>
> Just want to use the side effect of copy_from_user, SIGBUS will be sent
> to current process because the page touched is marked as poisoned. That
> is, failure is expected, so the return value is not checked.
>
What if the failure doesn't happen? Say, someone mmap()ed over the page.
btw, better to use (void)copy_from_user(...) instead to avoid the
initialized but not used warning the compiler may generate.
--
error compiling committee.c: too many arguments to function
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH 2/2] KVM, Fix QEMU-KVM is killed by guest SRAO MCE
2010-04-27 9:30 ` Avi Kivity
@ 2010-04-28 2:56 ` Huang Ying
2010-04-28 9:47 ` Avi Kivity
0 siblings, 1 reply; 5+ messages in thread
From: Huang Ying @ 2010-04-28 2:56 UTC (permalink / raw)
To: Avi Kivity
Cc: linux-kernel@vger.kernel.org, Andi Kleen, Andrew Morton,
masbock@linux.vnet.ibm.com, kvm@vger.kernel.org
On Tue, 2010-04-27 at 17:30 +0800, Avi Kivity wrote:
> On 04/27/2010 12:25 PM, Huang Ying wrote:
> >
> >
> >> On 04/27/2010 10:04 AM, Huang Ying wrote:
> >>
> >>> +static void kvm_send_hwpoison_signal(struct kvm *kvm, gfn_t gfn)
> >>> +{
> >>> + char buf[1];
> >>> + void __user *hva;
> >>> + int r;
> >>> +
> >>> + /* Touch the page, so send SIGBUS */
> >>> + hva = (void __user *)gfn_to_hva(kvm, gfn);
> >>> + r = copy_from_user(buf, hva, 1);
> >>>
> >>>
> >> No error check? What will a copy_from_user() of poisoned page expected
> >> to return?
> >>
> >> Best to return -EFAULT on failure for consistency.
> >>
> > Just want to use the side effect of copy_from_user, SIGBUS will be sent
> > to current process because the page touched is marked as poisoned. That
> > is, failure is expected, so the return value is not checked.
> >
>
> What if the failure doesn't happen? Say, someone mmap()ed over the page.
Sorry, not get your idea clearly. hva is re-mmap()ed? We just read the
hva, not write, so I think it should be OK here.
> btw, better to use (void)copy_from_user(...) instead to avoid the
> initialized but not used warning the compiler may generate.
OK. Will do that.
Best Regards,
Huang Ying
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH 2/2] KVM, Fix QEMU-KVM is killed by guest SRAO MCE
2010-04-28 2:56 ` Huang Ying
@ 2010-04-28 9:47 ` Avi Kivity
2010-04-29 1:31 ` Huang Ying
0 siblings, 1 reply; 5+ messages in thread
From: Avi Kivity @ 2010-04-28 9:47 UTC (permalink / raw)
To: Huang Ying
Cc: linux-kernel@vger.kernel.org, Andi Kleen, Andrew Morton,
masbock@linux.vnet.ibm.com, kvm@vger.kernel.org
On 04/28/2010 05:56 AM, Huang Ying wrote:
>
>>>
>>> Just want to use the side effect of copy_from_user, SIGBUS will be sent
>>> to current process because the page touched is marked as poisoned. That
>>> is, failure is expected, so the return value is not checked.
>>>
>>>
>> What if the failure doesn't happen? Say, someone mmap()ed over the page.
>>
> Sorry, not get your idea clearly. hva is re-mmap()ed? We just read the
> hva, not write, so I think it should be OK here.
>
>
We don't generate a signal in this case. Does the code continue to work
correctly (not sure what correctly is in this case... should probably
just continue).
There's also the possibility of -EFAULT.
--
error compiling committee.c: too many arguments to function
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH 2/2] KVM, Fix QEMU-KVM is killed by guest SRAO MCE
2010-04-28 9:47 ` Avi Kivity
@ 2010-04-29 1:31 ` Huang Ying
0 siblings, 0 replies; 5+ messages in thread
From: Huang Ying @ 2010-04-29 1:31 UTC (permalink / raw)
To: Avi Kivity
Cc: linux-kernel@vger.kernel.org, Andi Kleen, Andrew Morton,
masbock@linux.vnet.ibm.com, kvm@vger.kernel.org
On Wed, 2010-04-28 at 17:47 +0800, Avi Kivity wrote:
> On 04/28/2010 05:56 AM, Huang Ying wrote:
> >
> >>>
> >>> Just want to use the side effect of copy_from_user, SIGBUS will be sent
> >>> to current process because the page touched is marked as poisoned. That
> >>> is, failure is expected, so the return value is not checked.
> >>>
> >>>
> >> What if the failure doesn't happen? Say, someone mmap()ed over the page.
> >>
> > Sorry, not get your idea clearly. hva is re-mmap()ed? We just read the
> > hva, not write, so I think it should be OK here.
> >
> >
>
> We don't generate a signal in this case. Does the code continue to work
> correctly (not sure what correctly is in this case... should probably
> just continue).
>
> There's also the possibility of -EFAULT.
I think signal should be generated for copy_from_user, because the hva
is poisoned now. The signal will not generated only if the hva is
re-mmap()ped to some other physical page, but this should be impossible
unless we have memory hotadd/hotremove in KVM.
If the signal is not generated, lost or overwritten, guest will
continue, and if the hva is still poisoned, the page fault will be
triggered again; if the hva is not poisoned, there will be no further
page fault.
Best Regards,
Huang Ying
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2010-04-29 1:31 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
[not found] <1272351860.24125.15.camel@yhuang-dev.sh.intel.com>
[not found] ` <4BD69680.10402@redhat.com>
2010-04-27 9:25 ` [PATCH 2/2] KVM, Fix QEMU-KVM is killed by guest SRAO MCE Huang Ying
2010-04-27 9:30 ` Avi Kivity
2010-04-28 2:56 ` Huang Ying
2010-04-28 9:47 ` Avi Kivity
2010-04-29 1:31 ` Huang Ying
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox