[U-Boot] CTRL-C hangs after "hush: fix segfault on syntax error"

Rabin,
With 128059b926b3 "hush: fix segfault on syntax error" applied, I find that if I press CTRL-C at the U-Boot prompt, U-Boot hangs. If I revert that commit, CTRL-C works fine (prints CTRL-C and returns to the command prompt).
I'm testing on real HW (rpi_b board), although I don't expect the exact HW matters. This issue doesn't reproduce with sandbox, since CTRL-C now seems to just execute the binary rather than being handled by U-Boot shell.

Hello,
On 11/20/2014 06:21 AM, Stephen Warren wrote:
Rabin,
With 128059b926b3 "hush: fix segfault on syntax error" applied, I find that if I press CTRL-C at the U-Boot prompt, U-Boot hangs. If I revert that commit, CTRL-C works fine (prints CTRL-C and returns to the command prompt).
I'm testing on real HW (rpi_b board), although I don't expect the exact HW matters. This issue doesn't reproduce with sandbox, since CTRL-C now seems to just execute the binary rather than being handled by U-Boot shell.
I can confirm this issue on Trats2. U-Boot hangs in infinite loop, but after revert this commit - it works well. Using CTRL-C in commands works fine, it only hangs in the console.
It stays in: ./common/cli.c:206 (cli_loop())
Best regards,

Hi Stephen,
On 20 November 2014 05:21, Stephen Warren swarren@wwwdotorg.org wrote:
Rabin,
With 128059b926b3 "hush: fix segfault on syntax error" applied, I find that if I press CTRL-C at the U-Boot prompt, U-Boot hangs. If I revert that commit, CTRL-C works fine (prints CTRL-C and returns to the command prompt).
I'm testing on real HW (rpi_b board), although I don't expect the exact HW matters. This issue doesn't reproduce with sandbox, since CTRL-C now seems to just execute the binary rather than being handled by U-Boot shell.
You can repeat this on sandbox:
./u-boot -t raw
Then Ctrl-C will work (i.e. hang).
This seems bad - as Przemyslaw mentions it hangs in cli_loop(). parse_stream_outer() should not return.
Regards, Simon

128059b92 ("hush: fix segfault on syntax error") attempted to fix a segfault on syntax errors, but it broke Ctrl-C handling, and the assumption that it made, that rcode could not be -1, is incorrect. Revert this change.
Reported-by: Stephen Warren swarren@wwwdotorg.org Reported-by: Przemyslaw Marczak p.marczak@samsung.com Signed-off-by: Rabin Vincent rabin@rab.in --- common/cli_hush.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/common/cli_hush.c b/common/cli_hush.c index d643912..296542f 100644 --- a/common/cli_hush.c +++ b/common/cli_hush.c @@ -3217,7 +3217,7 @@ static int parse_stream_outer(struct in_str *inp, int flag) } b_free(&temp); /* loop on syntax errors, return on EOF */ - } while (rcode != 1 && !(flag & FLAG_EXIT_FROM_LOOP) && + } while (rcode != -1 && !(flag & FLAG_EXIT_FROM_LOOP) && (inp->peek != static_peek || b_peek(inp))); #ifndef __U_BOOT__ return 0;

On Fri, Nov 21, 2014 at 11:05:22PM +0100, Rabin Vincent wrote:
128059b92 ("hush: fix segfault on syntax error") attempted to fix a segfault on syntax errors, but it broke Ctrl-C handling, and the assumption that it made, that rcode could not be -1, is incorrect. Revert this change.
Reported-by: Stephen Warren swarren@wwwdotorg.org Reported-by: Przemyslaw Marczak p.marczak@samsung.com Signed-off-by: Rabin Vincent rabin@rab.in
Applied to u-boot/master, thanks!
participants (5)
-
Przemyslaw Marczak
-
Rabin Vincent
-
Simon Glass
-
Stephen Warren
-
Tom Rini