qemu/qapi
Michael Roth 9d38d9dca2 i386/sev: Don't allow automatic fallback to legacy KVM_SEV*_INIT
Currently if the 'legacy-vm-type' property of the sev-guest object is
'on', QEMU will attempt to use the newer KVM_SEV_INIT2 kernel
interface in conjunction with the newer KVM_X86_SEV_VM and
KVM_X86_SEV_ES_VM KVM VM types.

This can lead to measurement changes if, for instance, an SEV guest was
created on a host that originally had an older kernel that didn't
support KVM_SEV_INIT2, but is booted on the same host later on after the
host kernel was upgraded.

Instead, if legacy-vm-type is 'off', QEMU should fail if the
KVM_SEV_INIT2 interface is not provided by the current host kernel.
Modify the fallback handling accordingly.

In the future, VMSA features and other flags might be added to QEMU
which will require legacy-vm-type to be 'off' because they will rely
on the newer KVM_SEV_INIT2 interface. It may be difficult to convey to
users what values of legacy-vm-type are compatible with which
features/options, so as part of this rework, switch legacy-vm-type to a
tri-state OnOffAuto option. 'auto' in this case will automatically
switch to using the newer KVM_SEV_INIT2, but only if it is required to
make use of new VMSA features or other options only available via
KVM_SEV_INIT2.

Defining 'auto' in this way would avoid inadvertantly breaking
compatibility with older kernels since it would only be used in cases
where users opt into newer features that are only available via
KVM_SEV_INIT2 and newer kernels, and provide better default behavior
than the legacy-vm-type=off behavior that was previously in place, so
make it the default for 9.1+ machine types.

Cc: Daniel P. Berrangé <berrange@redhat.com>
Cc: Paolo Bonzini <pbonzini@redhat.com>
cc: kvm@vger.kernel.org
Signed-off-by: Michael Roth <michael.roth@amd.com>
Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
Link: https://lore.kernel.org/r/20240710041005.83720-1-michael.roth@amd.com
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
2024-07-16 10:45:06 +02:00
..
acpi.json qapi: Require descriptions and tagged sections to be indented 2024-02-26 10:43:56 +01:00
audio.json audio/pw: Pipewire->PipeWire case fix for user-visible text 2023-07-17 15:22:56 +04:00
authz.json qapi: Reformat doc comments to conform to current conventions 2023-05-10 10:01:01 +02:00
block-core.json sphinx/qapidoc: Fix to generate doc for explicit, unboxed arguments 2024-07-06 08:58:24 +02:00
block-export.json qapi: Move error documentation to new "Errors" sections 2024-03-04 07:12:40 +01:00
block.json qapi: convert "Note" sections to plain rST 2024-07-06 08:58:24 +02:00
char.json qapi: convert "Note" sections to plain rST 2024-07-06 08:58:24 +02:00
common.json qapi: document PCIe Gen5/Gen6 speeds since 9.0 2024-03-18 04:57:45 -04:00
compat.json qapi: Belatedly update CompatPolicy documentation for unstable 2023-10-19 07:02:29 +02:00
control.json qapi: add markup to note blocks 2024-07-06 08:58:24 +02:00
crypto.json qapi: Correct documentation indentation and whitespace 2024-03-26 06:36:08 +01:00
cryptodev.json spelling: information 2023-06-09 23:38:16 +03:00
cxl.json hw/cxl/events: Mark cxl-add-dynamic-capacity and cxl-release-dynamic-capcity unstable 2024-07-03 18:14:07 -04:00
dump.json qapi: convert "Note" sections to plain rST 2024-07-06 08:58:24 +02:00
ebpf.json qapi: Refill doc comments to conform to current conventions 2024-03-26 06:36:08 +01:00
error.json qapi: Reformat doc comments to conform to current conventions 2023-05-10 10:01:01 +02:00
introspect.json qapi: convert "Note" sections to plain rST 2024-07-06 08:58:24 +02:00
job.json blockjob: introduce block-job-change QMP command 2023-10-31 18:20:25 +01:00
machine-common.json CPU topology: extend with s390 specifics 2023-10-20 07:16:53 +02:00
machine-target.json qapi: convert "Note" sections to plain rST 2024-07-06 08:58:24 +02:00
machine.json qapi: convert "Note" sections to plain rST 2024-07-06 08:58:24 +02:00
meson.build qapi/vfio: Add VFIO migration QAPI event 2024-05-16 16:59:19 +02:00
migration.json qapi: convert "Note" sections to plain rST 2024-07-06 08:58:24 +02:00
misc-target.json i386/sev: Update query-sev QAPI format to handle SEV-SNP 2024-06-05 11:01:06 +02:00
misc.json qapi: add markup to note blocks 2024-07-06 08:58:24 +02:00
net.json qapi: convert "Note" sections to plain rST 2024-07-06 08:58:24 +02:00
opts-visitor.c qapi: Inline and remove QERR_INVALID_PARAMETER definition 2024-04-24 09:50:58 +02:00
pci.json qapi: convert "Note" sections to plain rST 2024-07-06 08:58:24 +02:00
pragma.json qapi: document parameters of query-cpu-model-* QAPI commands 2024-03-26 06:36:08 +01:00
qapi-clone-visitor.c qapi: Do not cast function pointers 2024-05-29 12:41:56 +02:00
qapi-dealloc-visitor.c qapi: Make visitor functions taking Error ** return bool, not void 2020-07-10 15:18:08 +02:00
qapi-forward-visitor.c qapi: remove needless include 2022-03-22 14:46:18 +04:00
qapi-schema.json qapi/vfio: Add VFIO migration QAPI event 2024-05-16 16:59:19 +02:00
qapi-type-helpers.c qapi: New strv_from_str_list() 2024-03-04 07:12:40 +01:00
qapi-util.c qapi: Fix dangling references to docs/devel/qapi-code-gen.txt 2024-01-26 07:04:53 +01:00
qapi-visit-core.c qapi: Factor out compat_policy_input_ok() 2021-10-29 21:27:20 +02:00
qdev.json qapi: add markup to note blocks 2024-07-06 08:58:24 +02:00
qmp-dispatch.c Revert "monitor: use aio_co_reschedule_self()" 2024-06-10 11:05:43 +02:00
qmp-event.c Replace qemu_gettimeofday() with g_get_real_time() 2022-04-06 10:50:37 +02:00
qmp-registry.c qapi: Generalize command policy checking 2021-10-29 18:24:46 +02:00
qobject-input-visitor.c qapi: Inline QERR_INVALID_PARAMETER_TYPE definition (constant value) 2024-04-24 09:50:58 +02:00
qobject-output-visitor.c qapi: Extend -compat to set policy for unstable interfaces 2021-10-29 21:28:01 +02:00
qom.json i386/sev: Don't allow automatic fallback to legacy KVM_SEV*_INIT 2024-07-16 10:45:06 +02:00
replay.json qapi: Expand a few awkward abbreviations in documentation 2024-03-26 06:36:08 +01:00
rocker.json qapi: convert "Note" sections to plain rST 2024-07-06 08:58:24 +02:00
run-state.json qapi: add markup to note blocks 2024-07-06 08:58:24 +02:00
sockets.json qapi: add markup to note blocks 2024-07-06 08:58:24 +02:00
stats.json qapi: convert "Note" sections to plain rST 2024-07-06 08:58:24 +02:00
string-input-visitor.c qapi: Inline QERR_INVALID_PARAMETER_TYPE definition (constant value) 2024-04-24 09:50:58 +02:00
string-output-visitor.c string-output-visitor: Fix (pseudo) struct handling 2024-01-26 11:16:58 +01:00
tpm.json qapi: Delete useless "Returns" sections 2024-03-04 07:12:40 +01:00
trace-events qapi: Generalize struct member policy checking 2021-10-29 18:23:09 +02:00
trace.h trace: switch position of headers to what Meson requires 2020-08-21 06:18:24 -04:00
trace.json trace: Remove deprecated 'vcpu' field from QMP trace events 2024-06-04 11:53:43 +02:00
transaction.json qapi: convert "Note" sections to plain rST 2024-07-06 08:58:24 +02:00
ui.json qapi: add markup to note blocks 2024-07-06 08:58:24 +02:00
vfio.json qapi/vfio: Add VFIO migration QAPI event 2024-05-16 16:59:19 +02:00
virtio.json qapi: convert "Note" sections to plain rST 2024-07-06 08:58:24 +02:00
yank.json qapi/yank: Tweak @yank's error description for consistency 2024-03-04 07:12:40 +01:00