diff options
author | Oliver O'Halloran <oohall@gmail.com> | 2020-02-17 15:13:43 +1100 |
---|---|---|
committer | Michael Ellerman <mpe@ellerman.id.au> | 2020-02-18 21:31:12 +1100 |
commit | 066bc3576e653b615ee3f5230a89d69c8ebeeb71 (patch) | |
tree | 81c5186d16ec98897564d4a084f6602229e6e089 /arch/powerpc/xmon | |
parent | 477f3488a94e35380c82a7498d46f10fa5f3edd2 (diff) | |
download | linux-066bc3576e653b615ee3f5230a89d69c8ebeeb71.tar.gz linux-066bc3576e653b615ee3f5230a89d69c8ebeeb71.tar.bz2 linux-066bc3576e653b615ee3f5230a89d69c8ebeeb71.zip |
powerpc/xmon: Fix whitespace handling in getstring()
The ls (lookup symbol) and zr (reboot) commands use xmon's getstring()
helper to read a string argument from the xmon prompt. This function
skips over leading whitespace, but doesn't check if the first
"non-whitespace" character is a newline which causes some odd
behaviour (<enter> indicates a the enter key was pressed):
0:mon> ls printk<enter>
printk: c0000000001680c4
0:mon> ls<enter>
printk<enter>
Symbol '
printk' not found.
0:mon>
With commit 2d9b332d99b ("powerpc/xmon: Allow passing an argument to
ppc_md.restart()") we have a similar problem with the zr command.
Previously zr took no arguments so "zr<enter> would trigger a reboot.
With that patch applied a second newline needs to be sent in order for
the reboot to occur. Fix this by checking if the leading whitespace
ended on a newline:
0:mon> ls<enter>
Symbol '' not found.
Fixes: 2d9b332d99b2 ("powerpc/xmon: Allow passing an argument to ppc_md.restart()")
Reported-by: Michael Ellerman <mpe@ellerman.id.au>
Signed-off-by: Oliver O'Halloran <oohall@gmail.com>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
Link: https://lore.kernel.org/r/20200217041343.2454-1-oohall@gmail.com
Diffstat (limited to 'arch/powerpc/xmon')
-rw-r--r-- | arch/powerpc/xmon/xmon.c | 5 |
1 files changed, 5 insertions, 0 deletions
diff --git a/arch/powerpc/xmon/xmon.c b/arch/powerpc/xmon/xmon.c index e8c84d265602..0ec9640335bb 100644 --- a/arch/powerpc/xmon/xmon.c +++ b/arch/powerpc/xmon/xmon.c @@ -3435,6 +3435,11 @@ getstring(char *s, int size) int c; c = skipbl(); + if (c == '\n') { + *s = 0; + return; + } + do { if( size > 1 ){ *s++ = c; |