clk: mmp: Switch to use kmemdup_array()
authorAndy Shevchenko <andriy.shevchenko@linux.intel.com>
Wed, 14 Aug 2024 12:54:07 +0000 (15:54 +0300)
committerStephen Boyd <sboyd@kernel.org>
Thu, 15 Aug 2024 00:37:25 +0000 (17:37 -0700)
Let the kmemdup_array() take care about multiplication and possible
overflows.

Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Link: https://lore.kernel.org/r/20240814125513.2637955-2-andriy.shevchenko@linux.intel.com
Signed-off-by: Stephen Boyd <sboyd@kernel.org>
drivers/clk/mmp/clk-mix.c

index 454d131f475eac176c8dfedb4bafaa804a343ae6..07ac9e6937e58b8f8e1a081f44a177bd7bd88339 100644 (file)
@@ -447,7 +447,6 @@ struct clk *mmp_clk_register_mix(struct device *dev,
        struct mmp_clk_mix *mix;
        struct clk *clk;
        struct clk_init_data init;
-       size_t table_bytes;
 
        mix = kzalloc(sizeof(*mix), GFP_KERNEL);
        if (!mix)
@@ -461,8 +460,8 @@ struct clk *mmp_clk_register_mix(struct device *dev,
 
        memcpy(&mix->reg_info, &config->reg_info, sizeof(config->reg_info));
        if (config->table) {
-               table_bytes = sizeof(*config->table) * config->table_size;
-               mix->table = kmemdup(config->table, table_bytes, GFP_KERNEL);
+               mix->table = kmemdup_array(config->table, config->table_size,
+                                          sizeof(*mix->table), GFP_KERNEL);
                if (!mix->table)
                        goto free_mix;
 
@@ -470,9 +469,8 @@ struct clk *mmp_clk_register_mix(struct device *dev,
        }
 
        if (config->mux_table) {
-               table_bytes = sizeof(u32) * num_parents;
-               mix->mux_table = kmemdup(config->mux_table, table_bytes,
-                                        GFP_KERNEL);
+               mix->mux_table = kmemdup_array(config->mux_table, num_parents,
+                                              sizeof(*mix->mux_table), GFP_KERNEL);
                if (!mix->mux_table) {
                        kfree(mix->table);
                        goto free_mix;