Re: [PATCH v10 10/11] x86/tdx: Don't write CSTAR MSR on Intel

From: Thomas Gleixner
Date: Thu Oct 14 2021 - 06:47:50 EST


On Fri, Oct 08 2021 at 22:37, Kuppuswamy Sathyanarayanan wrote:
> From: Andi Kleen <ak@xxxxxxxxxxxxxxx>
>
> On Intel CPUs writing the CSTAR MSR is not really needed. Syscalls
> from 32bit work using SYSENTER and 32bit SYSCALL is an illegal opcode.
> But the kernel did write it anyways even though it was ignored by
> the CPU. Inside a TDX guest this actually leads to a #VE which in
> turn will trigger ve_raise_fault() due to failed MSR write. Inside
> ve_raise_fault() before it recovers from this error, it prints an
> ugly message at boot. Since such warning message is pointless for
> CSTAR MSR write failure, add exception to skip CSTAR msr write on
> Intel CPUs.

Ugly messages are a technical reason? The above is word salad.

Intel CPUs do not support SYSCALL in 32-bit mode, but the kernel
initializes MSR_CSTAR unconditionally. That MSR write is normaly
ignored by the CPU, but in a TDX guest it raises a #VE trap.

Exlude Intel CPUs from the MSR_CSTAR initialization.

> #ifdef CONFIG_IA32_EMULATION
> - wrmsrl(MSR_CSTAR, (unsigned long)entry_SYSCALL_compat);
> + /*
> + * CSTAR is not needed on Intel because it doesn't support
> + * 32bit SYSCALL, but only SYSENTER. On a TDX guest
> + * it leads to a #GP.

Sigh. Above you write it raises #VE, but now it's #GP !?!

Intel CPUs do not support 32-bit SYSCALL. Writing to MSR_CSTAR
is normaly ignored by the CPU, but raises a #VE trap in a TDX
guest.

Hmm?

Thanks,

tglx