gpio/omap: fix possible memory leak in omap2_gpio_dev_init()

Author: Wei Yongjun <>

pdata and pdata->regs have been allocated in this function and
should be freed before leaving it, and in the other error handling
cases too.

spatch with a semantic match is used to found this problem.

Signed-off-by: Wei Yongjun 
Acked-by: Kevin Hilman 
Signed-off-by: Tony Lindgren 
 arch/arm/mach-omap2/gpio.c | 2 ++
 1 file changed, 2 insertions(+)
diff --git a/arch/arm/mach-omap2/gpio.c b/arch/arm/mach-omap2/gpio.c
index 9ad7d48..fe626e90 100644
--- a/arch/arm/mach-omap2/gpio.c
+++ b/arch/arm/mach-omap2/gpio.c
@@ -60,6 +60,7 @@ static int __init omap2_gpio_dev_init(struct omap_hwmod *oh, void *unused)
 	pdata->regs = kzalloc(sizeof(struct omap_gpio_reg_offs), GFP_KERNEL);
 	if (!pdata->regs) {
 		pr_err("gpio%d: Memory allocation failed\n", id);
+		kfree(pdata);
 		return -ENOMEM;
@@ -121,6 +122,7 @@ static int __init omap2_gpio_dev_init(struct omap_hwmod *oh, void *unused)
 		WARN(1, "Invalid gpio bank_type\n");
+		kfree(pdata->regs);
 		return -EINVAL;