diff options
author | Kunwu Chan <chentao@kylinos.cn> | 2023-11-22 14:46:36 +0800 |
---|---|---|
committer | Shawn Guo <shawnguo@kernel.org> | 2023-12-06 13:24:26 +0800 |
commit | 1c2b1049af3f86545fcc5fae0fc725fb64b3a09e (patch) | |
tree | 98344b1e3c77dcd1a405501462e389ee1a1047d5 /arch/arm | |
parent | 8ae06f1366390972fdcce0f0cee3cac0f63b3209 (diff) | |
download | linux-stable-1c2b1049af3f86545fcc5fae0fc725fb64b3a09e.tar.gz linux-stable-1c2b1049af3f86545fcc5fae0fc725fb64b3a09e.tar.bz2 linux-stable-1c2b1049af3f86545fcc5fae0fc725fb64b3a09e.zip |
ARM: imx: Check return value of devm_kasprintf in imx_mmdc_perf_init
devm_kasprintf() returns a pointer to dynamically allocated memory
which can be NULL upon failure. Ensure the allocation was successful
by checking the pointer validity.
Release the id allocated in 'mmdc_pmu_init' when 'devm_kasprintf'
return NULL
Suggested-by: Ahmad Fatoum <a.fatoum@pengutronix.de>
Fixes: e76bdfd7403a ("ARM: imx: Added perf functionality to mmdc driver")
Signed-off-by: Kunwu Chan <chentao@kylinos.cn>
Signed-off-by: Shawn Guo <shawnguo@kernel.org>
Diffstat (limited to 'arch/arm')
-rw-r--r-- | arch/arm/mach-imx/mmdc.c | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/arch/arm/mach-imx/mmdc.c b/arch/arm/mach-imx/mmdc.c index 2157493b78a9..df69af932375 100644 --- a/arch/arm/mach-imx/mmdc.c +++ b/arch/arm/mach-imx/mmdc.c @@ -501,6 +501,10 @@ static int imx_mmdc_perf_init(struct platform_device *pdev, void __iomem *mmdc_b name = devm_kasprintf(&pdev->dev, GFP_KERNEL, "mmdc%d", ret); + if (!name) { + ret = -ENOMEM; + goto pmu_release_id; + } pmu_mmdc->mmdc_ipg_clk = mmdc_ipg_clk; pmu_mmdc->devtype_data = (struct fsl_mmdc_devtype_data *)of_id->data; @@ -523,9 +527,10 @@ static int imx_mmdc_perf_init(struct platform_device *pdev, void __iomem *mmdc_b pmu_register_err: pr_warn("MMDC Perf PMU failed (%d), disabled\n", ret); - ida_simple_remove(&mmdc_ida, pmu_mmdc->id); cpuhp_state_remove_instance_nocalls(cpuhp_mmdc_state, &pmu_mmdc->node); hrtimer_cancel(&pmu_mmdc->hrtimer); +pmu_release_id: + ida_simple_remove(&mmdc_ida, pmu_mmdc->id); pmu_free: kfree(pmu_mmdc); return ret; |