From: Sathyanarayanan Kuppuswamy <sathyanarayanan.kuppuswamy@xxxxxxxxxxxxxxx> > > On 11/21/22 6:39 AM, Borislav Petkov wrote: > > On Fri, Nov 18, 2022 at 02:55:32AM +0000, Michael Kelley (LINUX) wrote: > >> But I had not thought about TDX. In the TDX case, it appears that > >> sme_postprocess_startup() will not decrypt the bss_decrypted section. > >> The corresponding mem_encrypt_free_decrypted_mem() is a no-op unless > >> CONFIG_AMD_MEM_ENCRYPT is set. But maybe if someone builds a > >> kernel image that supports both TDX and AMD encryption, it could break > > > > sme_me_mask better be 0 on a kernel with both built in and running as a > > TDX guest. > > > > Yes. It will be 0 in TDX. In sme_enable(), AMD code checks for CPUID > support before updating the sme_me_mask. > Right. But here's my point: With current code and an image built with CONFIG_AMD_MEM_ENCRYPT=y and running as a TDX guest, sme_postprocess_startup() will not decrypt the bss_decrypted section. Then later mem_encrypt_free_decrypted_mem() will run, see that CC_ATTR_MEM_ENCRYPT is true, and try to re-encrypt the memory. In other words, a TDX guest would break in the same way as a Hyper-V vTOM guest would break. This patch fixes the problem for both cases. The only things I see in the bss_decrypted section are two clock structures In arch/x86/kernel/kvmclock.c, which aren't needed when Hyper-V is the hypervisor. But with a TDX guest on KVM, will *not* decrypting the bss_decrypted section be a problem? I don't know that kvmclock code or why the two clock structures need to be decrypted for AMD mem encryption. Michael