MIPS: lantiq: check the return value of kzalloc()
authorXiaoke Wang <xkernel.wang@foxmail.com>
Fri, 25 Mar 2022 11:49:41 +0000 (19:49 +0800)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 25 May 2022 07:57:26 +0000 (09:57 +0200)
[ 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
arch/mips/lantiq/xway/gptu.c
arch/mips/lantiq/xway/sysctrl.c

index 42222f849bd25d2d63ee9d42413d3d94cd34f799..446a2536999bf5daf1a51519b7f26562fb9faf0e 100644 (file)
@@ -167,6 +167,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;
index 3d5683e75cf1e67746e5f8e463da34c5844b5bda..200fe9ff641d67fb256815a54af57be7ea38e0a6 100644 (file)
@@ -122,6 +122,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;
index 917fac1636b7151d69c54045307cec7c32a17b8e..084f6caba5f23754bf5f2b892a87c17d325ae720 100644 (file)
@@ -315,6 +315,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;
@@ -338,6 +340,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;
@@ -356,24 +360,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 */
@@ -393,9 +401,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;