On Tue, Apr 23, 2024, Kai Huang wrote: > On Tue, 2024-04-23 at 22:59 +0000, Huang, Kai wrote: > > > Right, but that doesn't say why the #UD occurred. The macro dresses it up in > > > TDX_SW_ERROR so that KVM only needs a single parser, but at the end of the day > > > KVM is still only going to see that SEAMCALL hit a #UD. > > > > Right. But is there any problem here? I thought the point was we can > > just use the error code to tell what went wrong. > > Oh, I guess I was replying too quickly. From the spec, #UD happens when > > IF not in VMX operation or inSMM or inSEAM or > ((IA32_EFER.LMA & CS.L) == 0) > THEN #UD; > > Are you worried about #UD was caused by other cases rather than "not in > VMX operation"? Yes. > But it's quite obvious the other 3 cases are not possible, correct? The spec I'm looking at also has: If IA32_VMX_PROCBASED_CTLS3[5] is 0. And anecdotally, I know of at least one crash in our production environment where a VMX instruction hit a seemingly spurious #UD, i.e. it's not impossible for a ucode bug or hardware defect to cause problems. That's obviously _extremely_ unlikely, but that's why I emphasized that sanity checking CR4.VMXE is cheap. Practically speaking it costs nothing, so IMO it's worth adding even if the odds of it ever being helpful are one-in-and-million.