summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGreg Kurz <groug@kaod.org>2021-03-09 19:11:10 +0100
committerMichael Ellerman <mpe@ellerman.id.au>2024-05-08 00:48:32 +1000
commit8873aab8646194a4446117bb617cc71bddda2dee (patch)
tree6e8a30f0fb3726c755cf9a45e2dd1f3268f0dbd0
parentc3710ee7cd695dc1b0b4b8cfbf464e313467f970 (diff)
downloadlinux-stable-8873aab8646194a4446117bb617cc71bddda2dee.tar.gz
linux-stable-8873aab8646194a4446117bb617cc71bddda2dee.tar.bz2
linux-stable-8873aab8646194a4446117bb617cc71bddda2dee.zip
powerpc/xmon: Check cpu id in commands "c#", "dp#" and "dx#"
All these commands end up peeking into the PACA using the user originated cpu id as an index. Check the cpu id is valid in order to prevent xmon to crash. Instead of printing an error, this follows the same behavior as the "lp s #" command : ignore the buggy cpu id parameter and fall back to the #-less version of the command. Signed-off-by: Greg Kurz <groug@kaod.org> Reviewed-by: Cédric Le Goater <clg@kaod.org> Signed-off-by: Michael Ellerman <mpe@ellerman.id.au> Link: https://msgid.link/161531347060.252863.10490063933688958044.stgit@bahia.lan
-rw-r--r--arch/powerpc/xmon/xmon.c6
1 files changed, 3 insertions, 3 deletions
diff --git a/arch/powerpc/xmon/xmon.c b/arch/powerpc/xmon/xmon.c
index d79d6633f333..bd4813bad317 100644
--- a/arch/powerpc/xmon/xmon.c
+++ b/arch/powerpc/xmon/xmon.c
@@ -1350,7 +1350,7 @@ static int cpu_cmd(void)
}
termch = cpu;
- if (!scanhex(&cpu)) {
+ if (!scanhex(&cpu) || cpu >= num_possible_cpus()) {
/* print cpus waiting or in xmon */
printf("cpus stopped:");
last_cpu = first_cpu = NR_CPUS;
@@ -2772,7 +2772,7 @@ static void dump_pacas(void)
termch = c; /* Put c back, it wasn't 'a' */
- if (scanhex(&num))
+ if (scanhex(&num) && num < num_possible_cpus())
dump_one_paca(num);
else
dump_one_paca(xmon_owner);
@@ -2845,7 +2845,7 @@ static void dump_xives(void)
termch = c; /* Put c back, it wasn't 'a' */
- if (scanhex(&num))
+ if (scanhex(&num) && num < num_possible_cpus())
dump_one_xive(num);
else
dump_one_xive(xmon_owner);