]> git.ipfire.org Git - thirdparty/util-linux.git/commitdiff
lscpu: make read_topology() more robust to avoid SIGFPE
authorKarel Zak <kzak@redhat.com>
Tue, 13 Nov 2012 09:36:25 +0000 (10:36 +0100)
committerKarel Zak <kzak@redhat.com>
Tue, 13 Nov 2012 09:36:25 +0000 (10:36 +0100)
Signed-off-by: Karel Zak <kzak@redhat.com>
sys-utils/lscpu.c

index 5b1a0afeeb6ad2e2f7ef1b551d4af49599a86785..a111561dcb4830b0b53120220cf4526c34eb6a4d 100644 (file)
@@ -627,16 +627,26 @@ read_topology(struct lscpu_desc *desc, int num)
 
                /* threads within one core */
                nthreads = CPU_COUNT_S(setsize, thread_siblings);
+               if (!nthreads)
+                       nthreads = 1;
+
                /* cores within one socket */
                ncores = CPU_COUNT_S(setsize, core_siblings) / nthreads;
-               /* number of sockets within one book.
-                * Because of odd / non-present cpu maps and to keep
-                * calculation easy we make sure that nsockets and
-                * nbooks is at least 1.
+               if (!ncores)
+                       ncores = 1;
+
+               /* number of sockets within one book.  Because of odd /
+                * non-present cpu maps and to keep calculation easy we make
+                * sure that nsockets and nbooks is at least 1.
                 */
-               nsockets = desc->ncpus / nthreads / ncores ?: 1;
+               nsockets = desc->ncpus / nthreads / ncores;
+               if (!nsockets)
+                       nsockets = 1;
+
                /* number of books */
-               nbooks = desc->ncpus / nthreads / ncores / nsockets ?: 1;
+               nbooks = desc->ncpus / nthreads / ncores / nsockets;
+               if (!nbooks)
+                       nbooks = 1;
 
                /* all threads, see also read_basicinfo()
                 * -- fallback for kernels without
@@ -644,6 +654,7 @@ read_topology(struct lscpu_desc *desc, int num)
                 */
                if (!desc->nthreads)
                        desc->nthreads = nbooks * nsockets * ncores * nthreads;
+
                /* For each map we make sure that it can have up to ncpuspos
                 * entries. This is because we cannot reliably calculate the
                 * number of cores, sockets and books on all architectures.