tools: turbostat: Add checks for failure of fgets() and fscanf()
This commit is contained in:
parent
605745f58f
commit
824debfd2e
|
@ -20,6 +20,7 @@ linux (4.19~rc3-1~exp2) UNRELEASED; urgency=medium
|
|||
* debian/rules.d/tools/power/linux-cpupower: Add "+" to recursive make
|
||||
commands
|
||||
* tools: x86_energy_perf_policy: Fix "uninitialized variable" warnings at -O2
|
||||
* tools: turbostat: Add checks for failure of fgets() and fscanf()
|
||||
|
||||
-- Ben Hutchings <ben@decadent.org.uk> Mon, 10 Sep 2018 22:25:53 +0100
|
||||
|
||||
|
|
113
debian/patches/bugfix/x86/tools-turbostat-Add-checks-for-failure-of-fgets-and-.patch
vendored
Normal file
113
debian/patches/bugfix/x86/tools-turbostat-Add-checks-for-failure-of-fgets-and-.patch
vendored
Normal file
|
@ -0,0 +1,113 @@
|
|||
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()
|
||||
|
||||
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(-)
|
||||
|
||||
diff --git a/tools/power/x86/turbostat/turbostat.c b/tools/power/x86/turbostat/turbostat.c
|
||||
index 980bd9d20646..b4f32dd37c67 100644
|
||||
--- a/tools/power/x86/turbostat/turbostat.c
|
||||
+++ b/tools/power/x86/turbostat/turbostat.c
|
||||
@@ -2554,7 +2554,8 @@ int get_thread_siblings(struct cpu_topology *thiscpu)
|
||||
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);
|
||||
}
|
||||
@@ -5293,7 +5299,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, '-');
|
||||
@@ -5320,7 +5327,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)
|
|
@ -153,6 +153,7 @@ bugfix/all/locking-lockdep-delete-unnecesary-include.patch
|
|||
bugfix/all/tools-lib-api-fs-fs.c-fix-misuse-of-strncpy.patch
|
||||
bugfix/all/usbip-fix-misuse-of-strncpy.patch
|
||||
bugfix/x86/tools-x86_energy_perf_policy-fix-uninitialized-varia.patch
|
||||
bugfix/x86/tools-turbostat-Add-checks-for-failure-of-fgets-and-.patch
|
||||
|
||||
# wireless: Disable regulatory.db direct loading (until we sort out signing)
|
||||
debian/wireless-disable-regulatory.db-direct-loading.patch
|
||||
|
|
Loading…
Reference in New Issue