diff mbox

rtc: cpcap: kfreeing devm allocated memory

Message ID 20170314075319.GB6111@mwanda
State Accepted
Headers show

Commit Message

Dan Carpenter March 14, 2017, 7:56 a.m. UTC
We shouldn't kfree(rtc) because is devm_ managed memory.  It leads to a
double free.

Fixes: dd3bf50b35e3 ("rtc: cpcap: new rtc driver")
Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com>

Comments

Sebastian Reichel March 15, 2017, 5:43 p.m. UTC | #1
Hi,

On Tue, Mar 14, 2017 at 10:56:30AM +0300, Dan Carpenter wrote:
> We shouldn't kfree(rtc) because is devm_ managed memory.  It leads to a
> double free.
> 
> Fixes: dd3bf50b35e3 ("rtc: cpcap: new rtc driver")
> Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com>
> 
> diff --git a/drivers/rtc/rtc-cpcap.c b/drivers/rtc/rtc-cpcap.c
> index 7c6a3c3167bd..5d163be98e9f 100644
> --- a/drivers/rtc/rtc-cpcap.c
> +++ b/drivers/rtc/rtc-cpcap.c
> @@ -266,10 +266,8 @@ static int cpcap_rtc_probe(struct platform_device *pdev)
>  	rtc->rtc_dev = devm_rtc_device_register(dev, "cpcap_rtc",
>  						&cpcap_rtc_ops, THIS_MODULE);
>  
> -	if (IS_ERR(rtc->rtc_dev)) {
> -		kfree(rtc);
> +	if (IS_ERR(rtc->rtc_dev))
>  		return PTR_ERR(rtc->rtc_dev);
> -	}
>  
>  	err = cpcap_get_vendor(dev, rtc->regmap, &rtc->vendor);
>  	if (err)

Acked-By: Sebastian Reichel <sre@kernel.org>

-- Sebastian
Alexandre Belloni March 16, 2017, 10:01 p.m. UTC | #2
On 14/03/2017 at 10:56:30 +0300, Dan Carpenter wrote:
> We shouldn't kfree(rtc) because is devm_ managed memory.  It leads to a
> double free.
> 
> Fixes: dd3bf50b35e3 ("rtc: cpcap: new rtc driver")
> Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com>
> 
Applied, thanks.
diff mbox

Patch

diff --git a/drivers/rtc/rtc-cpcap.c b/drivers/rtc/rtc-cpcap.c
index 7c6a3c3167bd..5d163be98e9f 100644
--- a/drivers/rtc/rtc-cpcap.c
+++ b/drivers/rtc/rtc-cpcap.c
@@ -266,10 +266,8 @@  static int cpcap_rtc_probe(struct platform_device *pdev)
 	rtc->rtc_dev = devm_rtc_device_register(dev, "cpcap_rtc",
 						&cpcap_rtc_ops, THIS_MODULE);
 
-	if (IS_ERR(rtc->rtc_dev)) {
-		kfree(rtc);
+	if (IS_ERR(rtc->rtc_dev))
 		return PTR_ERR(rtc->rtc_dev);
-	}
 
 	err = cpcap_get_vendor(dev, rtc->regmap, &rtc->vendor);
 	if (err)