KVM: x86: Prevent starting PIT timers in the absence of irqchip support
authorJan Kiszka <jan.kiszka@siemens.com>
Thu, 12 Jan 2012 10:39:52 +0000 (12:39 +0200)
committerGreg Kroah-Hartman <gregkh@suse.de>
Wed, 18 Jan 2012 15:31:53 +0000 (07:31 -0800)
commit68898049e6b897cd29644c1b500e3e9593805869
treebfe9a8d5cce7b52a8f4e9b829b0c0fc2bc65dc58
parentda84e453c225f742b32ff68f65fd9a2af2691c7c
KVM: x86: Prevent starting PIT timers in the absence of irqchip support

(cherry picked from commit 0924ab2cfa98b1ece26c033d696651fd62896c69)

User space may create the PIT and forgets about setting up the irqchips.
In that case, firing PIT IRQs will crash the host:

BUG: unable to handle kernel NULL pointer dereference at 0000000000000128
IP: [<ffffffffa10f6280>] kvm_set_irq+0x30/0x170 [kvm]
...
Call Trace:
 [<ffffffffa11228c1>] pit_do_work+0x51/0xd0 [kvm]
 [<ffffffff81071431>] process_one_work+0x111/0x4d0
 [<ffffffff81071bb2>] worker_thread+0x152/0x340
 [<ffffffff81075c8e>] kthread+0x7e/0x90
 [<ffffffff815a4474>] kernel_thread_helper+0x4/0x10

Prevent this by checking the irqchip mode before starting a timer. We
can't deny creating the PIT if the irqchips aren't set up yet as
current user land expects this order to work.

Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com>
Signed-off-by: Marcelo Tosatti <mtosatti@redhat.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
arch/x86/kvm/i8254.c