cpufreq/arm_big_little.c: Fixing non-terminated string
authorMathieu J. Poirier <mathieu.poirier@linaro.org>
Wed, 10 Apr 2013 15:20:21 +0000 (09:20 -0600)
committerJon Medhurst <tixy@linaro.org>
Fri, 19 Jul 2013 12:43:16 +0000 (13:43 +0100)
When declaring char name[9] = "cluster";

name[7] is equal to the string termination character '\0'.
But later on doing:

name[7] = cluster_id + '0';

clobbers the termination character, leaving non terminated
strings in the system and potentially causing undertermined
behavior.

By initialising name[9] to "clusterX" the 8th character is
set to '\0' and affecting the 7th character with the cluster
number doesn't overwite anything.

Signed-off-by: Mathieu Poirier <mathieu.poirier@linaro.org>
[ np: The C standard says that the reminder of an initialized array of
  a known size should be initialized to zero and therefore this patch is
  unneeded, however this patch makes the intent more explicit to others
  reading the code. ]

Signed-off-by: Nicolas Pitre <nicolas.pitre@linaro.org>
drivers/clk/versatile/clk-vexpress-spc.c
drivers/cpufreq/arm_big_little.c

index 37125bf48cbdecb99a39d712bb679f2b1eb3814f..bb566e244b0c908e923b8eaba949e38c4de43950 100644 (file)
@@ -102,7 +102,7 @@ struct clk *vexpress_clk_register_spc(const char *name, int cluster_id)
 #if defined(CONFIG_OF)
 void __init vexpress_clk_of_register_spc(void)
 {
-       char name[14] = "cpu-cluster.";
+       char name[14] = "cpu-cluster.X";
        struct device_node *node = NULL;
        struct clk *clk;
        const u32 *val;
index f106106f78ccf9c52690f634f4cde40caa5444ac..7c2be81f7dcbed6aa50bedf0af0d596fb95f3af5 100644 (file)
@@ -322,7 +322,7 @@ static void put_cluster_clk_and_freq_table(struct device *cpu_dev)
 static int _get_cluster_clk_and_freq_table(struct device *cpu_dev)
 {
        u32 cluster = cpu_to_cluster(cpu_dev->id);
-       char name[14] = "cpu-cluster.";
+       char name[14] = "cpu-cluster.X";
        int ret;
 
        if (atomic_inc_return(&cluster_usage[cluster]) != 1)