[PATCH] common/command.c: Avoid NULL pointer use in cmd_auto_complete

Adam Lackorzynski adam at l4re.org
Fri May 15 22:40:37 CEST 2026


Hi Simon,

On Fri May 15, 2026 at 07:58:38 -0600, Simon Glass wrote:
> Hi Adam,
> 
> On 2026-05-14T14:06:41, Adam Lackorzynski <adam at l4re.org> wrote:
> > common/command.c: Avoid NULL pointer use in cmd_auto_complete
> >
> > Avoid putting a potential NULL pointer to strcmp, which would lead to a
> > load at address 0.
> >
> > Signed-off-by: Adam Lackorzynski <adam at l4re.org>
> >
> > common/command.c | 2 +-
> >  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> > diff --git a/common/command.c b/common/command.c
> > @@ -373,7 +373,7 @@ int cmd_auto_complete(const char *const prompt, char *buf, int *np, int *colp)
> >       const char *ps_prompt = CONFIG_SYS_PROMPT;
> >  #endif
> >
> > -     if (strcmp(prompt, ps_prompt) != 0)
> > +     if (ps_prompt && strcmp(prompt, ps_prompt) != 0)
> >               return 0;       /* not in normal console */
> 
> This avoids the deref but isn't quite right. uboot_cli_readline() in
> common/cli_hush.c falls back to CONFIG_SYS_PROMPT (or
> CONFIG_SYS_PROMPT_HUSH_PS2 for promptmode 2) when PS1 is unset, so
> prompt here is never NULL. With your change, a NULL PS1 makes the
> comparison succeed unconditionally and promptmode 2 gets treated as
> the normal console.
> 
> Please can you fall back to the default when env_get() returns NULL,
> mirroring the readline path:
> 
>     const char *ps_prompt;
> 
>     if (IS_ENABLED(CONFIG_CMDLINE_PS_SUPPORT)) {
>         ps_prompt = env_get('PS1');
> 
>         if (!ps_prompt)
>                 ps_prompt = CONFIG_SYS_PROMPT;
>     } else {
>         ps_prompt = CONFIG_SYS_PROMPT;
>     }
> 
> What do you think?

Thanks, looks good to me, will send a v2.


BR, Adam


More information about the U-Boot mailing list