aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVenkat Duvvuru <venkatkumar.duvvuru@avagotech.com>2015-12-17 15:10:50 -0500
committerDavid S. Miller <davem@davemloft.net>2015-12-18 15:50:52 -0500
commit6e3cd5fa65318f35ec9c9f61bc5cdb55d4783cb9 (patch)
tree048a86e6d1c078c8eda7e43b4e5453b035397f90
parent6be842f7ccc2c690232f5094681eb0efae4c1590 (diff)
be2net: Avoid accessing eq object in be_msix_register routine, when i < 0.
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>
-rw-r--r--drivers/net/ethernet/emulex/benet/be_main.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/drivers/net/ethernet/emulex/benet/be_main.c b/drivers/net/ethernet/emulex/benet/be_main.c
index b6ad02909d6b..65988202f954 100644
--- a/drivers/net/ethernet/emulex/benet/be_main.c
+++ b/drivers/net/ethernet/emulex/benet/be_main.c
@@ -3299,8 +3299,10 @@ static int be_msix_register(struct be_adapter *adapter)
3299 3299
3300 return 0; 3300 return 0;
3301err_msix: 3301err_msix:
3302 for (i--, eqo = &adapter->eq_obj[i]; i >= 0; i--, eqo--) 3302 for (i--; i >= 0; i--) {
3303 eqo = &adapter->eq_obj[i];
3303 free_irq(be_msix_vec_get(adapter, eqo), eqo); 3304 free_irq(be_msix_vec_get(adapter, eqo), eqo);
3305 }
3304 dev_warn(&adapter->pdev->dev, "MSIX Request IRQ failed - err %d\n", 3306 dev_warn(&adapter->pdev->dev, "MSIX Request IRQ failed - err %d\n",
3305 status); 3307 status);
3306 be_msix_disable(adapter); 3308 be_msix_disable(adapter);