
On Fri, Dec 10, 2021 at 16:47:13 +0000, Daniel P. Berrangé wrote:
Set the kernel-hashes property on the sev-guest object if the config asked for it explicitly. While QEMU machine types currently default to having this setting off, it is not guaranteed to remain this way.
Signed-off-by: Daniel P. Berrangé <berrange@redhat.com> --- src/qemu/qemu_command.c | 1 + src/qemu/qemu_validate.c | 7 ++++ ...unch-security-sev-direct.x86_64-6.2.0.args | 40 +++++++++++++++++++ .../launch-security-sev-direct.xml | 39 ++++++++++++++++++ tests/qemuxml2argvtest.c | 1 + 5 files changed, 88 insertions(+) create mode 100644 tests/qemuxml2argvdata/launch-security-sev-direct.x86_64-6.2.0.args create mode 100644 tests/qemuxml2argvdata/launch-security-sev-direct.xml
diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c index 613f7a5d2a..dfbf4973f5 100644 --- a/src/qemu/qemu_command.c +++ b/src/qemu/qemu_command.c @@ -9894,6 +9894,7 @@ qemuBuildSEVCommandLine(virDomainObj *vm, virCommand *cmd, "u:policy", sev->policy, "S:dh-cert-file", dhpath, "S:session-file", sessionpath, + "T:kernel-hashes", sev->kernel_hashes,
Since this is an '-object' ...
NULL) < 0) return -1;
diff --git a/src/qemu/qemu_validate.c b/src/qemu/qemu_validate.c index 29b01495ad..c0dc1f7b53 100644 --- a/src/qemu/qemu_validate.c +++ b/src/qemu/qemu_validate.c @@ -1200,6 +1200,13 @@ qemuValidateDomainDef(const virDomainDef *def, "this QEMU binary")); return -1; } + + if (def->sec->data.sev.kernel_hashes == VIR_TRISTATE_BOOL_YES && + !virQEMUCapsGet(qemuCaps, QEMU_CAPS_SEV_GUEST_KERNEL_HASHES)) {
... and this flag means that the 'sev-guest' actually has the 'kernel-hashes' property, the above check should be if (def->sec->data.sev.kernel_hashes != VIR_TRISTATE_BOOL_ABSENT && ... as an explicit disable will also cause a qemu error when the property is not defined inside sev-guest. Other option is to use 'B:kernel-hashes' above and extract the value of sev->kernel_hashes into a temporary bool initialized to false via virTristateBoolToBool which preserves the default. In such case it will be always omitted when not enabled. Reviewed-by: Peter Krempa <pkrempa@redhat.com>