[Crash-utility] [PATCH] x86_64: Fix check for __per_cpu_offset initialisation

Philipp Rudo prudo at redhat.com
Thu Aug 5 13:19:37 UTC 2021


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 at redhat.com>
---
 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




More information about the Crash-utility mailing list