From e420637b81f78d0fbacf539bdb1b341eba602aea Mon Sep 17 00:00:00 2001 From: Dan Carpenter Date: Wed, 20 May 2020 15:00:19 +0300 Subject: w1_therm: Free the correct variable The problem is that we change "p_args" to point to the middle of the string so when we free it at the end of the function it's not freeing the same pointer that we originally allocated. Fixes: e2c94d6f5720 ("w1_therm: adding alarm sysfs entry") Signed-off-by: Dan Carpenter Link: https://lore.kernel.org/r/20200520120019.GA172354@mwanda Signed-off-by: Greg Kroah-Hartman --- drivers/w1/slaves/w1_therm.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) (limited to 'drivers/w1') diff --git a/drivers/w1/slaves/w1_therm.c b/drivers/w1/slaves/w1_therm.c index cc4b88056b33..a6c85e486671 100644 --- a/drivers/w1/slaves/w1_therm.c +++ b/drivers/w1/slaves/w1_therm.c @@ -1526,8 +1526,9 @@ static ssize_t alarms_store(struct device *device, int temp, ret = -EINVAL; char *token = NULL; s8 tl, th, tt; /* 1 byte per value + temp ring order */ - char *p_args = kmalloc(size, GFP_KERNEL); + char *p_args, *orig; + p_args = orig = kmalloc(size, GFP_KERNEL); /* Safe string copys as buf is const */ if (!p_args) { dev_warn(device, @@ -1611,7 +1612,7 @@ static ssize_t alarms_store(struct device *device, free_m: /* free allocated memory */ - kfree(p_args); + kfree(orig); return size; } -- cgit v1.2.3-59-g8ed1b