On Mon, Jan 24, 2022, Vitaly Kuznetsov wrote: > Paolo Bonzini <pbonzini@xxxxxxxxxx> writes: > >> + if (memcmp(e2, vcpu->arch.cpuid_entries, nent * sizeof(*e2))) > >> + return -EINVAL; > > > > Hmm, not sure about that due to the padding in struct kvm_cpuid_entry2. > > It might break userspace that isn't too careful about zeroing it. Given that we already are fully committed to potentially breaking userspace by disallowing KVM_SET_CPUID{2} after KVM_RUN, we might as well get greedy. > FWIW, QEMU zeroes the whole thing before setting individual CPUID > entries. Legacy KVM_SET_CPUID call is also not afffected as it copies > entries to a newly allocated "struct kvm_cpuid_entry2[]" and explicitly > zeroes padding. > > Do we need to at least add a check for ".flags"? Yes.