diff --git a/src/runtime/virtcontainers/hypervisor_linux_amd64.go b/src/runtime/virtcontainers/hypervisor_linux_amd64.go index 043b36c9f..ac8454016 100644 --- a/src/runtime/virtcontainers/hypervisor_linux_amd64.go +++ b/src/runtime/virtcontainers/hypervisor_linux_amd64.go @@ -8,39 +8,21 @@ package virtcontainers import "os" const ( - tdxSeamSysFirmwareDir = "/sys/firmware/tdx_seam/" - - tdxSysFirmwareDir = "/sys/firmware/tdx/" + tdxKvmParameterPath = "/sys/module/kvm_intel/parameters/tdx" sevKvmParameterPath = "/sys/module/kvm_amd/parameters/sev" snpKvmParameterPath = "/sys/module/kvm_amd/parameters/sev_snp" ) -// TDX is supported and properly loaded when the firmware directory (either tdx or tdx_seam) exists or `tdx` is part of the CPU flag -func checkTdxGuestProtection(flags map[string]bool) bool { - if d, err := os.Stat(tdxSysFirmwareDir); err == nil && d.IsDir() { - return true - } - - if d, err := os.Stat(tdxSeamSysFirmwareDir); err == nil && d.IsDir() { - return true - } - - return false -} - // Implementation of this function is architecture specific func availableGuestProtection() (guestProtection, error) { - flags, err := CPUFlags(procCPUInfo) - if err != nil { - return noneProtection, err + // TDX is supported and enabled when the kvm module 'tdx' parameter is set to 'Y' + if _, err := os.Stat(tdxKvmParameterPath); err == nil { + if c, err := os.ReadFile(tdxKvmParameterPath); err == nil && len(c) > 0 && (c[0] == 'Y') { + return tdxProtection, nil + } } - - if checkTdxGuestProtection(flags) { - return tdxProtection, nil - } - // SEV-SNP is supported and enabled when the kvm module `sev_snp` parameter is set to `Y` // SEV-SNP support infers SEV (-ES) support if _, err := os.Stat(snpKvmParameterPath); err == nil {