Commit b52f3ed0 authored by Alex Williamson's avatar Alex Williamson Committed by Paolo Bonzini

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: default avatarAlex Williamson <alex.williamson@redhat.com>
Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
parent 0b1b1dfd
...@@ -34,7 +34,7 @@ struct irq_bypass_consumer; ...@@ -34,7 +34,7 @@ struct irq_bypass_consumer;
/** /**
* struct irq_bypass_producer - IRQ bypass producer definition * struct irq_bypass_producer - IRQ bypass producer definition
* @node: IRQ bypass manager private list management * @node: IRQ bypass manager private list management
* @token: opaque token to match between producer and consumer * @token: opaque token to match between producer and consumer (non-NULL)
* @irq: Linux IRQ number for the producer device * @irq: Linux IRQ number for the producer device
* @add_consumer: Connect the IRQ producer to an IRQ consumer (optional) * @add_consumer: Connect the IRQ producer to an IRQ consumer (optional)
* @del_consumer: Disconnect the IRQ producer from an IRQ consumer (optional) * @del_consumer: Disconnect the IRQ producer from an IRQ consumer (optional)
...@@ -60,7 +60,7 @@ struct irq_bypass_producer { ...@@ -60,7 +60,7 @@ struct irq_bypass_producer {
/** /**
* struct irq_bypass_consumer - IRQ bypass consumer definition * struct irq_bypass_consumer - IRQ bypass consumer definition
* @node: IRQ bypass manager private list management * @node: IRQ bypass manager private list management
* @token: opaque token to match between producer and consumer * @token: opaque token to match between producer and consumer (non-NULL)
* @add_producer: Connect the IRQ consumer to an IRQ producer * @add_producer: Connect the IRQ consumer to an IRQ producer
* @del_producer: Disconnect the IRQ consumer from an IRQ producer * @del_producer: Disconnect the IRQ consumer from an IRQ producer
* @stop: Perform any quiesce operations necessary prior to add/del (optional) * @stop: Perform any quiesce operations necessary prior to add/del (optional)
......
...@@ -89,6 +89,9 @@ int irq_bypass_register_producer(struct irq_bypass_producer *producer) ...@@ -89,6 +89,9 @@ int irq_bypass_register_producer(struct irq_bypass_producer *producer)
struct irq_bypass_producer *tmp; struct irq_bypass_producer *tmp;
struct irq_bypass_consumer *consumer; struct irq_bypass_consumer *consumer;
if (!producer->token)
return -EINVAL;
might_sleep(); might_sleep();
if (!try_module_get(THIS_MODULE)) if (!try_module_get(THIS_MODULE))
...@@ -136,6 +139,9 @@ void irq_bypass_unregister_producer(struct irq_bypass_producer *producer) ...@@ -136,6 +139,9 @@ void irq_bypass_unregister_producer(struct irq_bypass_producer *producer)
struct irq_bypass_producer *tmp; struct irq_bypass_producer *tmp;
struct irq_bypass_consumer *consumer; struct irq_bypass_consumer *consumer;
if (!producer->token)
return;
might_sleep(); might_sleep();
if (!try_module_get(THIS_MODULE)) if (!try_module_get(THIS_MODULE))
...@@ -177,7 +183,8 @@ int irq_bypass_register_consumer(struct irq_bypass_consumer *consumer) ...@@ -177,7 +183,8 @@ int irq_bypass_register_consumer(struct irq_bypass_consumer *consumer)
struct irq_bypass_consumer *tmp; struct irq_bypass_consumer *tmp;
struct irq_bypass_producer *producer; struct irq_bypass_producer *producer;
if (!consumer->add_producer || !consumer->del_producer) if (!consumer->token ||
!consumer->add_producer || !consumer->del_producer)
return -EINVAL; return -EINVAL;
might_sleep(); might_sleep();
...@@ -227,6 +234,9 @@ void irq_bypass_unregister_consumer(struct irq_bypass_consumer *consumer) ...@@ -227,6 +234,9 @@ void irq_bypass_unregister_consumer(struct irq_bypass_consumer *consumer)
struct irq_bypass_consumer *tmp; struct irq_bypass_consumer *tmp;
struct irq_bypass_producer *producer; struct irq_bypass_producer *producer;
if (!consumer->token)
return;
might_sleep(); might_sleep();
if (!try_module_get(THIS_MODULE)) if (!try_module_get(THIS_MODULE))
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment