mirror of
https://github.com/kata-containers/kata-containers.git
synced 2025-08-26 11:39:29 +00:00
CCv0: Enable 'policy' for SNP container
includes conflict resolution in qemu_amd64.go Signed-off-by: Niteesh Dubey <niteesh@linux.ibm.com>
This commit is contained in:
parent
55b36212e6
commit
9ef28e3e5e
@ -65,6 +65,12 @@ machine_type = "@MACHINETYPE@"
|
|||||||
# Default false
|
# Default false
|
||||||
# sev_snp_guest = true
|
# sev_snp_guest = true
|
||||||
|
|
||||||
|
# SNP guest policy
|
||||||
|
# Refer SEV Secure Nested Paging Firmware ABI Specification (sectin 4.3) to
|
||||||
|
# change this value.
|
||||||
|
# unspecified or == 0 --> 0x30000 i.e. Bit#17 is '1' and Bit#16 is '1' (SMT is allowed)
|
||||||
|
# snp_guest_policy=0x30000
|
||||||
|
|
||||||
# Enable running QEMU VMM as a non-root user.
|
# Enable running QEMU VMM as a non-root user.
|
||||||
# By default QEMU VMM run as root. When this is set to true, QEMU VMM process runs as
|
# By default QEMU VMM run as root. When this is set to true, QEMU VMM process runs as
|
||||||
# a non-root random user. See documentation for the limitations of this mode.
|
# a non-root random user. See documentation for the limitations of this mode.
|
||||||
|
@ -291,6 +291,10 @@ type Object struct {
|
|||||||
// This is only relevant for sev-guest objects
|
// This is only relevant for sev-guest objects
|
||||||
SevPolicy uint32
|
SevPolicy uint32
|
||||||
|
|
||||||
|
// SnpPolicy is the policy for the SNP instance. For more info, see AMD document 56860
|
||||||
|
// This is only relevant for sev-snp-guest objects
|
||||||
|
SnpPolicy uint64
|
||||||
|
|
||||||
// SevCertFilePath is the path to the guest Diffie–Hellman key
|
// SevCertFilePath is the path to the guest Diffie–Hellman key
|
||||||
// This is only relevant for sev-guest objects
|
// This is only relevant for sev-guest objects
|
||||||
SevCertFilePath string
|
SevCertFilePath string
|
||||||
@ -392,6 +396,7 @@ func (object Object) QemuParams(config *Config) []string {
|
|||||||
objectParams = append(objectParams, fmt.Sprintf("id=%s", object.ID))
|
objectParams = append(objectParams, fmt.Sprintf("id=%s", object.ID))
|
||||||
objectParams = append(objectParams, fmt.Sprintf("cbitpos=%d", object.CBitPos))
|
objectParams = append(objectParams, fmt.Sprintf("cbitpos=%d", object.CBitPos))
|
||||||
objectParams = append(objectParams, fmt.Sprintf("reduced-phys-bits=%d", object.ReducedPhysBits))
|
objectParams = append(objectParams, fmt.Sprintf("reduced-phys-bits=%d", object.ReducedPhysBits))
|
||||||
|
objectParams = append(objectParams, fmt.Sprintf("policy=0x%x", object.SnpPolicy))
|
||||||
// Add OVMF firmware as pflash drive
|
// Add OVMF firmware as pflash drive
|
||||||
driveParams = append(driveParams, "if=pflash,format=raw,readonly=on")
|
driveParams = append(driveParams, "if=pflash,format=raw,readonly=on")
|
||||||
driveParams = append(driveParams, fmt.Sprintf("file=%s", object.File))
|
driveParams = append(driveParams, fmt.Sprintf("file=%s", object.File))
|
||||||
|
@ -100,6 +100,7 @@ const defaultGuestPreAttestationSecretGuid string = ""
|
|||||||
const defaultGuestPreAttestationSecretType string = ""
|
const defaultGuestPreAttestationSecretType string = ""
|
||||||
const defaultSEVCertChainPath string = ""
|
const defaultSEVCertChainPath string = ""
|
||||||
const defaultSEVGuestPolicy uint32 = 0
|
const defaultSEVGuestPolicy uint32 = 0
|
||||||
|
const defaultSNPGuestPolicy uint64 = 0x30000
|
||||||
|
|
||||||
var defaultSGXEPCSize = int64(0)
|
var defaultSGXEPCSize = int64(0)
|
||||||
|
|
||||||
|
@ -139,6 +139,7 @@ type hypervisor struct {
|
|||||||
PCIeRootPort uint32 `toml:"pcie_root_port"`
|
PCIeRootPort uint32 `toml:"pcie_root_port"`
|
||||||
GuestPreAttestationGRPCTimeout uint32 `toml:"guest_pre_attestation_grpc_timeout"`
|
GuestPreAttestationGRPCTimeout uint32 `toml:"guest_pre_attestation_grpc_timeout"`
|
||||||
SEVGuestPolicy uint32 `toml:"sev_guest_policy"`
|
SEVGuestPolicy uint32 `toml:"sev_guest_policy"`
|
||||||
|
SNPGuestPolicy uint64 `toml:"snp_guest_policy"`
|
||||||
RemoteHypervisorTimeout uint32 `toml:"remote_hypervisor_timeout"`
|
RemoteHypervisorTimeout uint32 `toml:"remote_hypervisor_timeout"`
|
||||||
NumVCPUs int32 `toml:"default_vcpus"`
|
NumVCPUs int32 `toml:"default_vcpus"`
|
||||||
BlockDeviceCacheSet bool `toml:"block_device_cache_set"`
|
BlockDeviceCacheSet bool `toml:"block_device_cache_set"`
|
||||||
@ -632,6 +633,13 @@ func (a agent) kernelModules() []string {
|
|||||||
return a.KernelModules
|
return a.KernelModules
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (h hypervisor) getSnpGuestPolicy() uint64 {
|
||||||
|
if h.SNPGuestPolicy == 0 { // or unspecified
|
||||||
|
return defaultSNPGuestPolicy
|
||||||
|
}
|
||||||
|
return h.SNPGuestPolicy
|
||||||
|
}
|
||||||
|
|
||||||
func newFirecrackerHypervisorConfig(h hypervisor) (vc.HypervisorConfig, error) {
|
func newFirecrackerHypervisorConfig(h hypervisor) (vc.HypervisorConfig, error) {
|
||||||
hypervisor, err := h.path()
|
hypervisor, err := h.path()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -855,6 +863,7 @@ func newQemuHypervisorConfig(h hypervisor) (vc.HypervisorConfig, error) {
|
|||||||
GuestPreAttestationSecretGuid: h.GuestPreAttestationSecretGuid,
|
GuestPreAttestationSecretGuid: h.GuestPreAttestationSecretGuid,
|
||||||
GuestPreAttestationSecretType: h.GuestPreAttestationSecretType,
|
GuestPreAttestationSecretType: h.GuestPreAttestationSecretType,
|
||||||
SEVGuestPolicy: h.SEVGuestPolicy,
|
SEVGuestPolicy: h.SEVGuestPolicy,
|
||||||
|
SNPGuestPolicy: h.getSnpGuestPolicy(),
|
||||||
SEVCertChainPath: h.SEVCertChainPath,
|
SEVCertChainPath: h.SEVCertChainPath,
|
||||||
DisableGuestSeLinux: h.DisableGuestSeLinux,
|
DisableGuestSeLinux: h.DisableGuestSeLinux,
|
||||||
}, nil
|
}, nil
|
||||||
@ -1276,6 +1285,7 @@ func GetDefaultHypervisorConfig() vc.HypervisorConfig {
|
|||||||
GuestPreAttestationSecretGuid: defaultGuestPreAttestationSecretGuid,
|
GuestPreAttestationSecretGuid: defaultGuestPreAttestationSecretGuid,
|
||||||
GuestPreAttestationSecretType: defaultGuestPreAttestationSecretType,
|
GuestPreAttestationSecretType: defaultGuestPreAttestationSecretType,
|
||||||
SEVGuestPolicy: defaultSEVGuestPolicy,
|
SEVGuestPolicy: defaultSEVGuestPolicy,
|
||||||
|
SNPGuestPolicy: defaultSNPGuestPolicy,
|
||||||
SEVCertChainPath: defaultSEVCertChainPath,
|
SEVCertChainPath: defaultSEVCertChainPath,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -176,6 +176,7 @@ func createAllRuntimeConfigFiles(dir, hypervisor string) (config testRuntimeConf
|
|||||||
VirtioFSCache: defaultVirtioFSCacheMode,
|
VirtioFSCache: defaultVirtioFSCacheMode,
|
||||||
PFlash: []string{},
|
PFlash: []string{},
|
||||||
SGXEPCSize: epcSize,
|
SGXEPCSize: epcSize,
|
||||||
|
SNPGuestPolicy: defaultSNPGuestPolicy,
|
||||||
}
|
}
|
||||||
|
|
||||||
agentConfig := vc.KataAgentConfig{
|
agentConfig := vc.KataAgentConfig{
|
||||||
@ -555,6 +556,7 @@ func TestMinimalRuntimeConfig(t *testing.T) {
|
|||||||
VirtioFSCache: defaultVirtioFSCacheMode,
|
VirtioFSCache: defaultVirtioFSCacheMode,
|
||||||
BlockDeviceAIO: defaultBlockDeviceAIO,
|
BlockDeviceAIO: defaultBlockDeviceAIO,
|
||||||
DisableGuestSeLinux: defaultDisableGuestSeLinux,
|
DisableGuestSeLinux: defaultDisableGuestSeLinux,
|
||||||
|
SNPGuestPolicy: defaultSNPGuestPolicy,
|
||||||
}
|
}
|
||||||
|
|
||||||
expectedAgentConfig := vc.KataAgentConfig{
|
expectedAgentConfig := vc.KataAgentConfig{
|
||||||
|
@ -337,6 +337,7 @@ type HypervisorConfig struct {
|
|||||||
Uid uint32
|
Uid uint32
|
||||||
Gid uint32
|
Gid uint32
|
||||||
SEVGuestPolicy uint32
|
SEVGuestPolicy uint32
|
||||||
|
SNPGuestPolicy uint64
|
||||||
PCIeRootPort uint32
|
PCIeRootPort uint32
|
||||||
NumVCPUs uint32
|
NumVCPUs uint32
|
||||||
RemoteHypervisorTimeout uint32
|
RemoteHypervisorTimeout uint32
|
||||||
|
@ -40,6 +40,8 @@ type qemuAmd64 struct {
|
|||||||
|
|
||||||
sgxEPCSize int64
|
sgxEPCSize int64
|
||||||
|
|
||||||
|
snpGuestPolicy uint64
|
||||||
|
|
||||||
numVCPUs uint32
|
numVCPUs uint32
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -147,6 +149,7 @@ func newQemuArch(config HypervisorConfig) (qemuArch, error) {
|
|||||||
vmFactory: factory,
|
vmFactory: factory,
|
||||||
snpGuest: config.SevSnpGuest,
|
snpGuest: config.SevSnpGuest,
|
||||||
numVCPUs: config.NumVCPUs,
|
numVCPUs: config.NumVCPUs,
|
||||||
|
snpGuestPolicy: config.SNPGuestPolicy,
|
||||||
}
|
}
|
||||||
|
|
||||||
if config.ConfidentialGuest {
|
if config.ConfidentialGuest {
|
||||||
@ -313,6 +316,7 @@ func (q *qemuAmd64) appendProtectionDevice(devices []govmmQemu.Device, firmware,
|
|||||||
Debug: false,
|
Debug: false,
|
||||||
File: firmware,
|
File: firmware,
|
||||||
CBitPos: cpuid.AMDMemEncrypt.CBitPosition,
|
CBitPos: cpuid.AMDMemEncrypt.CBitPosition,
|
||||||
|
SnpPolicy: q.snpGuestPolicy,
|
||||||
ReducedPhysBits: 1,
|
ReducedPhysBits: 1,
|
||||||
}), "", nil
|
}), "", nil
|
||||||
case noneProtection:
|
case noneProtection:
|
||||||
|
Loading…
Reference in New Issue
Block a user