Since at least kernel v2.6.30 the __per_cpu_offset gets initialized to __per_cpu_load. So first check if the __per_cpu_offset was set to a proper value before reading any per cpu variable to prevent potential bugs. Signed-off-by: Philipp Rudo <prudo@xxxxxxxxxx> --- x86_64.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/x86_64.c b/x86_64.c index 6eb7d67..0bb8705 100644 --- a/x86_64.c +++ b/x86_64.c @@ -1327,6 +1327,8 @@ x86_64_per_cpu_init(void) ms->stkinfo.isize = 16384; for (i = cpus = 0; i < NR_CPUS; i++) { + if (kt->__per_cpu_offset[i] == symbol_value("__per_cpu_load")) + break; if (!readmem(cpu_sp->value + kt->__per_cpu_offset[i], KVADDR, &cpunumber, sizeof(int), "cpu number (per_cpu)", QUIET|RETURN_ON_ERROR)) @@ -5602,7 +5604,7 @@ x86_64_get_smp_cpus(void) return 1; for (i = cpus = 0; i < NR_CPUS; i++) { - if (kt->__per_cpu_offset[i] == 0) + if (kt->__per_cpu_offset[i] == symbol_value("__per_cpu_load")) break; if (!readmem(sp->value + kt->__per_cpu_offset[i], KVADDR, &cpunumber, sizeof(int), -- 2.31.1 -- Crash-utility mailing list Crash-utility@xxxxxxxxxx https://listman.redhat.com/mailman/listinfo/crash-utility