cmd: exit: Exit functionality broken

Hector Palacios hector.palacios at digi.com
Tue Dec 13 16:41:29 CET 2022


Hi Max,

On 12/13/22 13:24, Max van den Biggelaar wrote:
> Hi,
> 
> I have a question regarding the U-Boot exit command. We are currently using mainline U-Boot 2022.04 version to provide our embedded systems with a bootloader image. To start our firmware via U-Boot environment, we use a bootscript to start our firmware. However, when we tried to exit a bootscript with the exit command, the bootscript was never exited.
> 
> After debugging to investigate the problem, we found this commit (https://github.com/u-boot/u-boot/commit/8c4e3b79bd0bb76eea16869e9666e19047c0d005) in mainline U-Boot:
> cmd: exit: Fix return value
> 
> 
> In case exit is called in a script without parameter, the command
> returns -2 ; in case exit is called with a numerical parameter,
> the command returns -2 and lower. This leads to the following problem:
> => setenv foo 'echo bar ; exit 1' ; run foo ; echo $?
> bar
> 0
> => setenv foo 'echo bar ; exit 0' ; run foo ; echo $?
> bar
> 0
> => setenv foo 'echo bar ; exit -2' ; run foo ; echo $?
> bar
> 0
> That is, no matter what the 'exit' command argument is, the return
> value is always 0 and so it is not possible to use script return
> value in subsequent tests.
> 
> Fix this and simplify the exit command such that if exit is called with
> no argument, the command returns 0, just like 'true' in cmd/test.c. In
> case the command is called with any argument that is positive integer,
> the argument is set as return value.
> => setenv foo 'echo bar ; exit 1' ; run foo ; echo $?
> bar
> 1
> => setenv foo 'echo bar ; exit 0' ; run foo ; echo $?
> bar
> 0
> => setenv foo 'echo bar ; exit -2' ; run foo ; echo $?
> bar
> 0
> 
> Note that this does change ABI established in 2004 , although it is
> unclear whether that ABI was originally OK or not.
> 
> Fixes: c26e454<https://github.com/u-boot/u-boot/commit/c26e454dfc6650428854fa2db3b1ed7f19e0ba0e>
> Signed-off-by: Marek Vasut <marex at denx.de>
> Cc: Pantelis Antoniou <pantelis.antoniou at konsulko.com>
> Cc: Tom Rini <trini at konsulko.com>
> 
> This commit does solve the problem of returning the correct value given to the exit command, but this breaks the following source code in common/cli_hush.c:
> https://github.com/u-boot/u-boot/blob/master/common/cli_hush.c#L3207
> 
> In the previous versions of U-Boot, such as 2020.04, the exit command returned -2, which was expected of the exit command API. However, after the patch above to fix the return value, -2 was never returned and the functionality to exit a bootscript or mainline U-Boot shell is not supported anymore. Thus, by the patch above the return value is fixed, but the functionality of the exit command is broken.
> 
> My question is if the functionality of this patch is fully tested/qualified to push in mainline U-Boot source code? And if so, is the functionality of the exit command also going to be fixed so that in future U-Boot source code releases bootscripts can be exited with this command?

I believe Marek's commit must be reverted as having 'exit' return a code 
other than 0 (success) or 1 (error) was never part of U-Boot. I don't 
know if reverting may break newer scripts, but now many scripts are 
broken because 'exit' does not currently work.

Anyway, Marek wanted to give it a second thought. See 
https://www.mail-archive.com/u-boot%40lists.denx.de/msg456830.html

Regards
-- 
Héctor Palacios



More information about the U-Boot mailing list