diff options
author | Mark McLoughlin <markmc@redhat.com> | 2008-12-01 13:57:46 +0000 |
---|---|---|
committer | Avi Kivity <avi@redhat.com> | 2008-12-31 16:55:06 +0200 |
commit | fdd897e6b5253a45b633f7d334cf3e150bbaf386 (patch) | |
tree | 2a6d5c59d782c49f20d01578525eb9ec201bb35a | |
parent | 844c7a9ff404d8fc88bb77b06461644621d2c985 (diff) | |
download | linux-3.10-fdd897e6b5253a45b633f7d334cf3e150bbaf386.tar.gz linux-3.10-fdd897e6b5253a45b633f7d334cf3e150bbaf386.tar.bz2 linux-3.10-fdd897e6b5253a45b633f7d334cf3e150bbaf386.zip |
KVM: make kvm_unregister_irq_ack_notifier() safe
We never pass a NULL notifier pointer here, but we may well
pass a notifier struct which hasn't previously been
registered.
Guard against this by using hlist_del_init() which will
not do anything if the node hasn't been added to the list
and, when removing the node, will ensure that a subsequent
call to hlist_del_init() will be fine too.
Fixes an oops seen when an assigned device is freed before
and IRQ is assigned to it.
Signed-off-by: Mark McLoughlin <markmc@redhat.com>
Signed-off-by: Avi Kivity <avi@redhat.com>
-rw-r--r-- | virt/kvm/irq_comm.c | 4 |
1 files changed, 1 insertions, 3 deletions
diff --git a/virt/kvm/irq_comm.c b/virt/kvm/irq_comm.c index 973df997ea6..db75045f22f 100644 --- a/virt/kvm/irq_comm.c +++ b/virt/kvm/irq_comm.c @@ -63,9 +63,7 @@ void kvm_register_irq_ack_notifier(struct kvm *kvm, void kvm_unregister_irq_ack_notifier(struct kvm_irq_ack_notifier *kian) { - if (!kian) - return; - hlist_del(&kian->link); + hlist_del_init(&kian->link); } /* The caller must hold kvm->lock mutex */ |