* [PATCH 1/3] board: samsung: fix set_board_info() board_name buffer overflow
@ 2026-03-28 6:01 Ngo Luong Thanh Tra
2026-03-28 6:01 ` [PATCH 2/3] board: toradex: fix tdx-cfg-block prompt " Ngo Luong Thanh Tra
2026-03-28 6:01 ` [PATCH 3/3] common: cli_hush: fix console_buffer overflow on boot retry Ngo Luong Thanh Tra
0 siblings, 2 replies; 4+ messages in thread
From: Ngo Luong Thanh Tra @ 2026-03-28 6:01 UTC (permalink / raw)
To: u-boot; +Cc: Ngo Luong Thanh Tra, Minkyu Kang, Przemyslaw Marczak, Tom Rini
Replace unbounded sprintf() with snprintf() using sizeof(info) as
the bound when constructing the board_name string from bdname and
bdtype. The previous call had no size limit and could overflow the
64-byte stack buffer if the concatenated string exceeded 63 bytes.
Fixes: c9c36bf56e4c ("samsung: misc: use board specific functions to set env board info")
Signed-off-by: Ngo Luong Thanh Tra <S4210155@student.rmit.edu.au>
To: u-boot@lists.denx.de
---
board/samsung/common/misc.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/board/samsung/common/misc.c b/board/samsung/common/misc.c
index c134a9d70e2..6718f607875 100644
--- a/board/samsung/common/misc.c
+++ b/board/samsung/common/misc.c
@@ -104,7 +104,7 @@ void set_board_info(void)
if (!bdtype)
bdtype = "";
- sprintf(info, "%s%s", bdname, bdtype);
+ snprintf(info, sizeof(info), "%s%s", bdname, bdtype);
env_set("board_name", info);
#endif
snprintf(info, ARRAY_SIZE(info), "%s%x-%s%s.dtb",
--
2.53.0
base-commit: c704af3c8b0f37929bce8c2a4bba27d6e89919c7
branch: fix/sys-cbsize-overflow-series
^ permalink raw reply related [flat|nested] 4+ messages in thread* [PATCH 2/3] board: toradex: fix tdx-cfg-block prompt buffer overflow 2026-03-28 6:01 [PATCH 1/3] board: samsung: fix set_board_info() board_name buffer overflow Ngo Luong Thanh Tra @ 2026-03-28 6:01 ` Ngo Luong Thanh Tra 2026-03-28 6:01 ` [PATCH 3/3] common: cli_hush: fix console_buffer overflow on boot retry Ngo Luong Thanh Tra 1 sibling, 0 replies; 4+ messages in thread From: Ngo Luong Thanh Tra @ 2026-03-28 6:01 UTC (permalink / raw) To: u-boot Cc: Ngo Luong Thanh Tra, Emanuele Ghidoli, Francesco Dolcini, Tom Rini, Vitor Soares Replace unbounded sprintf() with snprintf() using sizeof(message) as the bound for all prompt string assignments in get_cfgblock_interactive(), get_cfgblock_carrier_interactive(), do_cfgblock_carrier_create() and do_cfgblock_create(). The previous calls had no size limit and could overflow the CONFIG_SYS_CBSIZE-sized stack buffer if SYS_CBSIZE was configured smaller than the longest prompt string (71 bytes). Fixes: 8b6dc5d3943c ("toradex: tdx-cfg-block: Cleanup interactive cfg block creation") Signed-off-by: Ngo Luong Thanh Tra <S4210155@student.rmit.edu.au> To: u-boot@lists.denx.de --- board/toradex/common/tdx-cfg-block.c | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/board/toradex/common/tdx-cfg-block.c b/board/toradex/common/tdx-cfg-block.c index 0fc3759695f..d75a6754c68 100644 --- a/board/toradex/common/tdx-cfg-block.c +++ b/board/toradex/common/tdx-cfg-block.c @@ -508,7 +508,7 @@ static int get_cfgblock_interactive(void) toradex_modules[i].name); } - sprintf(message, "Enter the module ID: "); + snprintf(message, sizeof(message), "Enter the module ID: "); len = cli_readline(message); prodid = dectoul(console_buffer, NULL); @@ -521,7 +521,8 @@ static int get_cfgblock_interactive(void) len = 0; while (len < 4) { - sprintf(message, "Enter the module version (e.g. V1.1B or V1.1#26): V"); + snprintf(message, sizeof(message), + "Enter the module version (e.g. V1.1B or V1.1#26): V"); len = cli_readline(message); } @@ -535,7 +536,7 @@ static int get_cfgblock_interactive(void) } while (len < 8) { - sprintf(message, "Enter module serial number: "); + snprintf(message, sizeof(message), "Enter module serial number: "); len = cli_readline(message); } @@ -744,12 +745,13 @@ static int get_cfgblock_carrier_interactive(void) toradex_carrier_boards[i].name, toradex_carrier_boards[i].pid4); - sprintf(message, "Choose your carrier board (provide ID): "); + snprintf(message, sizeof(message), "Choose your carrier board (provide ID): "); len = cli_readline(message); tdx_car_hw_tag.prodid = dectoul(console_buffer, NULL); do { - sprintf(message, "Enter carrier board version (e.g. V1.1B or V1.1#26): V"); + snprintf(message, sizeof(message), + "Enter carrier board version (e.g. V1.1B or V1.1#26): V"); len = cli_readline(message); } while (len < 4); @@ -763,7 +765,7 @@ static int get_cfgblock_carrier_interactive(void) } while (len < 8) { - sprintf(message, "Enter carrier board serial number: "); + snprintf(message, sizeof(message), "Enter carrier board serial number: "); len = cli_readline(message); } @@ -799,7 +801,8 @@ static int do_cfgblock_carrier_create(struct cmd_tbl *cmdtp, int flag, int argc, if (valid_cfgblock_carrier && !force_overwrite) { char message[CONFIG_SYS_CBSIZE]; - sprintf(message, "A valid Toradex Carrier config block is present, still recreate? [y/N] "); + snprintf(message, sizeof(message), + "A valid Toradex Carrier config block is present, still recreate? [y/N] "); if (!cli_readline(message)) goto out; @@ -907,8 +910,8 @@ static int do_cfgblock_create(struct cmd_tbl *cmdtp, int flag, int argc, if (!force_overwrite) { char message[CONFIG_SYS_CBSIZE]; - sprintf(message, - "A valid Toradex config block is present, still recreate? [y/N] "); + snprintf(message, sizeof(message), + "A valid Toradex config block is present, still recreate? [y/N] "); if (!cli_readline(message)) goto out; -- 2.53.0 base-commit: c704af3c8b0f37929bce8c2a4bba27d6e89919c7 branch: fix/sys-cbsize-overflow-series ^ permalink raw reply related [flat|nested] 4+ messages in thread
* [PATCH 3/3] common: cli_hush: fix console_buffer overflow on boot retry 2026-03-28 6:01 [PATCH 1/3] board: samsung: fix set_board_info() board_name buffer overflow Ngo Luong Thanh Tra 2026-03-28 6:01 ` [PATCH 2/3] board: toradex: fix tdx-cfg-block prompt " Ngo Luong Thanh Tra @ 2026-03-28 6:01 ` Ngo Luong Thanh Tra 2026-03-30 12:59 ` Rasmus Villemoes 1 sibling, 1 reply; 4+ messages in thread From: Ngo Luong Thanh Tra @ 2026-03-28 6:01 UTC (permalink / raw) To: u-boot; +Cc: Ngo Luong Thanh Tra, Casey Connolly, Tom Rini Replace strcpy() with strlcpy() when injecting the boot retry command into console_buffer. Add a BUILD_BUG_ON() to catch at compile time any configuration where CONFIG_SYS_CBSIZE is smaller than the retry command string, and use a named constant for the command so that the size check stays in sync if the string is ever changed. Fixes: 657e19f8f2dd ("cli_hush: support running bootcmd on boot retry") Signed-off-by: Ngo Luong Thanh Tra <S4210155@student.rmit.edu.au> To: u-boot@lists.denx.de --- common/cli_hush.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/common/cli_hush.c b/common/cli_hush.c index 7bd6943d3ed..6141c2959df 100644 --- a/common/cli_hush.c +++ b/common/cli_hush.c @@ -84,6 +84,7 @@ #include <cli_hush.h> #include <command.h> /* find_cmd */ #include <asm/global_data.h> +#include <linux/build_bug.h> #endif #ifndef __U_BOOT__ #include <ctype.h> /* isalpha, isdigit */ @@ -1029,7 +1030,10 @@ static void get_user_input(struct in_str *i) # ifdef CONFIG_RESET_TO_RETRY do_reset(NULL, 0, 0, NULL); # elif IS_ENABLED(CONFIG_RETRY_BOOTCMD) - strcpy(console_buffer, "run bootcmd\n"); + static const char retry_cmd[] = "run bootcmd\n"; + + BUILD_BUG_ON(sizeof(retry_cmd) - 1 > CONFIG_SYS_CBSIZE); + strlcpy(console_buffer, retry_cmd, sizeof(console_buffer)); # else # error "This only works with CONFIG_RESET_TO_RETRY or CONFIG_BOOT_RETRY_COMMAND enabled" # endif -- 2.53.0 base-commit: c704af3c8b0f37929bce8c2a4bba27d6e89919c7 branch: fix/sys-cbsize-overflow-series ^ permalink raw reply related [flat|nested] 4+ messages in thread
* Re: [PATCH 3/3] common: cli_hush: fix console_buffer overflow on boot retry 2026-03-28 6:01 ` [PATCH 3/3] common: cli_hush: fix console_buffer overflow on boot retry Ngo Luong Thanh Tra @ 2026-03-30 12:59 ` Rasmus Villemoes 0 siblings, 0 replies; 4+ messages in thread From: Rasmus Villemoes @ 2026-03-30 12:59 UTC (permalink / raw) To: Ngo Luong Thanh Tra; +Cc: u-boot, Ngo Luong Thanh Tra, Casey Connolly, Tom Rini On Sat, Mar 28 2026, Ngo Luong Thanh Tra <ngotra27101996@gmail.com> wrote: > Replace strcpy() with strlcpy() when injecting the boot retry > command into console_buffer. Add a BUILD_BUG_ON() to catch at > compile time any configuration where CONFIG_SYS_CBSIZE is smaller > than the retry command string, and use a named constant for the > command so that the size check stays in sync if the string is > ever changed. > > Fixes: 657e19f8f2dd ("cli_hush: support running bootcmd on boot retry") > Signed-off-by: Ngo Luong Thanh Tra <S4210155@student.rmit.edu.au> > To: u-boot@lists.denx.de > --- > > common/cli_hush.c | 6 +++++- > 1 file changed, 5 insertions(+), 1 deletion(-) > > diff --git a/common/cli_hush.c b/common/cli_hush.c > index 7bd6943d3ed..6141c2959df 100644 > --- a/common/cli_hush.c > +++ b/common/cli_hush.c > @@ -84,6 +84,7 @@ > #include <cli_hush.h> > #include <command.h> /* find_cmd */ > #include <asm/global_data.h> > +#include <linux/build_bug.h> > #endif > #ifndef __U_BOOT__ > #include <ctype.h> /* isalpha, isdigit */ > @@ -1029,7 +1030,10 @@ static void get_user_input(struct in_str *i) > # ifdef CONFIG_RESET_TO_RETRY > do_reset(NULL, 0, 0, NULL); > # elif IS_ENABLED(CONFIG_RETRY_BOOTCMD) > - strcpy(console_buffer, "run bootcmd\n"); > + static const char retry_cmd[] = "run bootcmd\n"; > + > + BUILD_BUG_ON(sizeof(retry_cmd) - 1 > CONFIG_SYS_CBSIZE); > + strlcpy(console_buffer, retry_cmd, sizeof(console_buffer)); Have you compiled this? The declaration of console_buffer in include/console.h does not include the size, so you should get a build error like error: invalid application of 'sizeof' to incomplete type 'char[]' And exactly because that declaration doesn't include the size, the -1 and the comparison to CONFIG_SYS_CBSIZE looks rather fishy. If anything, one should start by making the size of console_buffer part of the declaration, so that users such as here could actually do sizeof(console_buffer), and then one should not use or need to know that the size if defined in terms of (but not exactly equal to) CONFIG_SYS_CBSIZE. Also, I generally think that this whole "must use strlcpy because safer!" is broken when everything in sight are compile-time constants. Because the compiler knows about strcpy(), so it can optimize a strcpy() with a literal as source into a sequence of a few immediate stores, which is often smaller code than emitting the string literal to .rodata.str and emitting an actual strcpy() call with all the register save/restore that requires. It knows nothing about strlcpy(). Unfortunately, U-Boot builds with -Wno-array-bounds, so just declaring console_buffer with its actual size is not enough to trigger a build error with the current strcpy(). But if you want to improve stuff in this area, do something like creating a const_strcpy() helper macro which will enforce that (a) The source is a string literal (b) The destination is a char array of known size (c) Makes it a build-time error if it doesn't fit (d) Uses __builtin_strcpy(dst, src) to tell the compiler that this really is just a strcpy(), even if -fno-builtin is in effect, and let the compiler optimize as it sees fit - including eliminating the whole thing as dead stores if it sees that the destination is not actually used. Something like #define const_strcpy(d, s) ({ \ static_assert(__same_type(d, char[]), "destination must be char array"); \ static_assert(__same_type(s, const char[], "source must be a string literal"); \ static_assert(sizeof(d) >= sizeof("" s ""), "source does not fit in destination"); \ __builtin_strcpy(d, s); \ }) Rasmus ^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2026-03-30 13:00 UTC | newest] Thread overview: 4+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2026-03-28 6:01 [PATCH 1/3] board: samsung: fix set_board_info() board_name buffer overflow Ngo Luong Thanh Tra 2026-03-28 6:01 ` [PATCH 2/3] board: toradex: fix tdx-cfg-block prompt " Ngo Luong Thanh Tra 2026-03-28 6:01 ` [PATCH 3/3] common: cli_hush: fix console_buffer overflow on boot retry Ngo Luong Thanh Tra 2026-03-30 12:59 ` Rasmus Villemoes
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox