From patchwork Tue Aug 24 16:53:33 2010 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dan Carpenter X-Patchwork-Id: 62614 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id AB46FB70CC for ; Wed, 25 Aug 2010 02:54:05 +1000 (EST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755761Ab0HXQyA (ORCPT ); Tue, 24 Aug 2010 12:54:00 -0400 Received: from mail-ey0-f174.google.com ([209.85.215.174]:56703 "EHLO mail-ey0-f174.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752143Ab0HXQx7 (ORCPT ); Tue, 24 Aug 2010 12:53:59 -0400 Received: by eyg5 with SMTP id 5so3508013eyg.19 for ; Tue, 24 Aug 2010 09:53:57 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:received:received:date:from:to:cc:subject :message-id:mime-version:content-type:content-disposition:user-agent; bh=zjNj/SgsT4uAO3oZZEwbZBb+skwqkTnwyHqErjtjUHg=; b=XyzHVQ6vg/bMJNoFYV74w6EMavJAphL6nA/6VD1SICud0zjPMQvyuVsVLUcNWhYyhb GLH6h1XRwbBTDieRNPW/5wh80OILa2ZZr3GM1/nTB6O25LsDyRj0zUkaaJFSk3K2AmXk Jos8ru9mV1Dy6T4m7Dc9OyIdy4eM5BCYMwseQ= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=date:from:to:cc:subject:message-id:mime-version:content-type :content-disposition:user-agent; b=w3u6+ri3etxGV1XKHvF+Lvo9rX8DweQ8xwFYJVf8/+0PD5sHAq0DI0uwg1I1yWk8II wKjjb7DmhCfG2OAGi7hxJZQ03701PM7t5aQAOVrbz2/ZR0AwxkyNOiJyjBWjlVfeG+yl Qxyyl0aTuQF6GcnWNvo9GLHwdIy9IZ8/ccOoM= Received: by 10.216.6.195 with SMTP id 45mr1011181wen.86.1282668837391; Tue, 24 Aug 2010 09:53:57 -0700 (PDT) Received: from bicker ([41.205.146.22]) by mx.google.com with ESMTPS id o84sm210177wej.13.2010.08.24.09.53.47 (version=TLSv1/SSLv3 cipher=RC4-MD5); Tue, 24 Aug 2010 09:53:56 -0700 (PDT) Date: Tue, 24 Aug 2010 18:53:33 +0200 From: Dan Carpenter To: Sachin Sanap Cc: "David S. Miller" , netdev@vger.kernel.org, kernel-janitors@vger.kernel.org Subject: [patch 2/4] pxa168_eth: fix error handling in prope Message-ID: <20100824165333.GI29330@bicker> MIME-Version: 1.0 Content-Disposition: inline User-Agent: Mutt/1.5.18 (2008-05-17) Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org A couple issues here: * Some resources weren't released. * If alloc_etherdev() failed it would have caused a NULL dereference because "pep" would be null when we checked "if (pep->clk)". * Also it's better to propagate the error codes from mdiobus_register() instead of just returning -ENOMEM. Signed-off-by: Dan Carpenter --- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html diff --git a/drivers/net/pxa168_eth.c b/drivers/net/pxa168_eth.c index 857a681..302fb48 100644 --- a/drivers/net/pxa168_eth.c +++ b/drivers/net/pxa168_eth.c @@ -1497,7 +1497,7 @@ static int pxa168_eth_probe(struct platform_device *pdev) dev = alloc_etherdev(sizeof(struct pxa168_eth_private)); if (!dev) { err = -ENOMEM; - goto out; + goto err_clk; } platform_set_drvdata(pdev, dev); @@ -1507,12 +1507,12 @@ static int pxa168_eth_probe(struct platform_device *pdev) res = platform_get_resource(pdev, IORESOURCE_MEM, 0); if (res == NULL) { err = -ENODEV; - goto out; + goto err_netdev; } pep->base = ioremap(res->start, res->end - res->start + 1); if (pep->base == NULL) { err = -ENOMEM; - goto out; + goto err_netdev; } res = platform_get_resource(pdev, IORESOURCE_IRQ, 0); BUG_ON(!res); @@ -1549,7 +1549,7 @@ static int pxa168_eth_probe(struct platform_device *pdev) pep->smi_bus = mdiobus_alloc(); if (pep->smi_bus == NULL) { err = -ENOMEM; - goto out; + goto err_base; } pep->smi_bus->priv = pep; pep->smi_bus->name = "pxa168_eth smi"; @@ -1558,31 +1558,31 @@ static int pxa168_eth_probe(struct platform_device *pdev) snprintf(pep->smi_bus->id, MII_BUS_ID_SIZE, "%d", pdev->id); pep->smi_bus->parent = &pdev->dev; pep->smi_bus->phy_mask = 0xffffffff; - if (mdiobus_register(pep->smi_bus) < 0) { - err = -ENOMEM; - goto out; - } + err = mdiobus_register(pep->smi_bus); + if (err) + goto err_free_mdio; + pxa168_init_hw(pep); err = ethernet_phy_setup(dev); if (err) - goto out; + goto err_mdiobus; SET_NETDEV_DEV(dev, &pdev->dev); err = register_netdev(dev); if (err) - goto out; + goto err_mdiobus; return 0; -out: - if (pep->clk) { - clk_disable(pep->clk); - clk_put(pep->clk); - pep->clk = NULL; - } - if (pep->base) { - iounmap(pep->base); - pep->base = NULL; - } - if (dev) - free_netdev(dev); + +err_mdiobus: + mdiobus_unregister(pep->smi_bus); +err_free_mdio: + mdiobus_free(pep->smi_bus); +err_base: + iounmap(pep->base); +err_netdev: + free_netdev(dev); +err_clk: + clk_disable(clk); + clk_put(clk); return err; }