summaryrefslogtreecommitdiffstats
path: root/virt/lib/irqbypass.c
diff options
context:
space:
mode:
authorAlex Williamson <alex.williamson@redhat.com>2016-05-05 19:58:29 +0200
committerPaolo Bonzini <pbonzini@redhat.com>2016-05-11 22:37:54 +0200
commitb52f3ed02221252d8ee2c7d756e76fad4a5e84f6 (patch)
tree614388b0b562cc9fbc5c0a8598c9a7e7762f1e89 /virt/lib/irqbypass.c
parentkvm: introduce KVM_MAX_VCPU_ID (diff)
downloadlinux-b52f3ed02221252d8ee2c7d756e76fad4a5e84f6.tar.xz
linux-b52f3ed02221252d8ee2c7d756e76fad4a5e84f6.zip
irqbypass: Disallow NULL token
A NULL token is meaningless and can only lead to unintended problems. Error on registration with a NULL token, ignore de-registrations with a NULL token. Signed-off-by: Alex Williamson <alex.williamson@redhat.com> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Diffstat (limited to 'virt/lib/irqbypass.c')
-rw-r--r--virt/lib/irqbypass.c12
1 files changed, 11 insertions, 1 deletions
diff --git a/virt/lib/irqbypass.c b/virt/lib/irqbypass.c
index 09a03b5a21ff..52abac4bb6a2 100644
--- a/virt/lib/irqbypass.c
+++ b/virt/lib/irqbypass.c
@@ -89,6 +89,9 @@ int irq_bypass_register_producer(struct irq_bypass_producer *producer)
struct irq_bypass_producer *tmp;
struct irq_bypass_consumer *consumer;
+ if (!producer->token)
+ return -EINVAL;
+
might_sleep();
if (!try_module_get(THIS_MODULE))
@@ -136,6 +139,9 @@ void irq_bypass_unregister_producer(struct irq_bypass_producer *producer)
struct irq_bypass_producer *tmp;
struct irq_bypass_consumer *consumer;
+ if (!producer->token)
+ return;
+
might_sleep();
if (!try_module_get(THIS_MODULE))
@@ -177,7 +183,8 @@ int irq_bypass_register_consumer(struct irq_bypass_consumer *consumer)
struct irq_bypass_consumer *tmp;
struct irq_bypass_producer *producer;
- if (!consumer->add_producer || !consumer->del_producer)
+ if (!consumer->token ||
+ !consumer->add_producer || !consumer->del_producer)
return -EINVAL;
might_sleep();
@@ -227,6 +234,9 @@ void irq_bypass_unregister_consumer(struct irq_bypass_consumer *consumer)
struct irq_bypass_consumer *tmp;
struct irq_bypass_producer *producer;
+ if (!consumer->token)
+ return;
+
might_sleep();
if (!try_module_get(THIS_MODULE))