Skip to content

Commit

Permalink
staging: altera-stapl: Fix memory leak of altera_init()
Browse files Browse the repository at this point in the history
In case kzalloc() fails the second or third time
we should free the previous allocated resources.
In order to keep one return point and to keep the cleanup code to one
place, some reordering was necessary.

Also while at it, removed the *sizeof(char) - to quote Linus:
"" Also removed the silly "* sizeof(u8)".  If that isn't 1, we have way
   deeper problems than a simple multiplication can fix. """

Reported-by: Andre Bartke <andre.bartke@gmail.com>
Signed-off-by: Peter Huewe <peterhuewe@gmx.de>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
  • Loading branch information
Peter Huewe authored and Greg Kroah-Hartman committed Jun 28, 2011
1 parent 8ded351 commit c0777d2
Showing 1 changed file with 21 additions and 12 deletions.
33 changes: 21 additions & 12 deletions drivers/staging/altera-stapl/altera.c
Original file line number Diff line number Diff line change
Expand Up @@ -2430,16 +2430,23 @@ int altera_init(struct altera_config *config, const struct firmware *fw)
int index = 0;
s32 offset = 0L;
s32 error_address = 0L;
int retval = 0;

key = kzalloc(33 * sizeof(char), GFP_KERNEL);
if (!key)
return -ENOMEM;
value = kzalloc(257 * sizeof(char), GFP_KERNEL);
if (!value)
return -ENOMEM;
key = kzalloc(33, GFP_KERNEL);
if (!key) {
retval = -ENOMEM;
goto out;
}
value = kzalloc(257, GFP_KERNEL);
if (!value) {
retval = -ENOMEM;
goto free_key;
}
astate = kzalloc(sizeof(struct altera_state), GFP_KERNEL);
if (!astate)
return -ENOMEM;
if (!astate) {
retval = -ENOMEM;
goto free_value;
}

astate->config = config;
if (!astate->config->jtag_io) {
Expand Down Expand Up @@ -2518,10 +2525,12 @@ int altera_init(struct altera_config *config, const struct firmware *fw)
} else if (exec_result)
printk(KERN_ERR "%s: error %d\n", __func__, exec_result);

kfree(key);
kfree(value);
kfree(astate);

return 0;
free_value:
kfree(value);
free_key:
kfree(key);
out:
return retval;
}
EXPORT_SYMBOL(altera_init);

0 comments on commit c0777d2

Please sign in to comment.