bcmgenet: add WOL IRQ check
authorSergey Shtylyov <s.shtylyov@omp.ru>
Thu, 13 Jan 2022 19:46:07 +0000 (22:46 +0300)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 27 Jan 2022 07:47:42 +0000 (08:47 +0100)
commit 9deb48b53e7f4056c2eaa2dc2ee3338df619e4f6 upstream.

The driver neglects to check the result of platform_get_irq_optional()'s
call and blithely passes the negative error codes to devm_request_irq()
(which takes *unsigned* IRQ #), causing it to fail with -EINVAL.
Stop calling devm_request_irq() with the invalid IRQ #s.

Fixes: 8562056f267d ("net: bcmgenet: request Wake-on-LAN interrupt")
Signed-off-by: Sergey Shtylyov <s.shtylyov@omp.ru>
Acked-by: Florian Fainelli <f.fainelli@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/net/ethernet/broadcom/genet/bcmgenet.c

index fae551777083421dedb130bc08f2fa28ca6738ef..6676924d5f3e75427d2e24c4b64c6a550f0dd3d0 100644 (file)
@@ -3358,10 +3358,12 @@ static int bcmgenet_probe(struct platform_device *pdev)
 
        /* Request the WOL interrupt and advertise suspend if available */
        priv->wol_irq_disabled = true;
-       err = devm_request_irq(&pdev->dev, priv->wol_irq, bcmgenet_wol_isr, 0,
-                              dev->name, priv);
-       if (!err)
-               device_set_wakeup_capable(&pdev->dev, 1);
+       if (priv->wol_irq > 0) {
+               err = devm_request_irq(&pdev->dev, priv->wol_irq,
+                                      bcmgenet_wol_isr, 0, dev->name, priv);
+               if (!err)
+                       device_set_wakeup_capable(&pdev->dev, 1);
+       }
 
        /* Set the needed headroom to account for any possible
         * features enabling/disabling at runtime