[PATCH] hush: fix G.argv0_for_re_execing to avoid endless loop
Denys Vlasenko
vda.linux at googlemail.com
Mon Dec 9 01:07:58 UTC 2024
Applied, thank you.
On Mon, Nov 25, 2024 at 6:08 AM Hajime Tazaki <thehajime at gmail.com> wrote:
>
> When the busybox is used as /sbin/init and the inittab file contains
> below:
>
> ::respawn:-/bin/sh
>
> /sbin/init spawns hush for the first time with the argv[0] contains '-',
> and hush treats it as login shell. Then it reads /etc/profile and if
> the file contains the command execution like below, it invokes hush as
> login shell because the argv[0] argument is still '-/bin/sh' and reads
> /etc/profile again. This will last until some failure (e.g., memory
> failure) happens.
>
> [ "$(id -u)" -eq 0 ] && PS1="${PS1}# " || PS1="${PS1}\$ "
>
> This commit fixes this issues by adding an offset (+1) to the
> G.argv0_for_re_execing variable.
>
> This issue happens on our out-of-tree UML (use mode linux) with nommu
> configuration.
>
> Link: https://lore.kernel.org/all/cover.1731290567.git.thehajime@gmail.com/
> Signed-off-by: Hajime Tazaki <thehajime at gmail.com>
> ---
> shell/hush.c | 2 ++
> 1 file changed, 2 insertions(+)
>
> diff --git a/shell/hush.c b/shell/hush.c
> index 04dda0734..cd00a9a41 100644
> --- a/shell/hush.c
> +++ b/shell/hush.c
> @@ -10361,6 +10361,8 @@ int hush_main(int argc, char **argv)
> _exit(0);
> }
> G.argv0_for_re_execing = argv[0];
> + if (G.argv0_for_re_execing[0] == '-')
> + G.argv0_for_re_execing += 1;
> #endif
> #if ENABLE_HUSH_TRAP
> # if ENABLE_HUSH_FUNCTIONS
> --
> 2.43.0
>
> _______________________________________________
> busybox mailing list
> busybox at busybox.net
> https://lists.busybox.net/mailman/listinfo/busybox
More information about the busybox
mailing list