platform_get_irq_byname() might return -errno which later would be
cast to an unsigned int and used in request_irq().

Signed-off-by: Krzysztof Kozlowski <k...@kernel.org>

---

Not marking as cc-stable as this was not reproduced and not tested.
---
 drivers/power/supply/ab8500_btemp.c   |  5 +++++
 drivers/power/supply/ab8500_charger.c |  5 +++++
 drivers/power/supply/ab8500_fg.c      | 10 ++++++++++
 3 files changed, 20 insertions(+)

diff --git a/drivers/power/supply/ab8500_btemp.c 
b/drivers/power/supply/ab8500_btemp.c
index a167938e32f2..cfd8152bf8fc 100644
--- a/drivers/power/supply/ab8500_btemp.c
+++ b/drivers/power/supply/ab8500_btemp.c
@@ -1082,6 +1082,11 @@ static int ab8500_btemp_probe(struct platform_device 
*pdev)
        /* Register interrupts */
        for (i = 0; i < ARRAY_SIZE(ab8500_btemp_irq); i++) {
                irq = platform_get_irq_byname(pdev, ab8500_btemp_irq[i].name);
+               if (irq < 0) {
+                       ret = irq;
+                       goto free_irq;
+               }
+
                ret = request_threaded_irq(irq, NULL, ab8500_btemp_irq[i].isr,
                        IRQF_SHARED | IRQF_NO_SUSPEND,
                        ab8500_btemp_irq[i].name, di);
diff --git a/drivers/power/supply/ab8500_charger.c 
b/drivers/power/supply/ab8500_charger.c
index e51d0e72beea..7ad23df6f75a 100644
--- a/drivers/power/supply/ab8500_charger.c
+++ b/drivers/power/supply/ab8500_charger.c
@@ -3556,6 +3556,11 @@ static int ab8500_charger_probe(struct platform_device 
*pdev)
        /* Register interrupts */
        for (i = 0; i < ARRAY_SIZE(ab8500_charger_irq); i++) {
                irq = platform_get_irq_byname(pdev, ab8500_charger_irq[i].name);
+               if (irq < 0) {
+                       ret = irq;
+                       goto free_irq;
+               }
+
                ret = request_threaded_irq(irq, NULL, ab8500_charger_irq[i].isr,
                        IRQF_SHARED | IRQF_NO_SUSPEND,
                        ab8500_charger_irq[i].name, di);
diff --git a/drivers/power/supply/ab8500_fg.c b/drivers/power/supply/ab8500_fg.c
index 7d879589adc2..01f3da103813 100644
--- a/drivers/power/supply/ab8500_fg.c
+++ b/drivers/power/supply/ab8500_fg.c
@@ -3151,6 +3151,11 @@ static int ab8500_fg_probe(struct platform_device *pdev)
        /* Register primary interrupt handlers */
        for (i = 0; i < ARRAY_SIZE(ab8500_fg_irq_th); i++) {
                irq = platform_get_irq_byname(pdev, ab8500_fg_irq_th[i].name);
+               if (irq < 0) {
+                       ret = irq;
+                       goto free_irq_th;
+               }
+
                ret = request_irq(irq, ab8500_fg_irq_th[i].isr,
                                  IRQF_SHARED | IRQF_NO_SUSPEND,
                                  ab8500_fg_irq_th[i].name, di);
@@ -3166,6 +3171,11 @@ static int ab8500_fg_probe(struct platform_device *pdev)
 
        /* Register threaded interrupt handler */
        irq = platform_get_irq_byname(pdev, ab8500_fg_irq_bh[0].name);
+       if (irq < 0) {
+               ret = irq;
+               goto free_irq_th;
+       }
+
        ret = request_threaded_irq(irq, NULL, ab8500_fg_irq_bh[0].isr,
                                IRQF_SHARED | IRQF_NO_SUSPEND | IRQF_ONESHOT,
                        ab8500_fg_irq_bh[0].name, di);
-- 
2.17.1

Reply via email to