mlx4: Fix access to freed memory
authorVitaliy Gusev <vgusev@openvz.org>
Wed, 16 Sep 2009 07:00:21 +0000 (00:00 -0700)
committerDavid S. Miller <davem@davemloft.net>
Wed, 16 Sep 2009 07:00:21 +0000 (00:00 -0700)
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>
drivers/net/mlx4/catas.c

index aa9674b7f19ce5f8f980da832f7e9e49746c2733..f599294fa8abbe0f7195fb8a7e6b539a60faf618 100644 (file)
@@ -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");
+               }
        }
 }