On 6/25/2025 6:01 AM, Dave Hansen wrote:
Right now, if XRSTOR fails a console message like this is be printed:
Bad FPU state detected at restore_fpregs_from_fpstate+0x9a/0x170, reinitializing FPU registers.
However, the text location (...+0x9a in this case) is the instruction *AFTER* the XRSTOR. The highlighted instruction in the "Code:" dump also points one instruction late.
The reason is that the "fixup" moves RIP up to pass the bad XRSTOR and keep on running after returning from the #GP handler. But it does this fixup before warning.
The resulting warning output is nonsensical because it looks like the non-FPU-related instruction is #GP'ing.
Do not fix up RIP until after printing the warning. Do this by using> the more generic and standard ex_handler_default().
Indeed, the fix looks obvious and correct.
Also, the trick you previously shared for reproducing the fault is very useful for testing cases like this.
I would be happy to provide my tag: Reviewed-by: Chang S. Bae chang.seok.bae@intel.com
Thanks, Chang