* [PATCH] KVM: nVMX: fix AD condition when handling EPT violation
@ 2017-04-13 16:39 Radim Krčmář
2017-04-14 5:10 ` Paolo Bonzini
0 siblings, 1 reply; 3+ messages in thread
From: Radim Krčmář @ 2017-04-13 16:39 UTC (permalink / raw)
To: linux-kernel, kvm; +Cc: Paolo Bonzini
I have introduced this bug when applying and simplifying Paolo's patch
as we agreed on the list. The original was "x &= ~y; if (z) x |= y;".
Here is the story of a bad workflow:
A maintainer was already testing with the intended change, but it was
applied only to a testing repo on a different machine. When the time
to push tested patches to kvm/next came, he realized that this change
was missing and quickly added it to the maintenance repo, didn't test
again (because the change is trivial, right), and pushed the world to
fire.
Fixes: ae1e2d1082ae ("kvm: nVMX: support EPT accessed/dirty bits")
Signed-off-by: Radim Krčmář <rkrcmar@redhat.com>
---
arch/x86/kvm/vmx.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/arch/x86/kvm/vmx.c b/arch/x86/kvm/vmx.c
index cfdb0d9389d1..837f6dd1ae9c 100644
--- a/arch/x86/kvm/vmx.c
+++ b/arch/x86/kvm/vmx.c
@@ -6221,7 +6221,7 @@ static int handle_ept_violation(struct kvm_vcpu *vcpu)
* page table accesses are reads or writes.
*/
u64 eptp = nested_ept_get_cr3(vcpu);
- if (eptp & VMX_EPT_AD_ENABLE_BIT)
+ if (!(eptp & VMX_EPT_AD_ENABLE_BIT))
exit_qualification &= ~EPT_VIOLATION_ACC_WRITE;
}
--
2.12.0
^ permalink raw reply related [flat|nested] 3+ messages in thread
* Re: [PATCH] KVM: nVMX: fix AD condition when handling EPT violation
2017-04-13 16:39 [PATCH] KVM: nVMX: fix AD condition when handling EPT violation Radim Krčmář
@ 2017-04-14 5:10 ` Paolo Bonzini
2017-04-24 15:51 ` Radim Krčmář
0 siblings, 1 reply; 3+ messages in thread
From: Paolo Bonzini @ 2017-04-14 5:10 UTC (permalink / raw)
To: Radim Krčmář, linux-kernel, kvm
On 14/04/2017 00:39, Radim Krčmář wrote:
> I have introduced this bug when applying and simplifying Paolo's patch
> as we agreed on the list. The original was "x &= ~y; if (z) x |= y;".
>
> Here is the story of a bad workflow:
>
> A maintainer was already testing with the intended change, but it was
> applied only to a testing repo on a different machine. When the time
> to push tested patches to kvm/next came, he realized that this change
> was missing and quickly added it to the maintenance repo, didn't test
> again (because the change is trivial, right), and pushed the world to
> fire.
>
> Fixes: ae1e2d1082ae ("kvm: nVMX: support EPT accessed/dirty bits")
> Signed-off-by: Radim Krčmář <rkrcmar@redhat.com>
> ---
> arch/x86/kvm/vmx.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/arch/x86/kvm/vmx.c b/arch/x86/kvm/vmx.c
> index cfdb0d9389d1..837f6dd1ae9c 100644
> --- a/arch/x86/kvm/vmx.c
> +++ b/arch/x86/kvm/vmx.c
> @@ -6221,7 +6221,7 @@ static int handle_ept_violation(struct kvm_vcpu *vcpu)
> * page table accesses are reads or writes.
> */
> u64 eptp = nested_ept_get_cr3(vcpu);
> - if (eptp & VMX_EPT_AD_ENABLE_BIT)
> + if (!(eptp & VMX_EPT_AD_ENABLE_BIT))
> exit_qualification &= ~EPT_VIOLATION_ACC_WRITE;
> }
>
>
I have done this as well, so you're forgiven. :)
More important: did kvm-unit-test catch the bug?
Paolo
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PATCH] KVM: nVMX: fix AD condition when handling EPT violation
2017-04-14 5:10 ` Paolo Bonzini
@ 2017-04-24 15:51 ` Radim Krčmář
0 siblings, 0 replies; 3+ messages in thread
From: Radim Krčmář @ 2017-04-24 15:51 UTC (permalink / raw)
To: Paolo Bonzini; +Cc: linux-kernel, kvm
2017-04-14 13:10+0800, Paolo Bonzini:
> More important: did kvm-unit-test catch the bug?
It did; the bright side. :)
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2017-04-24 15:51 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-04-13 16:39 [PATCH] KVM: nVMX: fix AD condition when handling EPT violation Radim Krčmář
2017-04-14 5:10 ` Paolo Bonzini
2017-04-24 15:51 ` Radim Krčmář
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.