[PATCH v2] arm: mach-snapdragon: increase compat buffer size and warn on root compatible string truncation

Vivek Ray vk092kumar at gmail.com
Wed Jun 17 08:27:47 CEST 2026


Hi Casey, Neil,

Just a friendly ping regarding this patch.

The v2 addresses the review comments from Casey:

   - Increased the compatible string buffer size
   - Fixed the truncation check

This was motivated by an issue I encountered on a QCS6490-based board where
a longer compatible string caused the generated fdtfile name to be
truncated, leading to a boot failure.

I wanted to check whether there are any remaining concerns or if further
changes are needed from my side.

Thanks for your time.

Regards,
Vivek Ray

On Wed, Jun 10, 2026 at 7:24 PM Vivek Ray <vk092kumar at gmail.com> wrote:

> The configure_env() function copies root compatible strings into a
> 32-byte buffer prior to parsing. If a compatible string exceeds this
> limit, strlcpy() silently truncates it, producing a malformed fdtfile
> path and a silent boot failure with no indication of the root cause.
>
> Bump buf[] to 128 bytes and dt_path[] to 256 bytes to accommodate longer
> compatible strings. Also, add explicit truncation checks after both
> strlcpy() calls and emit a log_warning() with the offending compatible
> string to make such failures easier to diagnose.
>
> Signed-off-by: Vivek Ray <vk092kumar at gmail.com>
>
> ---
>
> Changes in V2:
> - Bump buf[] from 32 to 128 bytes and dt_path[] from 64 to 256 (Casey
> Connolly)
> - Fix line size check, use > not >= (Casey Connolly)
>
> ---
>  arch/arm/mach-snapdragon/board.c | 18 ++++++++++++++----
>  1 file changed, 14 insertions(+), 4 deletions(-)
>
> diff --git a/arch/arm/mach-snapdragon/board.c
> b/arch/arm/mach-snapdragon/board.c
> index 829a0109ac7..d9390d9b5d3 100644
> --- a/arch/arm/mach-snapdragon/board.c
> +++ b/arch/arm/mach-snapdragon/board.c
> @@ -390,13 +390,14 @@ static void configure_env(void)
>  {
>         const char *first_compat, *last_compat;
>         char *tmp;
> -       char buf[32] = { 0 };
> +       char buf[128] = { 0 };
> +       int len = 0;
>         /*
>          * Most DTB filenames follow the scheme:
> qcom/<soc>-[vendor]-<board>.dtb
>          * The vendor is skipped when it's a Qualcomm reference board, or
> the
>          * db845c.
>          */
> -       char dt_path[64] = { 0 };
> +       char dt_path[256] = { 0 };
>         int compat_count, ret;
>         ofnode root;
>
> @@ -417,7 +418,11 @@ static void configure_env(void)
>                 return;
>         }
>
> -       strlcpy(buf, first_compat, sizeof(buf) - 1);
> +       /* A safety check to avoid silent failure due to name truncation */
> +       len = strlcpy(buf, first_compat, sizeof(buf) - 1);
> +       if (len > sizeof(buf) - 1)
> +               log_warning("compatible '%s' got truncated, fdtfile name
> too long\n",
> +                           first_compat);
>         tmp = buf;
>
>         /* The Qualcomm reference boards (RBx, HDK, etc)  */
> @@ -468,7 +473,12 @@ static void configure_env(void)
>
>                 /* Copy the last compat (e.g. "qcom,sdm845") into buf */
>                 memset(buf, 0, sizeof(buf));
> -               strlcpy(buf, last_compat, sizeof(buf) - 1);
> +
> +               /* check for name truncation */
> +               len = strlcpy(buf, last_compat, sizeof(buf) - 1);
> +               if (len > sizeof(buf) - 1)
> +                       log_warning("compatible '%s' got truncated,
> fdtfile name too long\n",
> +                                   last_compat);
>                 tmp = buf;
>
>                 /* strsep() is destructive, it replaces the comma with a
> \0 */
> --
> 2.34.1
>
>


More information about the U-Boot mailing list