On Fri, Feb 09, 2024 at 01:37:33PM -0500, Paolo Bonzini wrote: > The data structs for KVM_MEMORY_ENCRYPT_OP have different sizes for 32- and 64-bit > kernels, but they do not make any attempt to convert from one ABI to the other. > Fix this by adding the appropriate padding. > > No functional change intended for 64-bit userspace. > > Signed-off-by: Paolo Bonzini <pbonzini@xxxxxxxxxx> Reviewed-by: Michael Roth <michael.roth@xxxxxxx> > --- > arch/x86/include/uapi/asm/kvm.h | 23 +++++++++++++++++++++++ > 1 file changed, 23 insertions(+) > > diff --git a/arch/x86/include/uapi/asm/kvm.h b/arch/x86/include/uapi/asm/kvm.h > index 0ad6bda1fc39..b305daff056e 100644 > --- a/arch/x86/include/uapi/asm/kvm.h > +++ b/arch/x86/include/uapi/asm/kvm.h > @@ -687,6 +687,7 @@ enum sev_cmd_id { > > struct kvm_sev_cmd { > __u32 id; > + __u32 pad0; > __u64 data; > __u32 error; > __u32 sev_fd; > @@ -697,28 +698,35 @@ struct kvm_sev_launch_start { > __u32 policy; > __u64 dh_uaddr; > __u32 dh_len; > + __u32 pad0; > __u64 session_uaddr; > __u32 session_len; > + __u32 pad1; > }; > > struct kvm_sev_launch_update_data { > __u64 uaddr; > __u32 len; > + __u32 pad0; > }; > > > struct kvm_sev_launch_secret { > __u64 hdr_uaddr; > __u32 hdr_len; > + __u32 pad0; > __u64 guest_uaddr; > __u32 guest_len; > + __u32 pad1; > __u64 trans_uaddr; > __u32 trans_len; > + __u32 pad2; > }; > > struct kvm_sev_launch_measure { > __u64 uaddr; > __u32 len; > + __u32 pad0; > }; > > struct kvm_sev_guest_status { > @@ -731,33 +739,43 @@ struct kvm_sev_dbg { > __u64 src_uaddr; > __u64 dst_uaddr; > __u32 len; > + __u32 pad0; > }; > > struct kvm_sev_attestation_report { > __u8 mnonce[16]; > __u64 uaddr; > __u32 len; > + __u32 pad0; > }; > > struct kvm_sev_send_start { > __u32 policy; > + __u32 pad0; > __u64 pdh_cert_uaddr; > __u32 pdh_cert_len; > + __u32 pad1; > __u64 plat_certs_uaddr; > __u32 plat_certs_len; > + __u32 pad2; > __u64 amd_certs_uaddr; > __u32 amd_certs_len; > + __u32 pad3; > __u64 session_uaddr; > __u32 session_len; > + __u32 pad4; > }; > > struct kvm_sev_send_update_data { > __u64 hdr_uaddr; > __u32 hdr_len; > + __u32 pad0; > __u64 guest_uaddr; > __u32 guest_len; > + __u32 pad1; > __u64 trans_uaddr; > __u32 trans_len; > + __u32 pad2; > }; > > struct kvm_sev_receive_start { > @@ -765,17 +783,22 @@ struct kvm_sev_receive_start { > __u32 policy; > __u64 pdh_uaddr; > __u32 pdh_len; > + __u32 pad0; > __u64 session_uaddr; > __u32 session_len; > + __u32 pad1; > }; > > struct kvm_sev_receive_update_data { > __u64 hdr_uaddr; > __u32 hdr_len; > + __u32 pad0; > __u64 guest_uaddr; > __u32 guest_len; > + __u32 pad1; > __u64 trans_uaddr; > __u32 trans_len; > + __u32 pad2; > }; > > #define KVM_X2APIC_API_USE_32BIT_IDS (1ULL << 0) > -- > 2.39.0 > >