From 7a367dc0a8df1d73ba3e41cbbc7bf8c108cf6081 Mon Sep 17 00:00:00 2001 From: Jakob Naucke Date: Wed, 28 Apr 2021 15:50:36 +0200 Subject: [PATCH 1/2] qemu: Simplify (Object).Valid() so that more object types can be added without going over cyclomatic complexity limits Signed-off-by: Jakob Naucke --- qemu/qemu.go | 16 +++------------- 1 file changed, 3 insertions(+), 13 deletions(-) diff --git a/qemu/qemu.go b/qemu/qemu.go index bd9abd6e4f..b70d65f971 100644 --- a/qemu/qemu.go +++ b/qemu/qemu.go @@ -275,24 +275,14 @@ type Object struct { func (object Object) Valid() bool { switch object.Type { case MemoryBackendFile: - if object.ID == "" || object.MemPath == "" || object.Size == 0 { - return false - } - + return object.ID != "" && object.MemPath != "" && object.Size != 0 case TDXGuest: - if object.ID == "" || object.File == "" || object.DeviceID == "" { - return false - } + return object.ID != "" && object.File != "" && object.DeviceID != "" case SEVGuest: - if object.ID == "" || object.File == "" || object.CBitPos == 0 || object.ReducedPhysBits == 0 { - return false - } - + return object.ID != "" && object.File != "" && object.CBitPos != 0 && object.ReducedPhysBits != 0 default: return false } - - return true } // QemuParams returns the qemu parameters built out of this Object device. From 03b55ea51dca2344ed2171640e87f6deccb7c754 Mon Sep 17 00:00:00 2001 From: Jakob Naucke Date: Wed, 28 Apr 2021 15:53:47 +0200 Subject: [PATCH 2/2] qemu: Add support for Secure Execution Secure Execution, also known as Protected Virtualization in QEMU, is a confidential computing technology for s390x (IBM Z & LinuxONE). Allow the respective object. Fixes: #172 Signed-off-by: Jakob Naucke --- qemu/qemu.go | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/qemu/qemu.go b/qemu/qemu.go index b70d65f971..e01bf93383 100644 --- a/qemu/qemu.go +++ b/qemu/qemu.go @@ -233,6 +233,9 @@ const ( // SEVGuest represents an SEV guest object SEVGuest ObjectType = "sev-guest" + + // SecExecGuest represents an s390x Secure Execution (Protected Virtualization in QEMU) object + SecExecGuest ObjectType = "s390-pv-guest" ) // Object is a qemu object representation. @@ -280,6 +283,8 @@ func (object Object) Valid() bool { return object.ID != "" && object.File != "" && object.DeviceID != "" case SEVGuest: return object.ID != "" && object.File != "" && object.CBitPos != 0 && object.ReducedPhysBits != 0 + case SecExecGuest: + return object.ID != "" default: return false } @@ -319,6 +324,9 @@ func (object Object) QemuParams(config *Config) []string { driveParams = append(driveParams, "if=pflash,format=raw,readonly=on") driveParams = append(driveParams, fmt.Sprintf(",file=%s", object.File)) + case SecExecGuest: + objectParams = append(objectParams, string(object.Type)) + objectParams = append(objectParams, fmt.Sprintf(",id=%s", object.ID)) } if len(deviceParams) > 0 {