linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [patch] gcov: cleanup an allocation in new_node()
@ 2012-09-11 11:13 Dan Carpenter
  2012-09-13 12:43 ` Peter Oberparleiter
  0 siblings, 1 reply; 4+ messages in thread
From: Dan Carpenter @ 2012-09-11 11:13 UTC (permalink / raw)
  To: linux-kernel, Peter Oberparleiter; +Cc: kernel-janitors

1) kcalloc(1, ...) can be replaced with kzalloc().
2) There was a small leak if the debugfs_create_dir() fails.
3) I removed a pr_warning("out of memory\n") because kmalloc() already
   prints a more useful failure message in the unlikely case of an
   allocation failure.

Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com>

diff --git a/kernel/gcov/fs.c b/kernel/gcov/fs.c
index 9bd0934..132168f 100644
--- a/kernel/gcov/fs.c
+++ b/kernel/gcov/fs.c
@@ -437,7 +437,7 @@ static struct gcov_node *new_node(struct gcov_node *parent,
 	if (!node)
 		goto err_nomem;
 	if (info) {
-		node->loaded_info = kcalloc(1, sizeof(struct gcov_info *),
+		node->loaded_info = kzalloc(sizeof(struct gcov_info *),
 					   GFP_KERNEL);
 		if (!node->loaded_info)
 			goto err_nomem;
@@ -451,8 +451,7 @@ static struct gcov_node *new_node(struct gcov_node *parent,
 		node->dentry = debugfs_create_dir(node->name, parent->dentry);
 	if (!node->dentry) {
 		pr_warning("could not create file\n");
-		kfree(node);
-		return NULL;
+		goto err_info;
 	}
 	if (info)
 		add_links(node, parent->dentry);
@@ -461,9 +460,11 @@ static struct gcov_node *new_node(struct gcov_node *parent,
 
 	return node;
 
+err_info:
+	if (info)
+		kfree(node->loaded_info);
 err_nomem:
 	kfree(node);
-	pr_warning("out of memory\n");
 	return NULL;
 }
 

^ permalink raw reply related	[flat|nested] 4+ messages in thread

* Re: [patch] gcov: cleanup an allocation in new_node()
  2012-09-11 11:13 [patch] gcov: cleanup an allocation in new_node() Dan Carpenter
@ 2012-09-13 12:43 ` Peter Oberparleiter
  2012-09-14  6:52   ` [patch v2] gcov: add a kfree() on error to new_node() Dan Carpenter
  0 siblings, 1 reply; 4+ messages in thread
From: Peter Oberparleiter @ 2012-09-13 12:43 UTC (permalink / raw)
  To: Dan Carpenter; +Cc: linux-kernel, kernel-janitors

On 11.09.2012 13:13, Dan Carpenter wrote:
> 1) kcalloc(1, ...) can be replaced with kzalloc().
> 2) There was a small leak if the debugfs_create_dir() fails.
> 3) I removed a pr_warning("out of memory\n") because kmalloc() already
>     prints a more useful failure message in the unlikely case of an
>     allocation failure.
>
> Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com>
>
> diff --git a/kernel/gcov/fs.c b/kernel/gcov/fs.c
> index 9bd0934..132168f 100644
> --- a/kernel/gcov/fs.c
> +++ b/kernel/gcov/fs.c
> @@ -437,7 +437,7 @@ static struct gcov_node *new_node(struct gcov_node *parent,
>   	if (!node)
>   		goto err_nomem;
>   	if (info) {
> -		node->loaded_info = kcalloc(1, sizeof(struct gcov_info *),
> +		node->loaded_info = kzalloc(sizeof(struct gcov_info *),
>   					   GFP_KERNEL);

I'd like to keep using kcalloc here since node->loaded_info is an array.

>   		if (!node->loaded_info)
>   			goto err_nomem;
> @@ -451,8 +451,7 @@ static struct gcov_node *new_node(struct gcov_node *parent,
>   		node->dentry = debugfs_create_dir(node->name, parent->dentry);
>   	if (!node->dentry) {
>   		pr_warning("could not create file\n");
> -		kfree(node);
> -		return NULL;
> +		goto err_info;

I agree that this is a potential memory leak - good find!

>   	}
>   	if (info)
>   		add_links(node, parent->dentry);
> @@ -461,9 +460,11 @@ static struct gcov_node *new_node(struct gcov_node *parent,
>
>   	return node;
>
> +err_info:
> +	if (info)
> +		kfree(node->loaded_info);

The 'if' here is not necessary: node->loaded_info is either zero (kfree 
tolerates NULL) or requires freeing. With the removal of the pr_warning 
below, the additional kfree can also be added to err_nomem (no need for 
another label) though then it should probably also be renamed.

>   err_nomem:
>   	kfree(node);
> -	pr_warning("out of memory\n");
>   	return NULL;
>   }
>
>

Regards,
   Peter Oberparleiter

-- 
Peter Oberparleiter
Linux on System z Development - IBM Germany


^ permalink raw reply	[flat|nested] 4+ messages in thread

* [patch v2] gcov: add a kfree() on error to new_node()
  2012-09-13 12:43 ` Peter Oberparleiter
@ 2012-09-14  6:52   ` Dan Carpenter
  2012-09-17  7:58     ` Peter Oberparleiter
  0 siblings, 1 reply; 4+ messages in thread
From: Dan Carpenter @ 2012-09-14  6:52 UTC (permalink / raw)
  To: Peter Oberparleiter; +Cc: linux-kernel, kernel-janitors

We should free "node->loaded_info" on this error path.  We'd never care
in real life but it makes the static checkers happy.

Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com>
---
v2: some style changes.

diff --git a/kernel/gcov/fs.c b/kernel/gcov/fs.c
index 9bd0934..7ba47f7 100644
--- a/kernel/gcov/fs.c
+++ b/kernel/gcov/fs.c
@@ -451,8 +451,7 @@ static struct gcov_node *new_node(struct gcov_node *parent,
 		node->dentry = debugfs_create_dir(node->name, parent->dentry);
 	if (!node->dentry) {
 		pr_warning("could not create file\n");
-		kfree(node);
-		return NULL;
+		goto err_info;
 	}
 	if (info)
 		add_links(node, parent->dentry);
@@ -461,6 +460,8 @@ static struct gcov_node *new_node(struct gcov_node *parent,
 
 	return node;
 
+err_info:
+	kfree(node->loaded_info);
 err_nomem:
 	kfree(node);
 	pr_warning("out of memory\n");

^ permalink raw reply related	[flat|nested] 4+ messages in thread

* Re: [patch v2] gcov: add a kfree() on error to new_node()
  2012-09-14  6:52   ` [patch v2] gcov: add a kfree() on error to new_node() Dan Carpenter
@ 2012-09-17  7:58     ` Peter Oberparleiter
  0 siblings, 0 replies; 4+ messages in thread
From: Peter Oberparleiter @ 2012-09-17  7:58 UTC (permalink / raw)
  To: Dan Carpenter; +Cc: linux-kernel, kernel-janitors, Andrew Morton

On 14.09.2012 08:52, Dan Carpenter wrote:
> We should free "node->loaded_info" on this error path.  We'd never care
> in real life but it makes the static checkers happy.
>
> Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com>
> ---
> v2: some style changes.
>

Signed-off-by: Peter Oberparleiter <oberpar@linux.vnet.ibm.com>
Reviewed-by: Peter Oberparleiter <oberpar@linux.vnet.ibm.com>

Thanks for sending this patch.

Andrew, since there is no tree for gcov patches, could you queue this 
for upstream inclusion?


Regards,
   Peter Oberparleiter

---
We should free "node->loaded_info" on this error path.  We'd never care
in real life but it makes the static checkers happy.

Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com>
Signed-off-by: Peter Oberparleiter <oberpar@linux.vnet.ibm.com>
Reviewed-by: Peter Oberparleiter <oberpar@linux.vnet.ibm.com>
---
v2: some style changes.

diff --git a/kernel/gcov/fs.c b/kernel/gcov/fs.c
index 9bd0934..7ba47f7 100644
--- a/kernel/gcov/fs.c
+++ b/kernel/gcov/fs.c
@@ -451,8 +451,7 @@ static struct gcov_node *new_node(struct gcov_node 
*parent,
  		node->dentry = debugfs_create_dir(node->name, parent->dentry);
  	if (!node->dentry) {
  		pr_warning("could not create file\n");
-		kfree(node);
-		return NULL;
+		goto err_info;
  	}
  	if (info)
  		add_links(node, parent->dentry);
@@ -461,6 +460,8 @@ static struct gcov_node *new_node(struct gcov_node 
*parent,

  	return node;

+err_info:
+	kfree(node->loaded_info);
  err_nomem:
  	kfree(node);
  	pr_warning("out of memory\n");


^ permalink raw reply related	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2012-09-17  7:58 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2012-09-11 11:13 [patch] gcov: cleanup an allocation in new_node() Dan Carpenter
2012-09-13 12:43 ` Peter Oberparleiter
2012-09-14  6:52   ` [patch v2] gcov: add a kfree() on error to new_node() Dan Carpenter
2012-09-17  7:58     ` Peter Oberparleiter

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).