| From 14bec11ab6082b254ea388023f89ed3dc88d37d8 Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Fri, 25 Mar 2022 19:49:41 +0800 |
| Subject: MIPS: lantiq: check the return value of kzalloc() |
| |
| From: Xiaoke Wang <xkernel.wang@foxmail.com> |
| |
| [ Upstream commit 34123208bbcc8c884a0489f543a23fe9eebb5514 ] |
| |
| kzalloc() is a memory allocation function which can return NULL when |
| some internal memory errors happen. So it is better to check the |
| return value of it to prevent potential wrong memory access or |
| memory leak. |
| |
| Signed-off-by: Xiaoke Wang <xkernel.wang@foxmail.com> |
| Signed-off-by: Thomas Bogendoerfer <tsbogend@alpha.franken.de> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| arch/mips/lantiq/falcon/sysctrl.c | 2 ++ |
| arch/mips/lantiq/xway/gptu.c | 2 ++ |
| arch/mips/lantiq/xway/sysctrl.c | 46 ++++++++++++++++++++----------- |
| 3 files changed, 34 insertions(+), 16 deletions(-) |
| |
| diff --git a/arch/mips/lantiq/falcon/sysctrl.c b/arch/mips/lantiq/falcon/sysctrl.c |
| index 82bbd0e2e298..714d92659489 100644 |
| --- a/arch/mips/lantiq/falcon/sysctrl.c |
| +++ b/arch/mips/lantiq/falcon/sysctrl.c |
| @@ -169,6 +169,8 @@ static inline void clkdev_add_sys(const char *dev, unsigned int module, |
| { |
| struct clk *clk = kzalloc(sizeof(struct clk), GFP_KERNEL); |
| |
| + if (!clk) |
| + return; |
| clk->cl.dev_id = dev; |
| clk->cl.con_id = NULL; |
| clk->cl.clk = clk; |
| diff --git a/arch/mips/lantiq/xway/gptu.c b/arch/mips/lantiq/xway/gptu.c |
| index 0f1bbea1a816..955d0d5cfbdb 100644 |
| --- a/arch/mips/lantiq/xway/gptu.c |
| +++ b/arch/mips/lantiq/xway/gptu.c |
| @@ -124,6 +124,8 @@ static inline void clkdev_add_gptu(struct device *dev, const char *con, |
| { |
| struct clk *clk = kzalloc(sizeof(struct clk), GFP_KERNEL); |
| |
| + if (!clk) |
| + return; |
| clk->cl.dev_id = dev_name(dev); |
| clk->cl.con_id = con; |
| clk->cl.clk = clk; |
| diff --git a/arch/mips/lantiq/xway/sysctrl.c b/arch/mips/lantiq/xway/sysctrl.c |
| index 95bec460b651..dd7c36a193e3 100644 |
| --- a/arch/mips/lantiq/xway/sysctrl.c |
| +++ b/arch/mips/lantiq/xway/sysctrl.c |
| @@ -331,6 +331,8 @@ static void clkdev_add_pmu(const char *dev, const char *con, bool deactivate, |
| { |
| struct clk *clk = kzalloc(sizeof(struct clk), GFP_KERNEL); |
| |
| + if (!clk) |
| + return; |
| clk->cl.dev_id = dev; |
| clk->cl.con_id = con; |
| clk->cl.clk = clk; |
| @@ -354,6 +356,8 @@ static void clkdev_add_cgu(const char *dev, const char *con, |
| { |
| struct clk *clk = kzalloc(sizeof(struct clk), GFP_KERNEL); |
| |
| + if (!clk) |
| + return; |
| clk->cl.dev_id = dev; |
| clk->cl.con_id = con; |
| clk->cl.clk = clk; |
| @@ -372,24 +376,28 @@ static void clkdev_add_pci(void) |
| struct clk *clk_ext = kzalloc(sizeof(struct clk), GFP_KERNEL); |
| |
| /* main pci clock */ |
| - clk->cl.dev_id = "17000000.pci"; |
| - clk->cl.con_id = NULL; |
| - clk->cl.clk = clk; |
| - clk->rate = CLOCK_33M; |
| - clk->rates = valid_pci_rates; |
| - clk->enable = pci_enable; |
| - clk->disable = pmu_disable; |
| - clk->module = 0; |
| - clk->bits = PMU_PCI; |
| - clkdev_add(&clk->cl); |
| + if (clk) { |
| + clk->cl.dev_id = "17000000.pci"; |
| + clk->cl.con_id = NULL; |
| + clk->cl.clk = clk; |
| + clk->rate = CLOCK_33M; |
| + clk->rates = valid_pci_rates; |
| + clk->enable = pci_enable; |
| + clk->disable = pmu_disable; |
| + clk->module = 0; |
| + clk->bits = PMU_PCI; |
| + clkdev_add(&clk->cl); |
| + } |
| |
| /* use internal/external bus clock */ |
| - clk_ext->cl.dev_id = "17000000.pci"; |
| - clk_ext->cl.con_id = "external"; |
| - clk_ext->cl.clk = clk_ext; |
| - clk_ext->enable = pci_ext_enable; |
| - clk_ext->disable = pci_ext_disable; |
| - clkdev_add(&clk_ext->cl); |
| + if (clk_ext) { |
| + clk_ext->cl.dev_id = "17000000.pci"; |
| + clk_ext->cl.con_id = "external"; |
| + clk_ext->cl.clk = clk_ext; |
| + clk_ext->enable = pci_ext_enable; |
| + clk_ext->disable = pci_ext_disable; |
| + clkdev_add(&clk_ext->cl); |
| + } |
| } |
| |
| /* xway socs can generate clocks on gpio pins */ |
| @@ -409,9 +417,15 @@ static void clkdev_add_clkout(void) |
| char *name; |
| |
| name = kzalloc(sizeof("clkout0"), GFP_KERNEL); |
| + if (!name) |
| + continue; |
| sprintf(name, "clkout%d", i); |
| |
| clk = kzalloc(sizeof(struct clk), GFP_KERNEL); |
| + if (!clk) { |
| + kfree(name); |
| + continue; |
| + } |
| clk->cl.dev_id = "1f103000.cgu"; |
| clk->cl.con_id = name; |
| clk->cl.clk = clk; |
| -- |
| 2.35.1 |
| |