forked from pool/util-linux
56 lines
1.7 KiB
Diff
56 lines
1.7 KiB
Diff
|
From 95f09bc63c564c50ec2c393352801cc056faaea2 Mon Sep 17 00:00:00 2001
|
||
|
From: Dirk Mueller <dmueller@suse.com>
|
||
|
Date: Sat, 17 Mar 2018 13:18:38 +0100
|
||
|
Subject: [PATCH] Avoid crash in min/max caculation when cpu#0 being offline
|
||
|
|
||
|
When cpu#0 is offline, atof(NULL) is called which causes
|
||
|
a segfault or endless loop depending on implementation
|
||
|
circumstances. So instead of implicitely assumping that the
|
||
|
first cpu is always available, do the presence checks for
|
||
|
all including the first one.
|
||
|
---
|
||
|
sys-utils/lscpu.c | 12 ++++++------
|
||
|
1 file changed, 6 insertions(+), 6 deletions(-)
|
||
|
|
||
|
diff --git a/sys-utils/lscpu.c b/sys-utils/lscpu.c
|
||
|
index 6d1fde555..2132511a5 100644
|
||
|
--- a/sys-utils/lscpu.c
|
||
|
+++ b/sys-utils/lscpu.c
|
||
|
@@ -1108,10 +1108,10 @@ static char *
|
||
|
cpu_max_mhz(struct lscpu_desc *desc, char *buf, size_t bufsz)
|
||
|
{
|
||
|
int i;
|
||
|
- float cpu_freq = atof(desc->maxmhz[0]);
|
||
|
+ float cpu_freq = 0.0;
|
||
|
|
||
|
if (desc->present) {
|
||
|
- for (i = 1; i < desc->ncpuspos; i++) {
|
||
|
+ for (i = 0; i < desc->ncpuspos; i++) {
|
||
|
if (CPU_ISSET(real_cpu_num(desc, i), desc->present)
|
||
|
&& desc->maxmhz[i]) {
|
||
|
float freq = atof(desc->maxmhz[i]);
|
||
|
@@ -1129,16 +1129,16 @@ cpu_max_mhz(struct lscpu_desc *desc, char *buf, size_t bufsz)
|
||
|
static char *
|
||
|
cpu_min_mhz(struct lscpu_desc *desc, char *buf, size_t bufsz)
|
||
|
{
|
||
|
- int i;
|
||
|
- float cpu_freq = atof(desc->minmhz[0]);
|
||
|
+ int i;
|
||
|
+ float cpu_freq = -1.0;
|
||
|
|
||
|
if (desc->present) {
|
||
|
- for (i = 1; i < desc->ncpuspos; i++) {
|
||
|
+ for (i = 0; i < desc->ncpuspos; i++) {
|
||
|
if (CPU_ISSET(real_cpu_num(desc, i), desc->present)
|
||
|
&& desc->minmhz[i]) {
|
||
|
float freq = atof(desc->minmhz[i]);
|
||
|
|
||
|
- if (freq < cpu_freq)
|
||
|
+ if (cpu_freq < 0.0 || freq < cpu_freq)
|
||
|
cpu_freq = freq;
|
||
|
}
|
||
|
}
|
||
|
--
|
||
|
2.16.3
|
||
|
|