|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH] x86emul: convert op_bytes/opc checks in SIMD emulation
On 21.08.2024 15:37, Andrew Cooper wrote:
> On 21/08/2024 2:30 pm, Jan Beulich wrote:
>> Delivering #UD for an internal shortcoming of the emulator isn't quite
>> right. Similarly BUG() is bigger a hammer than needed.
>>
>> Switch to using EXPECT() instead.
>>
>> Suggested-by: Andrew Cooper <andrew.cooper3@xxxxxxxxxx>
>> Signed-off-by: Jan Beulich <jbeulich@xxxxxxxx>
>
> To confirm, this is ASSERT_UNREACHABLE() (which fuzzing will now notice
> as an error), and unhandleable in release builds (which ultimately ends
> up in #UD)?
Yes, at least mostly. What exactly UNHANDLEABLE converts to depends on
the use site, I think.
> I think it would be helpful to at least note the fuzzing aspect in the
> commit message.
I've added "This way even for insns not covered by the test harness
fuzzers will have a chance of noticing issues, should any still exist
or new ones be introduced" to the 2nd paragraph.
>> --- a/xen/arch/x86/x86_emulate/x86_emulate.c
>> +++ b/xen/arch/x86/x86_emulate/x86_emulate.c
>> @@ -8114,13 +8114,13 @@ x86_emulate(
>> }
>> else if ( state->simd_size != simd_none )
>> {
>> - generate_exception_if(!op_bytes, X86_EXC_UD);
>> generate_exception_if((vex.opcx && (d & TwoOp) &&
>> (vex.reg != 0xf || (evex_encoded() &&
>> !evex.RX))),
>> X86_EXC_UD);
>>
>> - if ( !opc )
>> - BUG();
>> + EXPECT(op_bytes);
>> + EXPECT(opc);
>
> This is the only BUG() in x86_emulate.c, and it's right to get rid of it
> IMO.
>
> Therefore, we should have a hunk removing it from
> tools/tests/x86_emulator/x86-emulate.h too, which will prevent
> reintroduction.
>
> Maybe even undef BUG somewhere in x86_emulate/private.h?
Both of these actions can only be taken if the other BUG() in decode.c
also goes away. But yes, what you suggest is probably the best course of
action. I guess I'll do that in yet another patch, though.
Jan
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |