diff options
-rw-r--r-- | xen/arch/x86/traps.c | 5 |
1 files changed, 5 insertions, 0 deletions
diff --git a/xen/arch/x86/traps.c b/xen/arch/x86/traps.c index 7e4e6b69ea..f69ca0b549 100644 --- a/xen/arch/x86/traps.c +++ b/xen/arch/x86/traps.c @@ -2192,6 +2192,11 @@ static int emulate_privileged_op(struct cpu_user_regs *regs) if ( !(new_xfeature & XSTATE_FP) || (new_xfeature & ~xfeature_mask) ) goto fail; + /* YMM state takes SSE state as prerequisite. */ + if ( (xfeature_mask & new_xfeature & XSTATE_YMM) && + !(new_xfeature & XSTATE_SSE) ) + goto fail; + v->arch.xcr0 = new_xfeature; v->arch.xcr0_accum |= new_xfeature; set_xcr0(new_xfeature); |