gianfar: free/iounmap memory after an error in mii bus initialization
authorAndy Fleming <afleming@freescale.com>
Mon, 22 Sep 2008 21:10:25 +0000 (14:10 -0700)
committerJeff Garzik <jgarzik@redhat.com>
Thu, 25 Sep 2008 00:49:02 +0000 (20:49 -0400)
Recent changes to MII bus initialization code added exit points which
didn't free or iounmap the bus before returning.

Addresses http://bugzilla.kernel.org/show_bug.cgi?id=11372.

Signed-off-by: Andy Fleming <afleming@freescale.com>
Reported-by: Daniel Marjamki <danielm77@spray.se>
Cc: Jeff Garzik <jeff@garzik.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Jeff Garzik <jgarzik@redhat.com>
drivers/net/gianfar_mii.c

index 906aba2757e79b114fcc597ba1985305596d712c..678f48c691194b6cb8852b6fdf3a7c6688db606f 100644 (file)
@@ -211,19 +211,21 @@ static int gfar_mdio_probe(struct device *dev)
        gfar_write(&enet_regs->tbipa, 0);
        for (i = PHY_MAX_ADDR; i > 0; i--) {
                u32 phy_id;
-               int r;
 
-               r = get_phy_id(new_bus, i, &phy_id);
-               if (r)
-                       return r;
+               err = get_phy_id(new_bus, i, &phy_id);
+               if (err)
+                       goto bus_register_fail;
 
                if (phy_id == 0xffffffff)
                        break;
        }
 
        /* The bus is full.  We don't support using 31 PHYs, sorry */
-       if (i == 0)
-               return -EBUSY;
+       if (i == 0) {
+               err = -EBUSY;
+
+               goto bus_register_fail;
+       }
 
        gfar_write(&enet_regs->tbipa, i);