summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVitaliy Gusev <vgusev@openvz.org>2009-09-16 00:00:21 -0700
committerDavid S. Miller <davem@davemloft.net>2009-09-16 00:00:21 -0700
commit634354d753898f9d9d146bd47628a1ef27f7dc98 (patch)
tree741559fce26417a710bd04e7a704e635d7864e53
parent657e9649e745b06675aa5063c84430986cdc3afa (diff)
downloadlinux-3.10-634354d753898f9d9d146bd47628a1ef27f7dc98.tar.gz
linux-3.10-634354d753898f9d9d146bd47628a1ef27f7dc98.tar.bz2
linux-3.10-634354d753898f9d9d146bd47628a1ef27f7dc98.zip
mlx4: Fix access to freed memory
catas_reset() uses pointer to mlx4_priv, but mlx4_priv is not valid after call mlx4_restart_one(). Signed-off-by: Vitaliy Gusev <vgusev@openvz.org> Acked-by: Roland Dreier <rolandd@cisco.com> Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r--drivers/net/mlx4/catas.c11
1 files changed, 8 insertions, 3 deletions
diff --git a/drivers/net/mlx4/catas.c b/drivers/net/mlx4/catas.c
index aa9674b7f19..f599294fa8a 100644
--- a/drivers/net/mlx4/catas.c
+++ b/drivers/net/mlx4/catas.c
@@ -96,12 +96,17 @@ static void catas_reset(struct work_struct *work)
spin_unlock_irq(&catas_lock);
list_for_each_entry_safe(priv, tmppriv, &tlist, catas_err.list) {
+ struct pci_dev *pdev = priv->dev.pdev;
+
ret = mlx4_restart_one(priv->dev.pdev);
- dev = &priv->dev;
+ /* 'priv' now is not valid */
if (ret)
- mlx4_err(dev, "Reset failed (%d)\n", ret);
- else
+ printk(KERN_ERR "mlx4 %s: Reset failed (%d)\n",
+ pci_name(pdev), ret);
+ else {
+ dev = pci_get_drvdata(pdev);
mlx4_dbg(dev, "Reset succeeded\n");
+ }
}
}