KVM: x86: Explicitly zero kvm_caps during vendor module load
Zero out all of kvm_caps when loading a new vendor module to ensure that KVM can't inadvertently rely on global initialization of a field, and add a comment above the definition of kvm_caps to call out that all fields needs to be explicitly computed during vendor module load. Signed-off-by: Sean Christopherson <seanjc@google.com> Reviewed-by: Xiaoyao Li <xiaoyao.li@intel.com> Message-ID: <20240423165328.2853870-4-seanjc@google.com> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
This commit is contained in:
parent
555485bd86
commit
40269c03fd
@ -92,6 +92,11 @@
|
||||
#define MAX_IO_MSRS 256
|
||||
#define KVM_MAX_MCE_BANKS 32
|
||||
|
||||
/*
|
||||
* Note, kvm_caps fields should *never* have default values, all fields must be
|
||||
* recomputed from scratch during vendor module load, e.g. to account for a
|
||||
* vendor module being reloaded with different module parameters.
|
||||
*/
|
||||
struct kvm_caps kvm_caps __read_mostly;
|
||||
EXPORT_SYMBOL_GPL(kvm_caps);
|
||||
|
||||
@ -9755,6 +9760,8 @@ int kvm_x86_vendor_init(struct kvm_x86_init_ops *ops)
|
||||
return -EIO;
|
||||
}
|
||||
|
||||
memset(&kvm_caps, 0, sizeof(kvm_caps));
|
||||
|
||||
x86_emulator_cache = kvm_alloc_emulator_cache();
|
||||
if (!x86_emulator_cache) {
|
||||
pr_err("failed to allocate cache for x86 emulator\n");
|
||||
|
Loading…
x
Reference in New Issue
Block a user