hwmon: (ibmpowernv) Use scnprintf() for avoiding potential buffer overflow
authorTakashi Iwai <tiwai@suse.de>
Wed, 11 Mar 2020 07:39:44 +0000 (08:39 +0100)
committerGuenter Roeck <linux@roeck-us.net>
Wed, 11 Mar 2020 15:09:31 +0000 (08:09 -0700)
Since snprintf() returns the would-be-output size instead of the
actual output size, the succeeding calls may go beyond the given
buffer limit.  Fix it by replacing with scnprintf().

Signed-off-by: Takashi Iwai <tiwai@suse.de>
Signed-off-by: Guenter Roeck <linux@roeck-us.net>
drivers/hwmon/ibmpowernv.c

index 0e525cf..a750647 100644 (file)
@@ -186,7 +186,7 @@ static void make_sensor_label(struct device_node *np,
        u32 id;
        size_t n;
 
-       n = snprintf(sdata->label, sizeof(sdata->label), "%s", label);
+       n = scnprintf(sdata->label, sizeof(sdata->label), "%s", label);
 
        /*
         * Core temp pretty print
@@ -199,11 +199,11 @@ static void make_sensor_label(struct device_node *np,
                         * The digital thermal sensors are associated
                         * with a core.
                         */
-                       n += snprintf(sdata->label + n,
+                       n += scnprintf(sdata->label + n,
                                      sizeof(sdata->label) - n, " %d",
                                      cpuid);
                else
-                       n += snprintf(sdata->label + n,
+                       n += scnprintf(sdata->label + n,
                                      sizeof(sdata->label) - n, " phy%d", id);
        }
 
@@ -211,7 +211,7 @@ static void make_sensor_label(struct device_node *np,
         * Membuffer pretty print
         */
        if (!of_property_read_u32(np, "ibm,chip-id", &id))
-               n += snprintf(sdata->label + n, sizeof(sdata->label) - n,
+               n += scnprintf(sdata->label + n, sizeof(sdata->label) - n,
                              " %d", id & 0xffff);
 }