[PATCH] NetCP: Deletion of unnecessary checks before two function calls

Subsystems: networking drivers, the rest

STALE4278d

4 messages, 4 authors, 2015-02-05 · open the first message on its own page

[PATCH] NetCP: Deletion of unnecessary checks before two function calls

From: SF Markus Elfring <hidden>
Date: 2015-02-03 19:22:33

From: Markus Elfring <redacted>
Date: Tue, 3 Feb 2015 20:12:25 +0100

The functions cpsw_ale_destroy() and of_dev_put() test whether their argument
is NULL and then return immediately. Thus the test around the call
is not needed.

This issue was detected by using the Coccinelle software.

Signed-off-by: Markus Elfring <redacted>
---
 drivers/net/ethernet/ti/netcp_ethss.c | 6 ++----
 1 file changed, 2 insertions(+), 4 deletions(-)
diff --git a/drivers/net/ethernet/ti/netcp_ethss.c b/drivers/net/ethernet/ti/netcp_ethss.c
index fa1041a..cbd6dde 100644
--- a/drivers/net/ethernet/ti/netcp_ethss.c
+++ b/drivers/net/ethernet/ti/netcp_ethss.c
@@ -2010,12 +2010,10 @@ static int gbe_probe(struct netcp_device *netcp_device, struct device *dev,
 quit:
 	if (gbe_dev->hw_stats)
 		devm_kfree(dev, gbe_dev->hw_stats);
-	if (gbe_dev->ale)
-		cpsw_ale_destroy(gbe_dev->ale);
+	cpsw_ale_destroy(gbe_dev->ale);
 	if (gbe_dev->ss_regs)
 		devm_iounmap(dev, gbe_dev->ss_regs);
-	if (interfaces)
-		of_node_put(interfaces);
+	of_node_put(interfaces);
 	devm_kfree(dev, gbe_dev);
 	return ret;
 }
-- 
2.2.2

Re: [PATCH] NetCP: Deletion of unnecessary checks before two function calls

From: David Miller <davem@davemloft.net>
Date: 2015-02-05 04:30:09

From: SF Markus Elfring <redacted>
Date: Tue, 03 Feb 2015 20:22:23 +0100
From: Markus Elfring <redacted>
Date: Tue, 3 Feb 2015 20:12:25 +0100

The functions cpsw_ale_destroy() and of_dev_put() test whether their argument
is NULL and then return immediately. Thus the test around the call
is not needed.

This issue was detected by using the Coccinelle software.

Signed-off-by: Markus Elfring <redacted>
Applied.

Re: [PATCH] NetCP: Deletion of unnecessary checks before two function calls

From: Dan Carpenter <hidden>
Date: 2015-02-05 12:02:03

Hi Wingman,

There are some bugs in this error handling.

On Tue, Feb 03, 2015 at 08:22:23PM +0100, SF Markus Elfring wrote:
quoted hunk
diff --git a/drivers/net/ethernet/ti/netcp_ethss.c b/drivers/net/ethernet/ti/netcp_ethss.c
index fa1041a..cbd6dde 100644
--- a/drivers/net/ethernet/ti/netcp_ethss.c
+++ b/drivers/net/ethernet/ti/netcp_ethss.c
@@ -2010,12 +2010,10 @@ static int gbe_probe(struct netcp_device *netcp_device, struct device *dev,
 quit:
 	if (gbe_dev->hw_stats)
 		devm_kfree(dev, gbe_dev->hw_stats);
-	if (gbe_dev->ale)
-		cpsw_ale_destroy(gbe_dev->ale);
+	cpsw_ale_destroy(gbe_dev->ale);
 	if (gbe_dev->ss_regs)
 		devm_iounmap(dev, gbe_dev->ss_regs);
-	if (interfaces)
-		of_node_put(interfaces);
+	of_node_put(interfaces);
                    ^^^^^^^^^^
"interfaces" is sometimes unintialized in this code.  I don't know why
GCC doesn't catch this...  :(

This is a "one rrr bug", which is caused because you just have one error
label "quit" which handles all the error handling.  Please read my
Google+ comment on error handling.

https://plus.google.com/106378716002406849458/posts/dnanfhQ4mHQ
 	devm_kfree(dev, gbe_dev);
        ^^^^^^^^^^^^^^^^^^^^^^^^
This is not the right way to use the devm_ interface.  These things are
freed automatically on error or when we are done with them.  This driver
is double freeing pretty much everything.  Grep for devm_kfree() and
fix everything.

I don't know why kbuild didn't catch this...

regards
dan carpenter

RE: [PATCH] NetCP: Deletion of unnecessary checks before two function calls

From: Kwok, WingMan <hidden>
Date: 2015-02-05 15:51:06

Dan,

Thanks.  We'll look into it and send a patch soon.

Regards,
WingMan
-----Original Message-----
From: Dan Carpenter [mailto:dan.carpenter@oracle.com]
Sent: Thursday, February 05, 2015 7:02 AM
To: Kwok, WingMan
Cc: SF Markus Elfring; Karicheri, Muralidharan; Kwok, WingMan;
netdev@vger.kernel.org; LKML; kernel-janitors@vger.kernel.org; Julia Lawall
Subject: Re: [PATCH] NetCP: Deletion of unnecessary checks before two
function calls

Hi Wingman,

There are some bugs in this error handling.

On Tue, Feb 03, 2015 at 08:22:23PM +0100, SF Markus Elfring wrote:
quoted
diff --git a/drivers/net/ethernet/ti/netcp_ethss.c
b/drivers/net/ethernet/ti/netcp_ethss.c
quoted
index fa1041a..cbd6dde 100644
--- a/drivers/net/ethernet/ti/netcp_ethss.c
+++ b/drivers/net/ethernet/ti/netcp_ethss.c
@@ -2010,12 +2010,10 @@ static int gbe_probe(struct netcp_device
*netcp_device, struct device *dev,
quoted
 quit:
 	if (gbe_dev->hw_stats)
 		devm_kfree(dev, gbe_dev->hw_stats);
-	if (gbe_dev->ale)
-		cpsw_ale_destroy(gbe_dev->ale);
+	cpsw_ale_destroy(gbe_dev->ale);
 	if (gbe_dev->ss_regs)
 		devm_iounmap(dev, gbe_dev->ss_regs);
-	if (interfaces)
-		of_node_put(interfaces);
+	of_node_put(interfaces);
                    ^^^^^^^^^^
"interfaces" is sometimes unintialized in this code.  I don't know why
GCC doesn't catch this...  :(

This is a "one rrr bug", which is caused because you just have one error
label "quit" which handles all the error handling.  Please read my
Google+ comment on error handling.

https://plus.google.com/106378716002406849458/posts/dnanfhQ4mHQ
quoted
 	devm_kfree(dev, gbe_dev);
        ^^^^^^^^^^^^^^^^^^^^^^^^
This is not the right way to use the devm_ interface.  These things are
freed automatically on error or when we are done with them.  This driver
is double freeing pretty much everything.  Grep for devm_kfree() and
fix everything.

I don't know why kbuild didn't catch this...

regards
dan carpenter

Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help