Skip to content

Commit 9a11997

Browse files
Wanpeng Libonzini
authored andcommitted
KVM: X86: Fix dereference null cpufreq policy
Naresh Kamboju reported: Linux version 5.6.0-rc4 (oe-user@oe-host) (gcc version (GCC)) #1 SMP Sun Mar 1 22:59:08 UTC 2020 kvm: no hardware support BUG: kernel NULL pointer dereference, address: 000000000000028c #PF: supervisor read access in kernel mode #PF: error_code(0x0000) - not-present page PGD 0 P4D 0 Oops: 0000 [#1] SMP NOPTI CPU: 0 PID: 1 Comm: swapper/0 Not tainted 5.6.0-rc4 #1 Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), 04/01/2014 RIP: 0010:kobject_put+0x12/0x1c0 Call Trace: cpufreq_cpu_put+0x15/0x20 kvm_arch_init+0x1f6/0x2b0 kvm_init+0x31/0x290 ? svm_check_processor_compat+0xd/0xd ? svm_check_processor_compat+0xd/0xd svm_init+0x21/0x23 do_one_initcall+0x61/0x2f0 ? rdinit_setup+0x30/0x30 ? rcu_read_lock_sched_held+0x4f/0x80 kernel_init_freeable+0x219/0x279 ? rest_init+0x250/0x250 kernel_init+0xe/0x110 ret_from_fork+0x27/0x50 Modules linked in: CR2: 000000000000028c ---[ end trace 239abf40c55c409b ]--- RIP: 0010:kobject_put+0x12/0x1c0 cpufreq policy which is get by cpufreq_cpu_get() can be NULL if it is failure, this patch takes care of it. Fixes: aaec7c0 (KVM: x86: avoid useless copy of cpufreq policy) Reported-by: Naresh Kamboju <[email protected]> Cc: Naresh Kamboju <[email protected]> Signed-off-by: Wanpeng Li <[email protected]> Signed-off-by: Paolo Bonzini <[email protected]>
1 parent 86f7e90 commit 9a11997

File tree

1 file changed

+5
-3
lines changed

1 file changed

+5
-3
lines changed

arch/x86/kvm/x86.c

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7195,10 +7195,12 @@ static void kvm_timer_init(void)
71957195

71967196
cpu = get_cpu();
71977197
policy = cpufreq_cpu_get(cpu);
7198-
if (policy && policy->cpuinfo.max_freq)
7199-
max_tsc_khz = policy->cpuinfo.max_freq;
7198+
if (policy) {
7199+
if (policy->cpuinfo.max_freq)
7200+
max_tsc_khz = policy->cpuinfo.max_freq;
7201+
cpufreq_cpu_put(policy);
7202+
}
72007203
put_cpu();
7201-
cpufreq_cpu_put(policy);
72027204
#endif
72037205
cpufreq_register_notifier(&kvmclock_cpufreq_notifier_block,
72047206
CPUFREQ_TRANSITION_NOTIFIER);

0 commit comments

Comments
 (0)