FAILED: patch "[PATCH] KVM: SVM: Truncate GPR value for DR and CR accesses in" failed to apply to 4.9-stable tree
Subsystems (3)
[email protected]
maintainerThe patch below does not apply to the 4.9-stable tree.
If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to <[email protected]>.
thanks,
greg k-h
------------------ original commit in Linus's tree ------------------
From 0884335a2e653b8a045083aa1d57ce74269ac81d Mon Sep 17 00:00:00 2001
From: Sean Christopherson <[email protected]>
Date: Wed, 21 Apr 2021 19:21:22 -0700
Subject: [PATCH] KVM: SVM: Truncate GPR value for DR and CR accesses in
!64-bit mode
Drop bits 63:32 on loads/stores to/from DRs and CRs when the vCPU is not in 64-bit mode. The APM states bits 63:32 are dropped for both DRs and CRs:
In 64-bit mode, the operand size is fixed at 64 bits without the need for a REX prefix. In non-64-bit mode, the operand size is fixed at 32 bits and the upper 32 bits of the destination are forced to 0.
Message-Id: <[email protected]>
arch/x86/kvm/svm/svm.c +4 -4
@@ -2451,7 +2451,7 @@ static int cr_interception(struct kvm_vcpu *vcpu) err =0 ;if (cr >=16 ) {/* mov to cr */ cr -=16 ; - val =kvm_register_read (vcpu, reg); + val =kvm_register_readl (vcpu, reg);trace_kvm_cr_write (cr, val);switch (cr) {case 0 :
@@ -2497,7 +2497,7 @@ static int cr_interception(struct kvm_vcpu *vcpu)kvm_queue_exception (vcpu,UD_VECTOR );return 1 ; } -kvm_register_write (vcpu, reg, val); +kvm_register_writel (vcpu, reg, val);trace_kvm_cr_read (cr, val); }return kvm_complete_insn_gp (vcpu, err);
@@ -2563,11 +2563,11 @@ static int dr_interception(struct kvm_vcpu *vcpu) dr = svm->vmcb->control.exit_code -SVM_EXIT_READ_DR0 ;if (dr >=16 ) {/* mov to DRn */ dr -=16 ; - val =kvm_register_read (vcpu, reg); + val =kvm_register_readl (vcpu, reg); err =kvm_set_dr (vcpu, dr, val); }else {kvm_get_dr (vcpu, dr, &val); -kvm_register_write (vcpu, reg, val); +kvm_register_writel (vcpu, reg, val); }return kvm_complete_insn_gp (vcpu, err);
Hi Greg,
Quoted 5 lines · On Wed, May 12, 2021 at 12:43:50PM +0200, [email protected] wrote:
The patch below does not apply to the 4.9-stable tree.
If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to <[email protected]>.
Here is the backport. Will also apply to 4.4-stable.
--
Regards
Sudip
From 89ffde7c080424821a70783961a7ab0dec90b9ea Mon Sep 17 00:00:00 2001
From: Sean Christopherson <[email protected]>
Date: Wed, 21 Apr 2021 19:21:22 -0700
Subject: [PATCH] KVM: SVM: Truncate GPR value for DR and CR accesses in
!64-bit mode
commit 0884335a2e653b8a045083aa1d57ce74269ac81d upstream.
Drop bits 63:32 on loads/stores to/from DRs and CRs when the vCPU is not in 64-bit mode. The APM states bits 63:32 are dropped for both DRs and CRs:
In 64-bit mode, the operand size is fixed at 64 bits without the need for a REX prefix. In non-64-bit mode, the operand size is fixed at 32 bits and the upper 32 bits of the destination are forced to 0.
Message-Id: <[email protected]>
--- arch/x86/kvm/svm.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-)
arch/x86/kvm/svm.c +4 -4
@@ -3412,7 +3412,7 @@ static int cr_interception(struct vcpu_svm *svm) err =0 ;if (cr >=16 ) {/* mov to cr */ cr -=16 ; - val =kvm_register_read (&svm->vcpu, reg); + val =kvm_register_readl (&svm->vcpu, reg);switch (cr) {case 0 :if (!check_selective_cr0_intercepted (svm, val))
@@ -3457,7 +3457,7 @@ static int cr_interception(struct vcpu_svm *svm)kvm_queue_exception (&svm->vcpu,UD_VECTOR );return 1 ; } -kvm_register_write (&svm->vcpu, reg, val); +kvm_register_writel (&svm->vcpu, reg, val); }kvm_complete_insn_gp (&svm->vcpu, err);
@@ -3489,13 +3489,13 @@ static int dr_interception(struct vcpu_svm *svm)if (dr >=16 ) {/* mov to DRn */ if (!kvm_require_dr (&svm->vcpu, dr -16 ))return 1 ; - val =kvm_register_read (&svm->vcpu, reg); + val =kvm_register_readl (&svm->vcpu, reg);kvm_set_dr (&svm->vcpu, dr -16 , val); }else {if (!kvm_require_dr (&svm->vcpu, dr))return 1 ;kvm_get_dr (&svm->vcpu, dr, &val); -kvm_register_write (&svm->vcpu, reg, val); +kvm_register_writel (&svm->vcpu, reg, val); }skip_emulated_instruction (&svm->vcpu);
Signature · 1 line
2.30.2