OMAP: Fix Memory Leaks in Smartreflex driver
Subsystems (3)
PATCH 1/1 OMAP: Fix Memory Leaks in Smartreflex driver
This Patch frees all the dynamically allocated memory which couldn't have been released in some error hitting cases.
Signed-off-by Shweta Gulati <[email protected]>
Cc linux-arm-kernel at lists.infradead.org
--- arch/arm/mach-omap2/smartreflex.c | 18 ++++++++++++------ 1 files changed, 12 insertions(+), 6 deletions(-)
arch/arm/mach-omap2/smartreflex.c +12 -6
@@ -284,6 +284,7 @@ error:dev_err (&sr_info->pdev->dev,"%s: ERROR in registering" "interrupt handler. Smartreflex will" "not function as desired\n" , __func__); +kfree (name);kfree (sr_info);return ret; }
@@ -881,7 +882,7 @@ static int __init omap_sr_probe(struct platform_device *pdev) ret =sr_late_init (sr_info);if (ret) {pr_warning ("%s: Error in SR late init\n" , __func__); -return ret; + goto err_release_region; } }
@@ -892,14 +893,17 @@ static int __init omap_sr_probe(struct platform_device *pdev)* not try to create rest of the debugfs entries. */ vdd_dbg_dir =omap_voltage_get_dbgdir (sr_info->voltdm); -if (!vdd_dbg_dir) -return -EINVAL ; +if (!vdd_dbg_dir) { + ret = -EINVAL ; + goto err_release_region; + } dbg_dir =debugfs_create_dir ("smartreflex" , vdd_dbg_dir);if (IS_ERR (dbg_dir)) {dev_err (&pdev->dev,"%s: Unable to create debugfs directory\n" , __func__); -return PTR_ERR (dbg_dir); + ret =PTR_ERR (dbg_dir); + goto err_release_region; } (void) debugfs_create_file("autocomp", S_IRUGO | S_IWUSR, dbg_dir,
@@ -915,7 +919,8 @@ static int __init omap_sr_probe(struct platform_device *pdev)if (IS_ERR (nvalue_dir)) {dev_err (&pdev->dev,"%s: Unable to create debugfs directory" "for n-values\n" , __func__); -return PTR_ERR (nvalue_dir); + ret =PTR_ERR (nvalue_dir); + goto err_release_region; }omap_voltage_get_volttable (sr_info->voltdm, &volt_data);
@@ -924,7 +929,8 @@ static int __init omap_sr_probe(struct platform_device *pdev)" corresponding vdd vdd_%s. Cannot create debugfs" "entries for n-values\n" , __func__, sr_info->voltdm->name); -return -ENODATA ; + ret = -ENODATA ; + goto err_release_region; }for (i =0 ; i < sr_info->nvalue_count; i++) {
Signature · 1 line
1.7.0.4
PATCH 1/1 OMAP: Fix Memory Leaks in Smartreflex driver
Quoted 5 lines · Shweta Gulati
This Patch frees all the dynamically allocated memory which couldn't have been released in some error hitting cases.
Signed-off-by Shweta Gulati <[email protected]>Cc linux-arm-kernel at lists.infradead.org
Thanks, queuing as a fix for 2.6.38-rc (branch: for_2.6.38/pm-fixes)
Kevin
Quoted 66 lines
--- arch/arm/mach-omap2/smartreflex.c | 18 ++++++++++++------ 1 files changed, 12 insertions(+), 6 deletions(-)arch/arm/mach-omap2/smartreflex.c +12
-6@@ -284,6 +284,7 @@ error:dev_err (&sr_info->pdev->dev,"%s: ERROR in registering" "interrupt handler. Smartreflex will" "not function as desired\n" , __func__); +kfree (name);kfree (sr_info);return ret; }@@ -881,7 +882,7 @@ static int __init omap_sr_probe(struct platform_device *pdev) ret =sr_late_init (sr_info);if (ret) {pr_warning ("%s: Error in SR late init\n" , __func__); -return ret; + goto err_release_region; } }@@ -892,14 +893,17 @@ static int __init omap_sr_probe(struct platform_device *pdev)* not try to create rest of the debugfs entries. */ vdd_dbg_dir =omap_voltage_get_dbgdir (sr_info->voltdm); -if (!vdd_dbg_dir) -return -EINVAL ; +if (!vdd_dbg_dir) { + ret = -EINVAL ; + goto err_release_region; + } dbg_dir =debugfs_create_dir ("smartreflex" , vdd_dbg_dir);if (IS_ERR (dbg_dir)) {dev_err (&pdev->dev,"%s: Unable to create debugfs directory\n" , __func__); -return PTR_ERR (dbg_dir); + ret =PTR_ERR (dbg_dir); + goto err_release_region; } (void) debugfs_create_file("autocomp", S_IRUGO | S_IWUSR, dbg_dir,@@ -915,7 +919,8 @@ static int __init omap_sr_probe(struct platform_device *pdev)if (IS_ERR (nvalue_dir)) {dev_err (&pdev->dev,"%s: Unable to create debugfs directory" "for n-values\n" , __func__); -return PTR_ERR (nvalue_dir); + ret =PTR_ERR (nvalue_dir); + goto err_release_region; }omap_voltage_get_volttable (sr_info->voltdm, &volt_data);@@ -924,7 +929,8 @@ static int __init omap_sr_probe(struct platform_device *pdev)" corresponding vdd vdd_%s. Cannot create debugfs" "entries for n-values\n" , __func__, sr_info->voltdm->name); -return -ENODATA ; + ret = -ENODATA ; + goto err_release_region; }for (i =0 ; i < sr_info->nvalue_count; i++) {