From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754651AbbBTNcj (ORCPT ); Fri, 20 Feb 2015 08:32:39 -0500 Received: from mailout3.w1.samsung.com ([210.118.77.13]:57202 "EHLO mailout3.w1.samsung.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754232AbbBTNcg (ORCPT ); Fri, 20 Feb 2015 08:32:36 -0500 X-AuditID: cbfec7f5-b7fc86d0000066b7-0d-54e736dd5abe From: Krzysztof Kozlowski To: Sebastian Reichel , Dmitry Eremin-Solenikov , David Woodhouse , Milo Kim , linux-pm@vger.kernel.org, linux-kernel@vger.kernel.org Cc: Dmitry Artamonow , Marek Belisko , Krzysztof Kozlowski , stable@vger.kernel.org Subject: [RFT RESEND 1/4] power_supply: twl4030_madc: Check return value of power_supply_register Date: Fri, 20 Feb 2015 14:32:22 +0100 Message-id: <1424439145-16895-1-git-send-email-k.kozlowski@samsung.com> X-Mailer: git-send-email 1.9.1 X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFvrFJMWRmVeSWpSXmKPExsVy+t/xq7p3zZ6HGOz5K2Ix6cl7ZouJKycz W7x+YWhxedccNovPvUcYLba3HWWx+Ld0C5vF8l/rWCxO7y6xWLDxEaMDl8fOWXfZPda8P8Xs cezaHRaPzSu0PDat6mTz6NuyitHj+I3tTB6fN8kFcERx2aSk5mSWpRbp2yVwZZz9cI+l4AtP RduCOawNjD3cXYwcHBICJhKzp1l2MXICmWISF+6tZ+ti5OIQEljKKPHl4yxmCKePSWLDta9s IFVsAsYSm5cvAasSEbjOKHHl5TEmEIdZYBqjxNUnK8CqhAWSJd6f2c8EYrMIqErMf9PMDGLz CrhL9LZvZoPYJydx8thk1gmM3AsYGVYxiqaWJhcUJ6XnGukVJ+YWl+al6yXn525ihITX1x2M S49ZHWIU4GBU4uEVuPQsRIg1say4MvcQowQHs5IIr6fC8xAh3pTEyqrUovz4otKc1OJDjEwc nFINjNOYnDSfl2Tf5nkhwjm7kb27tZDxep+HooBv95xJnxOF1aYnb7+1+rqutWTlSc+Cic0u BtmPZfN29dpszTb+fNtVlsHFZc7VhZbuC5YU3v4xK7eh26Kp6vTTKc2O5mdOFXCuePUwW+Tn 3qzc0s+Pvd/W5Xo8YWl/uShuUQj38wmhi68cfB/VqsRSnJFoqMVcVJwIAGarUtUNAgAA Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org The return value of power_supply_register() call was not checked and even on error probe() function returned 0. If registering failed then during unbind the driver tried to unregister power supply which was not actually registered. This could lead to memory corruption because power_supply_unregister() unconditionally cleans up given power supply. Signed-off-by: Krzysztof Kozlowski Fixes: da0a00ebc239 ("power: Add twl4030_madc battery driver.") Cc: --- drivers/power/twl4030_madc_battery.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/drivers/power/twl4030_madc_battery.c b/drivers/power/twl4030_madc_battery.c index 7ef445a6cfa6..cf907609ec49 100644 --- a/drivers/power/twl4030_madc_battery.c +++ b/drivers/power/twl4030_madc_battery.c @@ -192,6 +192,7 @@ static int twl4030_madc_battery_probe(struct platform_device *pdev) { struct twl4030_madc_battery *twl4030_madc_bat; struct twl4030_madc_bat_platform_data *pdata = pdev->dev.platform_data; + int ret = 0; twl4030_madc_bat = kzalloc(sizeof(*twl4030_madc_bat), GFP_KERNEL); if (!twl4030_madc_bat) @@ -216,9 +217,11 @@ static int twl4030_madc_battery_probe(struct platform_device *pdev) twl4030_madc_bat->pdata = pdata; platform_set_drvdata(pdev, twl4030_madc_bat); - power_supply_register(&pdev->dev, &twl4030_madc_bat->psy); + ret = power_supply_register(&pdev->dev, &twl4030_madc_bat->psy); + if (ret < 0) + kfree(twl4030_madc_bat); - return 0; + return ret; } static int twl4030_madc_battery_remove(struct platform_device *pdev) -- 1.9.1