2018-05-01 09:49-0500, Wei Huang: > The CPUID bits of OSXSAVE (function=0x1) and OSPKE (func=0x7, leaf=0x0) > allows user apps to detect if OS has set CR4.OSXSAVE or CR4.PKE. KVM is > supposed to update these CPUID bits when CR4 is updated. Current KVM > code doesn't handle some special cases when updates come from emulator. > Here is one example: > > Step 1: guest boots > Step 2: guest OS enables XSAVE ==> CR4.OSXSAVE=1 and CPUID.OSXSAVE=1 > Step 3: guest hot reboot ==> QEMU reset CR4 to 0, but CPUID.OSXAVE==1 > Step 4: guest os checks CPUID.OSXAVE, detects 1, then executes xgetbv > > Step 4 above will cause an #UD and guest crash because guest OS hasn't > turned on OSXAVE yet. This patch solves the problem by comparing the the > old_cr4 with cr4. If the related bits have been changed, > kvm_update_cpuid() needs to be called. > > Signed-off-by: Wei Huang <wei@xxxxxxxxxx> > --- Applied to kvm/master with Cc stable, thanks.