[PATCH v2] kconfig/lxdialog: replace strcpy() with strlcpy() in inputbox.c

Suchit Karunakaran posted 1 patch 2 months, 1 week ago
scripts/kconfig/lxdialog/inputbox.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
[PATCH v2] kconfig/lxdialog: replace strcpy() with strlcpy() in inputbox.c
Posted by Suchit Karunakaran 2 months, 1 week ago
strcpy() performs no bounds checking and can lead to buffer overflows if
the input string exceeds the destination buffer size. This patch replaces
it with strlcpy(), which ensures the input is always NULL-terminated,
prevents overflows, following kernel coding guidelines.

Signed-off-by: Suchit Karunakaran <suchitkarunakaran@gmail.com>

Changes since v1:
- Replace strscpy with strlcpy

---
 scripts/kconfig/lxdialog/inputbox.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/scripts/kconfig/lxdialog/inputbox.c b/scripts/kconfig/lxdialog/inputbox.c
index 3c6e24b20f5b..ca778e270346 100644
--- a/scripts/kconfig/lxdialog/inputbox.c
+++ b/scripts/kconfig/lxdialog/inputbox.c
@@ -40,7 +40,7 @@ int dialog_inputbox(const char *title, const char *prompt, int height, int width
 	if (!init)
 		instr[0] = '\0';
 	else
-		strcpy(instr, init);
+		strlcpy(instr, init, MAX_LEN + 1);
 
 do_resize:
 	if (getmaxy(stdscr) <= (height - INPUTBOX_HEIGHT_MIN))
-- 
2.50.1
Re: [PATCH v2] kconfig/lxdialog: replace strcpy() with strlcpy() in inputbox.c
Posted by Nicolas Schier 2 months, 1 week ago
On Sat, Jul 26, 2025 at 11:25:24PM +0530, Suchit Karunakaran wrote:
> strcpy() performs no bounds checking and can lead to buffer overflows if
> the input string exceeds the destination buffer size. This patch replaces
> it with strlcpy(), which ensures the input is always NULL-terminated,
> prevents overflows, following kernel coding guidelines.
> 
> Signed-off-by: Suchit Karunakaran <suchitkarunakaran@gmail.com>
> 
> Changes since v1:
> - Replace strscpy with strlcpy
> 
> ---
>  scripts/kconfig/lxdialog/inputbox.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/scripts/kconfig/lxdialog/inputbox.c b/scripts/kconfig/lxdialog/inputbox.c
> index 3c6e24b20f5b..ca778e270346 100644
> --- a/scripts/kconfig/lxdialog/inputbox.c
> +++ b/scripts/kconfig/lxdialog/inputbox.c
> @@ -40,7 +40,7 @@ int dialog_inputbox(const char *title, const char *prompt, int height, int width
>  	if (!init)
>  		instr[0] = '\0';
>  	else
> -		strcpy(instr, init);
> +		strlcpy(instr, init, MAX_LEN + 1);

oh, I am sorry for the bad recommendation.  On my Debian bookworm arm64 
machine (w/o libbsd0), this does not compile as strlcpy() is not 
available (same as reported by kernel test robot [1]).  As libbsd0 it 
not a documented dependency, strlcpy() should then probably not be used 
either (and Documentation/process/deprecated.rst also argues against 
it).

So, keeping close to Masahiros mail [2] a few weeks ago, what about 
this?

	else {
		strncpy(instr, init, sizeof(dialog_input_result)-1);
		instr[sizeof(dialog_input_result)-1) = '\0';
	}

Kind regards,
Nicolas


[1]: https://lore.kernel.org/linux-kbuild/202507270411.j9vfofzH-lkp@intel.com/
[2]: https://lore.kernel.org/linux-kbuild/CAK7LNASH7HyQZtPjerws7K8Smn1OXeDAXODdB9VaULXiYOitQg@mail.gmail.com/
Re: [PATCH v2] kconfig/lxdialog: replace strcpy() with strlcpy() in inputbox.c
Posted by Suchit K 2 months, 1 week ago
On Sun, 27 Jul 2025 at 21:49, Nicolas Schier <nicolas.schier@linux.dev> wrote:
>
> On Sat, Jul 26, 2025 at 11:25:24PM +0530, Suchit Karunakaran wrote:
> > strcpy() performs no bounds checking and can lead to buffer overflows if
> > the input string exceeds the destination buffer size. This patch replaces
> > it with strlcpy(), which ensures the input is always NULL-terminated,
> > prevents overflows, following kernel coding guidelines.
> >
> > Signed-off-by: Suchit Karunakaran <suchitkarunakaran@gmail.com>
> >
> > Changes since v1:
> > - Replace strscpy with strlcpy
> >
> > ---
> >  scripts/kconfig/lxdialog/inputbox.c | 2 +-
> >  1 file changed, 1 insertion(+), 1 deletion(-)
> >
> > diff --git a/scripts/kconfig/lxdialog/inputbox.c b/scripts/kconfig/lxdialog/inputbox.c
> > index 3c6e24b20f5b..ca778e270346 100644
> > --- a/scripts/kconfig/lxdialog/inputbox.c
> > +++ b/scripts/kconfig/lxdialog/inputbox.c
> > @@ -40,7 +40,7 @@ int dialog_inputbox(const char *title, const char *prompt, int height, int width
> >       if (!init)
> >               instr[0] = '\0';
> >       else
> > -             strcpy(instr, init);
> > +             strlcpy(instr, init, MAX_LEN + 1);
>
> oh, I am sorry for the bad recommendation.  On my Debian bookworm arm64
> machine (w/o libbsd0), this does not compile as strlcpy() is not
> available (same as reported by kernel test robot [1]).  As libbsd0 it
> not a documented dependency, strlcpy() should then probably not be used
> either (and Documentation/process/deprecated.rst also argues against
> it).
>
> So, keeping close to Masahiros mail [2] a few weeks ago, what about
> this?
>
>         else {
>                 strncpy(instr, init, sizeof(dialog_input_result)-1);
>                 instr[sizeof(dialog_input_result)-1) = '\0';
>         }
>

Yeah even I faced the same error. I initially tested it on Arch Linux
and it worked somehow. However, it didn't work on Debian. I'll send v3
with the changes as you suggested. Thanks for reviewing.