On 12/11/2024 3:00 pm, Jan Beulich wrote:
> While result values and other status flags are unaffected as long as we
> can ignore the case of registers having their upper 32 bits non-zero
> outside of 64-bit mode, EFLAGS.SF may obtain a wrong value when we
> mistakenly re-execute the original insn with VEX.W set.
>
> Note that the memory access, if any, is correctly carried out as 32-bit
> regardless of VEX.W.

I don't understand why this is true.

If we write out a VEX.W=1 form of BEXTR/etc and emulate while in 64bit
mode, it will have an operand size of 64.

I can believe that ...

>  Internal state also isn't leaked, as the field the
> memory value is read into (which is then wrongly accessed as a 64-bit
> quantity when executing the stub) is pre-initialized to zero.

... everything else treats the memory operand as 32bit, and uses the
bottom half of the internal buffer, and generally does the right thing.

~Andrew

Reply via email to