diff options
Diffstat (limited to 'debian/patches/bugfix/x86/tools-turbostat-Add-checks-for-failure-of-fgets-and-.patch')
-rw-r--r-- | debian/patches/bugfix/x86/tools-turbostat-Add-checks-for-failure-of-fgets-and-.patch | 114 |
1 files changed, 114 insertions, 0 deletions
diff --git a/debian/patches/bugfix/x86/tools-turbostat-Add-checks-for-failure-of-fgets-and-.patch b/debian/patches/bugfix/x86/tools-turbostat-Add-checks-for-failure-of-fgets-and-.patch new file mode 100644 index 000000000..77b56df47 --- /dev/null +++ b/debian/patches/bugfix/x86/tools-turbostat-Add-checks-for-failure-of-fgets-and-.patch @@ -0,0 +1,114 @@ +From: Ben Hutchings <ben@decadent.org.uk> +Date: Tue, 11 Sep 2018 03:07:28 +0100 +Subject: tools: turbostat: Add checks for failure of fgets() and fscanf() +Forwarded: https://marc.info/?l=linux-pm&m=153711036626779 + +Most calls to fgets() and fscanf() are followed by error checks. +Add an exit-on-error in the remaining cases. + +Signed-off-by: Ben Hutchings <ben@decadent.org.uk> +--- + tools/power/x86/turbostat/turbostat.c | 28 +++++++++++++++++---------- + 1 file changed, 18 insertions(+), 10 deletions(-) + +Index: linux/tools/power/x86/turbostat/turbostat.c +=================================================================== +--- linux.orig/tools/power/x86/turbostat/turbostat.c ++++ linux/tools/power/x86/turbostat/turbostat.c +@@ -2554,7 +2554,8 @@ int get_thread_siblings(struct cpu_topol + filep = fopen_or_die(path, "r"); + do { + offset -= BITMASK_SIZE; +- fscanf(filep, "%lx%c", &map, &character); ++ if (fscanf(filep, "%lx%c", &map, &character) != 2) ++ err(1, "%s: failed to parse file", path); + for (shift = 0; shift < BITMASK_SIZE; shift++) { + if ((map >> shift) & 0x1) { + so = shift + offset; +@@ -3407,14 +3408,14 @@ dump_sysfs_cstate_config(void) + input = fopen(path, "r"); + if (input == NULL) + continue; +- fgets(name_buf, sizeof(name_buf), input); ++ if (!fgets(name_buf, sizeof(name_buf), input)) ++ err(1, "%s: failed to read file", path); + + /* truncate "C1-HSW\n" to "C1", or truncate "C1\n" to "C1" */ + sp = strchr(name_buf, '-'); + if (!sp) + sp = strchrnul(name_buf, '\n'); + *sp = '\0'; +- + fclose(input); + + sprintf(path, "/sys/devices/system/cpu/cpu%d/cpuidle/state%d/desc", +@@ -3422,7 +3423,8 @@ dump_sysfs_cstate_config(void) + input = fopen(path, "r"); + if (input == NULL) + continue; +- fgets(desc, sizeof(desc), input); ++ if (!fgets(desc, sizeof(desc), input)) ++ err(1, "%s: failed to read file", path); + + fprintf(outf, "cpu%d: %s: %s", base_cpu, name_buf, desc); + fclose(input); +@@ -3444,7 +3446,8 @@ dump_sysfs_pstate_config(void) + fprintf(stderr, "NSFOD %s\n", path); + return; + } +- fgets(driver_buf, sizeof(driver_buf), input); ++ if (!fgets(driver_buf, sizeof(driver_buf), input)) ++ err(1, "%s: failed to read file", path); + fclose(input); + + sprintf(path, "/sys/devices/system/cpu/cpu%d/cpufreq/scaling_governor", +@@ -3454,7 +3457,8 @@ dump_sysfs_pstate_config(void) + fprintf(stderr, "NSFOD %s\n", path); + return; + } +- fgets(governor_buf, sizeof(governor_buf), input); ++ if (!fgets(governor_buf, sizeof(governor_buf), input)) ++ err(1, "%s: failed to read file", path); + fclose(input); + + fprintf(outf, "cpu%d: cpufreq driver: %s", base_cpu, driver_buf); +@@ -3463,7 +3467,8 @@ dump_sysfs_pstate_config(void) + sprintf(path, "/sys/devices/system/cpu/cpufreq/boost"); + input = fopen(path, "r"); + if (input != NULL) { +- fscanf(input, "%d", &turbo); ++ if (fscanf(input, "%d", &turbo) != 1) ++ err(1, "%s: failed to parse number from file", path); + fprintf(outf, "cpufreq boost: %d\n", turbo); + fclose(input); + } +@@ -3471,7 +3476,8 @@ dump_sysfs_pstate_config(void) + sprintf(path, "/sys/devices/system/cpu/intel_pstate/no_turbo"); + input = fopen(path, "r"); + if (input != NULL) { +- fscanf(input, "%d", &turbo); ++ if (fscanf(input, "%d", &turbo) != 1) ++ err(1, "%s: failed to parse number from file", path); + fprintf(outf, "cpufreq intel_pstate no_turbo: %d\n", turbo); + fclose(input); + } +@@ -5296,7 +5302,8 @@ void probe_sysfs(void) + input = fopen(path, "r"); + if (input == NULL) + continue; +- fgets(name_buf, sizeof(name_buf), input); ++ if (!fgets(name_buf, sizeof(name_buf), input)) ++ err(1, "%s: failed to read file", path); + + /* truncate "C1-HSW\n" to "C1", or truncate "C1\n" to "C1" */ + sp = strchr(name_buf, '-'); +@@ -5323,7 +5330,8 @@ void probe_sysfs(void) + input = fopen(path, "r"); + if (input == NULL) + continue; +- fgets(name_buf, sizeof(name_buf), input); ++ if (!fgets(name_buf, sizeof(name_buf), input)) ++ err(1, "%s: failed to read file", path); + /* truncate "C1-HSW\n" to "C1", or truncate "C1\n" to "C1" */ + sp = strchr(name_buf, '-'); + if (!sp) |