KVM: Fix local apic timer divide by zero
kvm_lapic_reset() was initializing apic->timer.divide_count to 0, which could potentially lead to a divide by zero error in apic_get_tmcct(). Any guest that reads the APIC's CCR (current count) register before setting DCR (divide configuration) would trigger a divide by zero exception in the host kernel, leading to a host-OS crash. This patch results in apic->timer.divide_count being initialized to 2 at reset, eliminating the bug (DCR=0 at reset, meaning divide by 2). Signed-off-by: Kevin Pedretti <kevin.pedretti@gmail.com> Signed-off-by: Avi Kivity <avi@qumranet.com>
This commit is contained in:
parent
0552f73b9a
commit
b33ac88b4c
1 changed files with 1 additions and 1 deletions
|
@ -853,7 +853,7 @@ void kvm_lapic_reset(struct kvm_vcpu *vcpu)
|
|||
apic_set_reg(apic, APIC_ISR + 0x10 * i, 0);
|
||||
apic_set_reg(apic, APIC_TMR + 0x10 * i, 0);
|
||||
}
|
||||
apic->timer.divide_count = 0;
|
||||
update_divide_count(apic);
|
||||
atomic_set(&apic->timer.pending, 0);
|
||||
if (vcpu->vcpu_id == 0)
|
||||
vcpu->apic_base |= MSR_IA32_APICBASE_BSP;
|
||||
|
|
Loading…
Add table
Reference in a new issue