cpufreq: qcom: fix memory leak in error path
commit 9f42cf54403a42cb092636804d2628d8ecf71e75 upstream.
If for some reason the speedbin length is incorrect, then there is a
memory leak in the error path because we never free the speedbin buffer.
This commit fixes the error path to always free the speedbin buffer.
Cc: v5.7+ <stable@vger.kernel.org> # v5.7+
Fixes: a8811ec764
("cpufreq: qcom: Add support for krait based socs")
Signed-off-by: Fabien Parent <fabien.parent@linaro.org>
Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:

committed by
Greg Kroah-Hartman

parent
303d0f7614
commit
e55feb31df
@@ -215,6 +215,7 @@ static int qcom_cpufreq_krait_name_version(struct device *cpu_dev,
|
|||||||
int speed = 0, pvs = 0, pvs_ver = 0;
|
int speed = 0, pvs = 0, pvs_ver = 0;
|
||||||
u8 *speedbin;
|
u8 *speedbin;
|
||||||
size_t len;
|
size_t len;
|
||||||
|
int ret = 0;
|
||||||
|
|
||||||
speedbin = nvmem_cell_read(speedbin_nvmem, &len);
|
speedbin = nvmem_cell_read(speedbin_nvmem, &len);
|
||||||
|
|
||||||
@@ -232,7 +233,8 @@ static int qcom_cpufreq_krait_name_version(struct device *cpu_dev,
|
|||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
dev_err(cpu_dev, "Unable to read nvmem data. Defaulting to 0!\n");
|
dev_err(cpu_dev, "Unable to read nvmem data. Defaulting to 0!\n");
|
||||||
return -ENODEV;
|
ret = -ENODEV;
|
||||||
|
goto len_error;
|
||||||
}
|
}
|
||||||
|
|
||||||
snprintf(*pvs_name, sizeof("speedXX-pvsXX-vXX"), "speed%d-pvs%d-v%d",
|
snprintf(*pvs_name, sizeof("speedXX-pvsXX-vXX"), "speed%d-pvs%d-v%d",
|
||||||
@@ -240,8 +242,9 @@ static int qcom_cpufreq_krait_name_version(struct device *cpu_dev,
|
|||||||
|
|
||||||
drv->versions = (1 << speed);
|
drv->versions = (1 << speed);
|
||||||
|
|
||||||
|
len_error:
|
||||||
kfree(speedbin);
|
kfree(speedbin);
|
||||||
return 0;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
static const struct qcom_cpufreq_match_data match_data_kryo = {
|
static const struct qcom_cpufreq_match_data match_data_kryo = {
|
||||||
|
Reference in New Issue
Block a user