diff options
author | Alex Williamson <alex.williamson@redhat.com> | 2016-05-05 11:58:29 -0600 |
---|---|---|
committer | Paolo Bonzini <pbonzini@redhat.com> | 2016-05-11 22:37:54 +0200 |
commit | b52f3ed02221252d8ee2c7d756e76fad4a5e84f6 (patch) | |
tree | 614388b0b562cc9fbc5c0a8598c9a7e7762f1e89 /virt/lib | |
parent | 0b1b1dfd52a67f4f09a18cb82337199bc90ad7fb (diff) | |
download | linux-b52f3ed02221252d8ee2c7d756e76fad4a5e84f6.tar.gz linux-b52f3ed02221252d8ee2c7d756e76fad4a5e84f6.tar.bz2 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')
-rw-r--r-- | virt/lib/irqbypass.c | 12 |
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)) |