On 25/09/2018 14:28, Jan Beulich wrote:
> +#define avx512_vlen_check(lig) do { \
> +    switch ( evex.lr ) \
> +    { \
> +    default: \
> +        generate_exception(EXC_UD); \
> +    case 2: \
> +        break; \
> +    case 0: case 1: \
> +        if (!(lig)) \

if ( !(lig) )

> +            host_and_vcpu_must_have(avx512vl); \
> +        break; \
> +    } \
> +} while ( false )
> +
>  static bool is_aligned(enum x86_segment seg, unsigned long offs,
>                         unsigned int size, struct x86_emulate_ctxt *ctxt,
>                         const struct x86_emulate_ops *ops)
> @@ -3272,6 +3387,7 @@ x86_emulate(
>      b = ctxt->opcode;
>      d = state.desc;
>  #define state (&state)
> +    elem_bytes = 4 << evex.w;

evex.w isn't filled by this point, is it?  We only fill evex.lr in the
!evex_encoded() case AFAICT.

>  
>      generate_exception_if(state->not_64bit && mode_64bit(), EXC_UD);
>  
> @@ -6348,6 +6521,41 @@ x86_emulate(
>          ASSERT(!state->simd_size);
>          break;
>  
> +    case X86EMUL_OPC_EVEX_66(0x0f, 0x6e): /* vmov{d,q} r/m,xmm */
> +    case X86EMUL_OPC_EVEX_66(0x0f, 0x7e): /* vmov{d,q} xmm,r/m */
> +        generate_exception_if((evex.lr || evex.opmsk || evex.br ||
> +                               evex.reg != 0xf || !evex.RX),

Are the inner brackets necessary?

> @@ -8819,6 +9070,44 @@ x86_emulate(
>                                    !is_aligned(ea.mem.seg, ea.mem.off, 
> op_bytes,
>                                                ctxt, ops),
>                                    EXC_GP, 0);
> +
> +            if ( evex.br )
> +            {
> +                ASSERT((d & DstMask) != DstMem);
> +                op_bytes = elem_bytes;
> +            }
> +            if ( evex.opmsk )
> +            {
> +                ASSERT(!(op_bytes % elem_bytes));
> +                full = ~0ULL >> (64 - op_bytes / elem_bytes);

I think we want a path which checks elem_bytes != 0 which is
release-build safe.  This feels like an XSA waiting to happen.

~Andrew

_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xenproject.org
https://lists.xenproject.org/mailman/listinfo/xen-devel

Reply via email to