Re: [PATCH for-5.18] KVM: fix bad user ABI for KVM_EXIT_SYSTEM_EVENT
From: Sean Christopherson
Date: Fri Apr 29 2022 - 10:06:58 EST
On Fri, Apr 22, 2022, Paolo Bonzini wrote:
> For compatibility with userspace that was using the flags field,
> a union overlaps flags with data[0].
I think "compatibility" is slightly misleading, e.g. the offset of the field is
changing for 32-bit userspace.
To avoid breaking compilation of userspace that was using the flags
field, provide a userspace-only union to overlap flags with data[0].
> diff --git a/include/uapi/linux/kvm.h b/include/uapi/linux/kvm.h
> index 91a6fe4e02c0..f903ab0c8d7a 100644
> --- a/include/uapi/linux/kvm.h
> +++ b/include/uapi/linux/kvm.h
> @@ -445,7 +445,11 @@ struct kvm_run {
> #define KVM_SYSTEM_EVENT_RESET 2
> #define KVM_SYSTEM_EVENT_CRASH 3
> __u32 type;
> - __u64 flags;
> + __u32 ndata;
> + union {
> + __u64 flags;
As alluded to above, what about wrapping flags in
#ifndef __KERNEL__
__u64 flags;
#endif
so that KVM doesn't try to use flags?
> + __u64 data[16];
> + };
> } system_event;
> /* KVM_EXIT_S390_STSI */
> struct {