be2net: Avoid accessing eq object in be_msix_register routine, when i < 0.
authorVenkat Duvvuru <venkatkumar.duvvuru@avagotech.com>
Thu, 17 Dec 2015 20:10:50 +0000 (01:40 +0530)
committerDavid S. Miller <davem@davemloft.net>
Fri, 18 Dec 2015 20:50:52 +0000 (15:50 -0500)
When the first request_irq fails in be_msix_register, i value
would be zero. The current code decrements the i value and
accesses the eq object without validating the decremented
"i" value. This can cause an "invalid memory address access"
violation.

This patch fixes the problem by accessing the eq object after
validating the "i" value.

Signed-off-by: Venkat Duvvuru <venkatkumar.duvvuru@avagotech.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/emulex/benet/be_main.c

index b6ad02909d6b3c87b861d4e35c345426bef30a64..65988202f9541bdd22728f263ef25e8f2ae48071 100644 (file)
@@ -3299,8 +3299,10 @@ static int be_msix_register(struct be_adapter *adapter)
 
        return 0;
 err_msix:
-       for (i--, eqo = &adapter->eq_obj[i]; i >= 0; i--, eqo--)
+       for (i--; i >= 0; i--) {
+               eqo = &adapter->eq_obj[i];
                free_irq(be_msix_vec_get(adapter, eqo), eqo);
+       }
        dev_warn(&adapter->pdev->dev, "MSIX Request IRQ failed - err %d\n",
                 status);
        be_msix_disable(adapter);