summaryrefslogtreecommitdiffstats
path: root/sys-utils/lscpu.c
diff options
context:
space:
mode:
authorKarel Zak2016-06-24 11:07:00 +0200
committerKarel Zak2016-06-24 11:07:00 +0200
commit81a307bd4d906815dad7b6b3c355f663907a68c4 (patch)
treea674be91adbd5a54cd6f280c6c8e3ce25ed9975c /sys-utils/lscpu.c
parentlscpu: fix MMHZ column entry within man page (diff)
downloadkernel-qcow2-util-linux-81a307bd4d906815dad7b6b3c355f663907a68c4.tar.gz
kernel-qcow2-util-linux-81a307bd4d906815dad7b6b3c355f663907a68c4.tar.xz
kernel-qcow2-util-linux-81a307bd4d906815dad7b6b3c355f663907a68c4.zip
lscpu: make lookup_cache() more robust
Signed-off-by: Karel Zak <kzak@redhat.com>
Diffstat (limited to 'sys-utils/lscpu.c')
-rw-r--r--sys-utils/lscpu.c9
1 files changed, 7 insertions, 2 deletions
diff --git a/sys-utils/lscpu.c b/sys-utils/lscpu.c
index 4bd8e872d..b30b003b1 100644
--- a/sys-utils/lscpu.c
+++ b/sys-utils/lscpu.c
@@ -438,15 +438,20 @@ lookup_cache(char *line, struct lscpu_desc *desc)
if (!p || strncmp(p, "Private", 7) == 0)
return 0;
p = strstr(line, "level=");
- sscanf(p, "level=%d", &level);
+ if (!p || sscanf(p, "level=%d", &level) != 1)
+ return 0;
p = strstr(line, "type=") + 5;
+ if (!p || !*p)
+ return 0;
type = 0;
if (strncmp(p, "Data", 4) == 0)
type = 'd';
if (strncmp(p, "Instruction", 11) == 0)
type = 'i';
p = strstr(line, "size=");
- sscanf(p, "size=%lld", &size);
+ if (!p || sscanf(p, "size=%lld", &size) != 1)
+ return 0;
+
desc->necaches++;
desc->ecaches = xrealloc(desc->ecaches,
desc->necaches * sizeof(struct cpu_cache));