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>
This commit is contained in:
parent
0b1b1dfd52
commit
b52f3ed022
|
@ -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 {
|
||||||
/**
|
/**
|
||||||
* 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)
|
||||||
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)
|
||||||
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)
|
||||||
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)
|
||||||
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))
|
||||||
|
|
Loading…
Reference in New Issue