drivers/base/cpu: Use scnprintf() for avoiding potential buffer overflow
authorTakashi Iwai <tiwai@suse.de>
Wed, 11 Mar 2020 08:02:06 +0000 (09:02 +0100)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 11 Mar 2020 08:08:44 +0000 (09:08 +0100)
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>
Link: https://lore.kernel.org/r/20200311080207.12046-2-tiwai@suse.de
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/base/cpu.c

index 6265871..67aaa05 100644 (file)
@@ -258,13 +258,13 @@ static ssize_t print_cpus_offline(struct device *dev,
                        buf[n++] = ',';
 
                if (nr_cpu_ids == total_cpus-1)
-                       n += snprintf(&buf[n], len - n, "%u", nr_cpu_ids);
+                       n += scnprintf(&buf[n], len - n, "%u", nr_cpu_ids);
                else
-                       n += snprintf(&buf[n], len - n, "%u-%d",
+                       n += scnprintf(&buf[n], len - n, "%u-%d",
                                                      nr_cpu_ids, total_cpus-1);
        }
 
-       n += snprintf(&buf[n], len - n, "\n");
+       n += scnprintf(&buf[n], len - n, "\n");
        return n;
 }
 static DEVICE_ATTR(offline, 0444, print_cpus_offline, NULL);