clk: si5341: check return value of {devm_}kasprintf()
authorClaudiu Beznea <claudiu.beznea@microchip.com>
Tue, 30 May 2023 09:39:09 +0000 (12:39 +0300)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 19 Jul 2023 14:21:32 +0000 (16:21 +0200)
[ Upstream commit 36e4ef82016a2b785cf2317eade77e76699b7bff ]

{devm_}kasprintf() returns a pointer to dynamically allocated memory.
Pointer could be NULL in case allocation fails. Check pointer validity.
Identified with coccinelle (kmerr.cocci script).

Fixes: 3044a860fd09 ("clk: Add Si5341/Si5340 driver")
Signed-off-by: Claudiu Beznea <claudiu.beznea@microchip.com>
Link: https://lore.kernel.org/r/20230530093913.1656095-5-claudiu.beznea@microchip.com
Signed-off-by: Stephen Boyd <sboyd@kernel.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
drivers/clk/clk-si5341.c

index 6dca328..b2cf7ed 100644 (file)
@@ -1697,6 +1697,10 @@ static int si5341_probe(struct i2c_client *client)
        for (i = 0; i < data->num_synth; ++i) {
                synth_clock_names[i] = devm_kasprintf(&client->dev, GFP_KERNEL,
                                "%s.N%u", client->dev.of_node->name, i);
+               if (!synth_clock_names[i]) {
+                       err = -ENOMEM;
+                       goto free_clk_names;
+               }
                init.name = synth_clock_names[i];
                data->synth[i].index = i;
                data->synth[i].data = data;
@@ -1715,6 +1719,10 @@ static int si5341_probe(struct i2c_client *client)
        for (i = 0; i < data->num_outputs; ++i) {
                init.name = kasprintf(GFP_KERNEL, "%s.%d",
                        client->dev.of_node->name, i);
+               if (!init.name) {
+                       err = -ENOMEM;
+                       goto free_clk_names;
+               }
                init.flags = config[i].synth_master ? CLK_SET_RATE_PARENT : 0;
                data->clk[i].index = i;
                data->clk[i].data = data;