Re: [PATCH for-5.18] KVM: fix bad user ABI for KVM_EXIT_SYSTEM_EVENT

From: Paolo Bonzini
Date: Fri Apr 29 2022 - 10:07:39 EST


On 4/29/22 16:03, Sean Christopherson wrote:
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.

Well, the only such userspace AFAIK is crosvm on ARM and there's no compat ABI for ARM. But yeah, your wording below sounds good.

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?

Interesting idea. I'll apply it and push the patch.

Thanks for the review!

Paolo

+ __u64 data[16];
+ };
} system_event;
/* KVM_EXIT_S390_STSI */
struct {