* [PATCH] x86/HVM: XSETBV intercept needs to check CPL on SVM only
@ 2015-11-27 11:01 Jan Beulich
2015-11-27 13:21 ` Andrew Cooper
` (2 more replies)
0 siblings, 3 replies; 4+ messages in thread
From: Jan Beulich @ 2015-11-27 11:01 UTC (permalink / raw)
To: xen-devel
Cc: Kevin Tian, Keir Fraser, Suravee Suthikulpanit, Andrew Cooper,
Aravind Gopalakrishnan, Jun Nakajima, Boris Ostrovsky
[-- Attachment #1: Type: text/plain, Size: 1840 bytes --]
VMX doesn't need a software CPL check on the XSETBV intercept, and
SVM can do that check without resorting to hvm_get_segment_register().
Clean up what is left of hvm_handle_xsetbv(), namely make it return a
proper error code.
Signed-off-by: Jan Beulich <jbeulich@suse.com>
--- a/xen/arch/x86/hvm/hvm.c
+++ b/xen/arch/x86/hvm/hvm.c
@@ -3141,22 +3141,15 @@ out:
int hvm_handle_xsetbv(u32 index, u64 new_bv)
{
- struct segment_register sreg;
- struct vcpu *curr = current;
+ int rc;
- hvm_get_segment_register(curr, x86_seg_ss, &sreg);
- if ( sreg.attr.fields.dpl != 0 )
- goto err;
+ hvm_event_crX(XCR0, new_bv, current->arch.xcr0);
- hvm_event_crX(XCR0, new_bv, curr->arch.xcr0);
+ rc = handle_xsetbv(index, new_bv);
+ if ( rc )
+ hvm_inject_hw_exception(TRAP_gp_fault, 0);
- if ( handle_xsetbv(index, new_bv) )
- goto err;
-
- return 0;
-err:
- hvm_inject_hw_exception(TRAP_gp_fault, 0);
- return -1;
+ return rc;
}
int hvm_set_efer(uint64_t value)
--- a/xen/arch/x86/hvm/svm/svm.c
+++ b/xen/arch/x86/hvm/svm/svm.c
@@ -2609,10 +2609,11 @@ void svm_vmexit_handler(struct cpu_user_
break;
case VMEXIT_XSETBV:
- if ( (inst_len = __get_instruction_length(current, INSTR_XSETBV))==0 )
- break;
- if ( hvm_handle_xsetbv(regs->ecx,
- (regs->rdx << 32) | regs->_eax) == 0 )
+ if ( vmcb_get_cpl(vmcb) )
+ hvm_inject_hw_exception(TRAP_gp_fault, 0);
+ else if ( (inst_len = __get_instruction_length(v, INSTR_XSETBV)) &&
+ hvm_handle_xsetbv(regs->ecx,
+ (regs->rdx << 32) | regs->_eax) == 0 )
__update_guest_eip(regs, inst_len);
break;
[-- Attachment #2: x86-XSETBV-no-CPL-check-on-VMX.patch --]
[-- Type: text/plain, Size: 1894 bytes --]
x86/HVM: XSETBV intercept needs to check CPL on SVM only
VMX doesn't need a software CPL check on the XSETBV intercept, and
SVM can do that check without resorting to hvm_get_segment_register().
Clean up what is left of hvm_handle_xsetbv(), namely make it return a
proper error code.
Signed-off-by: Jan Beulich <jbeulich@suse.com>
--- a/xen/arch/x86/hvm/hvm.c
+++ b/xen/arch/x86/hvm/hvm.c
@@ -3141,22 +3141,15 @@ out:
int hvm_handle_xsetbv(u32 index, u64 new_bv)
{
- struct segment_register sreg;
- struct vcpu *curr = current;
+ int rc;
- hvm_get_segment_register(curr, x86_seg_ss, &sreg);
- if ( sreg.attr.fields.dpl != 0 )
- goto err;
+ hvm_event_crX(XCR0, new_bv, current->arch.xcr0);
- hvm_event_crX(XCR0, new_bv, curr->arch.xcr0);
+ rc = handle_xsetbv(index, new_bv);
+ if ( rc )
+ hvm_inject_hw_exception(TRAP_gp_fault, 0);
- if ( handle_xsetbv(index, new_bv) )
- goto err;
-
- return 0;
-err:
- hvm_inject_hw_exception(TRAP_gp_fault, 0);
- return -1;
+ return rc;
}
int hvm_set_efer(uint64_t value)
--- a/xen/arch/x86/hvm/svm/svm.c
+++ b/xen/arch/x86/hvm/svm/svm.c
@@ -2609,10 +2609,11 @@ void svm_vmexit_handler(struct cpu_user_
break;
case VMEXIT_XSETBV:
- if ( (inst_len = __get_instruction_length(current, INSTR_XSETBV))==0 )
- break;
- if ( hvm_handle_xsetbv(regs->ecx,
- (regs->rdx << 32) | regs->_eax) == 0 )
+ if ( vmcb_get_cpl(vmcb) )
+ hvm_inject_hw_exception(TRAP_gp_fault, 0);
+ else if ( (inst_len = __get_instruction_length(v, INSTR_XSETBV)) &&
+ hvm_handle_xsetbv(regs->ecx,
+ (regs->rdx << 32) | regs->_eax) == 0 )
__update_guest_eip(regs, inst_len);
break;
[-- Attachment #3: Type: text/plain, Size: 126 bytes --]
_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xen.org
http://lists.xen.org/xen-devel
^ permalink raw reply [flat|nested] 4+ messages in thread* Re: [PATCH] x86/HVM: XSETBV intercept needs to check CPL on SVM only
2015-11-27 11:01 [PATCH] x86/HVM: XSETBV intercept needs to check CPL on SVM only Jan Beulich
@ 2015-11-27 13:21 ` Andrew Cooper
2015-11-30 18:33 ` Boris Ostrovsky
2015-12-02 2:30 ` Tian, Kevin
2 siblings, 0 replies; 4+ messages in thread
From: Andrew Cooper @ 2015-11-27 13:21 UTC (permalink / raw)
To: Jan Beulich, xen-devel
Cc: Kevin Tian, Keir Fraser, Suravee Suthikulpanit,
Aravind Gopalakrishnan, Jun Nakajima, Boris Ostrovsky
On 27/11/15 11:01, Jan Beulich wrote:
> VMX doesn't need a software CPL check on the XSETBV intercept, and
> SVM can do that check without resorting to hvm_get_segment_register().
>
> Clean up what is left of hvm_handle_xsetbv(), namely make it return a
> proper error code.
>
> Signed-off-by: Jan Beulich <jbeulich@suse.com>
Your statement matches the statement in the manual.
Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH] x86/HVM: XSETBV intercept needs to check CPL on SVM only
2015-11-27 11:01 [PATCH] x86/HVM: XSETBV intercept needs to check CPL on SVM only Jan Beulich
2015-11-27 13:21 ` Andrew Cooper
@ 2015-11-30 18:33 ` Boris Ostrovsky
2015-12-02 2:30 ` Tian, Kevin
2 siblings, 0 replies; 4+ messages in thread
From: Boris Ostrovsky @ 2015-11-30 18:33 UTC (permalink / raw)
To: Jan Beulich, xen-devel
Cc: Kevin Tian, Keir Fraser, Suravee Suthikulpanit, Andrew Cooper,
Aravind Gopalakrishnan, Jun Nakajima
On 11/27/2015 06:01 AM, Jan Beulich wrote:
> VMX doesn't need a software CPL check on the XSETBV intercept, and
> SVM can do that check without resorting to hvm_get_segment_register().
>
> Clean up what is left of hvm_handle_xsetbv(), namely make it return a
> proper error code.
>
> Signed-off-by: Jan Beulich <jbeulich@suse.com>
Reviewed-by: Boris Ostrovsky <boris.ostrovsky@oracle.com>
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH] x86/HVM: XSETBV intercept needs to check CPL on SVM only
2015-11-27 11:01 [PATCH] x86/HVM: XSETBV intercept needs to check CPL on SVM only Jan Beulich
2015-11-27 13:21 ` Andrew Cooper
2015-11-30 18:33 ` Boris Ostrovsky
@ 2015-12-02 2:30 ` Tian, Kevin
2 siblings, 0 replies; 4+ messages in thread
From: Tian, Kevin @ 2015-12-02 2:30 UTC (permalink / raw)
To: Jan Beulich, xen-devel
Cc: Keir Fraser, Suravee Suthikulpanit, Andrew Cooper,
Aravind Gopalakrishnan, Nakajima, Jun, Boris Ostrovsky
> From: Jan Beulich [mailto:JBeulich@suse.com]
> Sent: Friday, November 27, 2015 7:02 PM
>
> VMX doesn't need a software CPL check on the XSETBV intercept, and
> SVM can do that check without resorting to hvm_get_segment_register().
>
> Clean up what is left of hvm_handle_xsetbv(), namely make it return a
> proper error code.
>
> Signed-off-by: Jan Beulich <jbeulich@suse.com>
Acked-by: Kevin Tian <kevin.tian@intel.com>
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2015-12-02 2:30 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2015-11-27 11:01 [PATCH] x86/HVM: XSETBV intercept needs to check CPL on SVM only Jan Beulich
2015-11-27 13:21 ` Andrew Cooper
2015-11-30 18:33 ` Boris Ostrovsky
2015-12-02 2:30 ` Tian, Kevin
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.