From a8827e0c78938afa9d5da68d05b32cb91ca85467 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fabiano=20Fid=C3=AAncio?= Date: Thu, 24 Feb 2022 21:57:38 +0100 Subject: [PATCH] hypervisors: Confidential Guests do not support NVDIMM MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit NVDIMM is also not supported with Confidential Guests and Virtio Block devices should be used instead. Signed-off-by: Fabiano FidĂȘncio --- src/runtime/config/configuration-clh.toml.in | 1 + src/runtime/config/configuration-qemu.toml.in | 4 ++++ src/runtime/virtcontainers/clh.go | 24 +++++++++++++++---- src/runtime/virtcontainers/qemu_amd64.go | 5 ++++ src/runtime/virtcontainers/qemu_ppc64le.go | 5 ++++ src/runtime/virtcontainers/qemu_s390x.go | 5 ++++ 6 files changed, 39 insertions(+), 5 deletions(-) diff --git a/src/runtime/config/configuration-clh.toml.in b/src/runtime/config/configuration-clh.toml.in index c2522cba69..99acada75b 100644 --- a/src/runtime/config/configuration-clh.toml.in +++ b/src/runtime/config/configuration-clh.toml.in @@ -26,6 +26,7 @@ image = "@IMAGEPATH@" # - CPU Hotplug # - Device Hotplug # - Memory Hotplug +# - NVDIMM devices # # Default false # confidential_guest = true diff --git a/src/runtime/config/configuration-qemu.toml.in b/src/runtime/config/configuration-qemu.toml.in index 0f21984320..804849a132 100644 --- a/src/runtime/config/configuration-qemu.toml.in +++ b/src/runtime/config/configuration-qemu.toml.in @@ -27,6 +27,7 @@ machine_type = "@MACHINETYPE@" # - CPU Hotplug # - Device Hotplug # - Memory Hotplug +# - NVDIMM devices # # Default false # confidential_guest = true @@ -286,6 +287,9 @@ pflashes = [] # If false and nvdimm is supported, use nvdimm device to plug guest image. # Otherwise virtio-block device is used. +# +# nvdimm is not supported when `confidential_guest = true`. +# # Default is false #disable_image_nvdimm = true diff --git a/src/runtime/virtcontainers/clh.go b/src/runtime/virtcontainers/clh.go index 7833d4093a..eae13eb04f 100644 --- a/src/runtime/virtcontainers/clh.go +++ b/src/runtime/virtcontainers/clh.go @@ -271,6 +271,9 @@ func (clh *cloudHypervisor) CreateVM(ctx context.Context, id string, network Net // First take the default parameters defined by this driver params := commonNvdimmKernelRootParams + if clh.config.ConfidentialGuest { + params = commonVirtioblkKernelRootParams + } params = append(params, clhKernelParams...) // Followed by extra debug parameters if debug enabled in configuration file @@ -296,13 +299,24 @@ func (clh *cloudHypervisor) CreateVM(ctx context.Context, id string, network Net } if imagePath != "" { - pmem := chclient.NewPmemConfig(imagePath) - *pmem.DiscardWrites = true + if clh.config.ConfidentialGuest { + disk := chclient.NewDiskConfig(imagePath) + disk.SetReadonly(true) - if clh.vmconfig.Pmem != nil { - *clh.vmconfig.Pmem = append(*clh.vmconfig.Pmem, *pmem) + if clh.vmconfig.Disks != nil { + *clh.vmconfig.Disks = append(*clh.vmconfig.Disks, *disk) + } else { + clh.vmconfig.Disks = &[]chclient.DiskConfig{*disk} + } } else { - clh.vmconfig.Pmem = &[]chclient.PmemConfig{*pmem} + pmem := chclient.NewPmemConfig(imagePath) + *pmem.DiscardWrites = true + + if clh.vmconfig.Pmem != nil { + *clh.vmconfig.Pmem = append(*clh.vmconfig.Pmem, *pmem) + } else { + clh.vmconfig.Pmem = &[]chclient.PmemConfig{*pmem} + } } } else { initrdPath, err := clh.config.InitrdAssetPath() diff --git a/src/runtime/virtcontainers/qemu_amd64.go b/src/runtime/virtcontainers/qemu_amd64.go index c32c5025dc..ef1e16adbf 100644 --- a/src/runtime/virtcontainers/qemu_amd64.go +++ b/src/runtime/virtcontainers/qemu_amd64.go @@ -132,6 +132,11 @@ func newQemuArch(config HypervisorConfig) (qemuArch, error) { if err := q.enableProtection(); err != nil { return nil, err } + + if !q.qemuArchBase.disableNvdimm { + hvLogger.WithField("subsystem", "qemuAmd64").Warn("Nvdimm is not supported with confidential guest, disabling it.") + q.qemuArchBase.disableNvdimm = true + } } if config.SGXEPCSize != 0 { diff --git a/src/runtime/virtcontainers/qemu_ppc64le.go b/src/runtime/virtcontainers/qemu_ppc64le.go index d6f768128b..93c11416ce 100644 --- a/src/runtime/virtcontainers/qemu_ppc64le.go +++ b/src/runtime/virtcontainers/qemu_ppc64le.go @@ -83,6 +83,11 @@ func newQemuArch(config HypervisorConfig) (qemuArch, error) { if err := q.enableProtection(); err != nil { return nil, err } + + if !q.qemuArchBase.disableNvdimm { + hvLogger.WithField("subsystem", "qemuPPC64le").Warn("Nvdimm is not supported with confidential guest, disabling it.") + q.qemuArchBase.disableNvdimm = true + } } q.handleImagePath(config) diff --git a/src/runtime/virtcontainers/qemu_s390x.go b/src/runtime/virtcontainers/qemu_s390x.go index aeddb982af..77b6f440b1 100644 --- a/src/runtime/virtcontainers/qemu_s390x.go +++ b/src/runtime/virtcontainers/qemu_s390x.go @@ -77,6 +77,11 @@ func newQemuArch(config HypervisorConfig) (qemuArch, error) { if err := q.enableProtection(); err != nil { return nil, err } + + if !q.qemuArchBase.disableNvdimm { + hvLogger.WithField("subsystem", "qemuS390x").Warn("Nvdimm is not supported with confidential guest, disabling it.") + q.qemuArchBase.disableNvdimm = true + } } if config.ImagePath != "" {