gcov: cleanup an allocation in new_node()
Subsystems (2)
PATCH 1/1 gcov: cleanup an allocation in new_node()
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.
kernel/gcov/fs.c +5 -4
@@ -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 ; }
Quoted 13 lines · Dan Carpenter
1)
kcalloc(1, ...)can be replaced withkzalloc().
2) There was a small leak if thedebugfs_create_dir()fails.
3) I removed apr_warning("out of memory\n")becausekmalloc()already prints a more useful failure message in the unlikely case of an allocation failure.Signed-off-by Dan Carpenter <[email protected]>kernel/gcov/fs.c +0
-0
kernel/gcov/fs.c static struct gcov_node *new_node(struct gcov_node *parent, · line 441
Quoted 6 lines
kernel/gcov/fs.c +1
-1@@ -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.
kernel/gcov/fs.c static struct gcov_node *new_node(struct gcov_node *parent, · line 454
Quoted 9 lines
kernel/gcov/fs.c +1
-2if (!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!
kernel/gcov/fs.c static struct gcov_node *new_node(struct gcov_node *parent, · line 465
Quoted 10 lines
kernel/gcov/fs.c +3
-0}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.
kernel/gcov/fs.c static struct gcov_node *new_node(struct gcov_node *parent, · line 470
Quoted 7 lines
kernel/gcov/fs.c +0
-1err_nomem:kfree (node); -pr_warning ("out of memory\n" );return NULL ; }
Regards,
Peter Oberparleiter
Signature · 2 lines
Peter Oberparleiter Linux on System z Development - IBM Germany
PATCH v2 1/1 gcov: add a kfree() on error to new_node()
We should free "node->loaded_info" on this error path. We'd never care in real life but it makes the static checkers happy.
---
v2: some style changes.
kernel/gcov/fs.c +3 -2
@@ -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" );
Re: [patch v2] gcov: add a kfree() on error to new_node()
Quoted 7 lines · Dan Carpenter
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 <[email protected]>---
v2: some style changes.
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.
---
v2: some style changes.
kernel/gcov/fs.c +0 -0
@@ -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");