mirror of
https://github.com/torvalds/linux.git
synced 2026-06-04 12:35:52 +02:00
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. Fixes:7ff76d58a9("KVM: SVM: enhance MOV CR intercept handler") Fixes:cae3797a46("KVM: SVM: enhance mov DR intercept handler") Cc: stable@vger.kernel.org Signed-off-by: Sean Christopherson <seanjc@google.com> Message-Id: <20210422022128.3464144-4-seanjc@google.com> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
This commit is contained in:
parent
886bbcc7a5
commit
0884335a2e
|
|
@ -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);
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user