diff options
author | Alexandru Moise <00moses.alexander00@gmail.com> | 2017-09-19 16:04:12 -0400 |
---|---|---|
committer | Thomas Gleixner <tglx@linutronix.de> | 2017-09-25 10:40:31 -0400 |
commit | 2827a418ca1b23e432e62c9b3d0e7cf3255dfe88 (patch) | |
tree | f714a36e5dccc31387bc54c7162ce6e8a2fb2f22 /kernel/irq/manage.c | |
parent | e19b205be43d11bff638cad4487008c48d21c103 (diff) |
genirq: Check __free_irq() return value for NULL
__free_irq() can return a NULL irqaction for example when trying to free
already-free IRQ, but the callsite unconditionally dereferences the
returned pointer.
Fix this by adding a check and return NULL.
Signed-off-by: Alexandru Moise <00moses.alexander00@gmail.com>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Link: https://lkml.kernel.org/r/20170919200412.GA29985@gmail.com
Diffstat (limited to 'kernel/irq/manage.c')
-rw-r--r-- | kernel/irq/manage.c | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/kernel/irq/manage.c b/kernel/irq/manage.c index 573dc52b0806..d00132b5c325 100644 --- a/kernel/irq/manage.c +++ b/kernel/irq/manage.c | |||
@@ -1643,6 +1643,10 @@ const void *free_irq(unsigned int irq, void *dev_id) | |||
1643 | #endif | 1643 | #endif |
1644 | 1644 | ||
1645 | action = __free_irq(irq, dev_id); | 1645 | action = __free_irq(irq, dev_id); |
1646 | |||
1647 | if (!action) | ||
1648 | return NULL; | ||
1649 | |||
1646 | devname = action->name; | 1650 | devname = action->name; |
1647 | kfree(action); | 1651 | kfree(action); |
1648 | return devname; | 1652 | return devname; |