]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/blob - pending-5.1/kvm-x86-do-not-spam-dmesg-with-vmcs-vmcb-dumps.patch
4.4-stable patches
[thirdparty/kernel/stable-queue.git] / pending-5.1 / kvm-x86-do-not-spam-dmesg-with-vmcs-vmcb-dumps.patch
1 From c688492f62bfa80ecc3d2b966489ef2188bf166a Mon Sep 17 00:00:00 2001
2 From: Paolo Bonzini <pbonzini@redhat.com>
3 Date: Mon, 20 May 2019 15:34:35 +0200
4 Subject: KVM: x86: do not spam dmesg with VMCS/VMCB dumps
5
6 [ Upstream commit 6f2f84532c153d32a5e53b6083b06a3e24368d30 ]
7
8 Userspace can easily set up invalid processor state in such a way that
9 dmesg will be filled with VMCS or VMCB dumps. Disable this by default
10 using a module parameter.
11
12 Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
13 Signed-off-by: Sasha Levin <sashal@kernel.org>
14 ---
15 arch/x86/kvm/svm.c | 9 ++++++++-
16 arch/x86/kvm/vmx/vmx.c | 26 +++++++++++++++++++-------
17 2 files changed, 27 insertions(+), 8 deletions(-)
18
19 diff --git a/arch/x86/kvm/svm.c b/arch/x86/kvm/svm.c
20 index ae6e51828a54..aa3b77acfbf9 100644
21 --- a/arch/x86/kvm/svm.c
22 +++ b/arch/x86/kvm/svm.c
23 @@ -379,6 +379,9 @@ module_param(vgif, int, 0444);
24 static int sev = IS_ENABLED(CONFIG_AMD_MEM_ENCRYPT_ACTIVE_BY_DEFAULT);
25 module_param(sev, int, 0444);
26
27 +static bool __read_mostly dump_invalid_vmcb = 0;
28 +module_param(dump_invalid_vmcb, bool, 0644);
29 +
30 static u8 rsm_ins_bytes[] = "\x0f\xaa";
31
32 static void svm_set_cr0(struct kvm_vcpu *vcpu, unsigned long cr0);
33 @@ -4834,6 +4837,11 @@ static void dump_vmcb(struct kvm_vcpu *vcpu)
34 struct vmcb_control_area *control = &svm->vmcb->control;
35 struct vmcb_save_area *save = &svm->vmcb->save;
36
37 + if (!dump_invalid_vmcb) {
38 + pr_warn_ratelimited("set kvm_amd.dump_invalid_vmcb=1 to dump internal KVM state.\n");
39 + return;
40 + }
41 +
42 pr_err("VMCB Control Area:\n");
43 pr_err("%-20s%04x\n", "cr_read:", control->intercept_cr & 0xffff);
44 pr_err("%-20s%04x\n", "cr_write:", control->intercept_cr >> 16);
45 @@ -4992,7 +5000,6 @@ static int handle_exit(struct kvm_vcpu *vcpu)
46 kvm_run->exit_reason = KVM_EXIT_FAIL_ENTRY;
47 kvm_run->fail_entry.hardware_entry_failure_reason
48 = svm->vmcb->control.exit_code;
49 - pr_err("KVM: FAILED VMRUN WITH VMCB:\n");
50 dump_vmcb(vcpu);
51 return 0;
52 }
53 diff --git a/arch/x86/kvm/vmx/vmx.c b/arch/x86/kvm/vmx/vmx.c
54 index 2b4a3d32c511..cfb8f1ec9a0a 100644
55 --- a/arch/x86/kvm/vmx/vmx.c
56 +++ b/arch/x86/kvm/vmx/vmx.c
57 @@ -114,6 +114,9 @@ static u64 __read_mostly host_xss;
58 bool __read_mostly enable_pml = 1;
59 module_param_named(pml, enable_pml, bool, S_IRUGO);
60
61 +static bool __read_mostly dump_invalid_vmcs = 0;
62 +module_param(dump_invalid_vmcs, bool, 0644);
63 +
64 #define MSR_BITMAP_MODE_X2APIC 1
65 #define MSR_BITMAP_MODE_X2APIC_APICV 2
66
67 @@ -5605,15 +5608,24 @@ static void vmx_dump_dtsel(char *name, uint32_t limit)
68
69 void dump_vmcs(void)
70 {
71 - u32 vmentry_ctl = vmcs_read32(VM_ENTRY_CONTROLS);
72 - u32 vmexit_ctl = vmcs_read32(VM_EXIT_CONTROLS);
73 - u32 cpu_based_exec_ctrl = vmcs_read32(CPU_BASED_VM_EXEC_CONTROL);
74 - u32 pin_based_exec_ctrl = vmcs_read32(PIN_BASED_VM_EXEC_CONTROL);
75 - u32 secondary_exec_control = 0;
76 - unsigned long cr4 = vmcs_readl(GUEST_CR4);
77 - u64 efer = vmcs_read64(GUEST_IA32_EFER);
78 + u32 vmentry_ctl, vmexit_ctl;
79 + u32 cpu_based_exec_ctrl, pin_based_exec_ctrl, secondary_exec_control;
80 + unsigned long cr4;
81 + u64 efer;
82 int i, n;
83
84 + if (!dump_invalid_vmcs) {
85 + pr_warn_ratelimited("set kvm_intel.dump_invalid_vmcs=1 to dump internal KVM state.\n");
86 + return;
87 + }
88 +
89 + vmentry_ctl = vmcs_read32(VM_ENTRY_CONTROLS);
90 + vmexit_ctl = vmcs_read32(VM_EXIT_CONTROLS);
91 + cpu_based_exec_ctrl = vmcs_read32(CPU_BASED_VM_EXEC_CONTROL);
92 + pin_based_exec_ctrl = vmcs_read32(PIN_BASED_VM_EXEC_CONTROL);
93 + cr4 = vmcs_readl(GUEST_CR4);
94 + efer = vmcs_read64(GUEST_IA32_EFER);
95 + secondary_exec_control = 0;
96 if (cpu_has_secondary_exec_ctrls())
97 secondary_exec_control = vmcs_read32(SECONDARY_VM_EXEC_CONTROL);
98
99 --
100 2.20.1
101