Re: [PATCH next] drivers/misc/kgdbts: Replace strlen() strcpy() pair with strscpy()
From: Daniel Thompson
Date: Wed Jun 24 2026 - 06:30:57 EST
On Sat, Jun 06, 2026 at 09:27:43PM +0100, david.laight.linux@xxxxxxxxx wrote:
> From: David Laight <david.laight.linux@xxxxxxxxx>
>
> Use the result of strscpy() for the options overflow check.
> Use two argument strscpy(config, kmessage) to ensure no overflow.
>
> Signed-off-by: David Laight <david.laight.linux@xxxxxxxxx>
> ---
> This is one of a group of patches that remove potentially unbounded
> strcpy() calls.
>
> They are mostly replaced by strscpy() or, when strlen() has just been
> called, with memcpy() (usually including the '\0').
>
> Calls with copy string literals into arrays are left unchanged.
> They are safe and easily detected as such.
>
> The changes were made by getting the compiler to detect the calls and
> then fixing the code by hand.
>
> Note that all the changes are only compile tested.
>
> Some Makefiles were changed to allow files to contain strcpy().
> As well as 'difficult to fix' files, this included 'show' functions
> as they really need to use sysfs_emit() or seq_printf().
>
> All the patches are being sent individually to avoid very long cc lists.
> Apologies for the terse commit messages and likely unexpected tags.
> (There are about 100 patches in total.)
>
> drivers/misc/kgdbts.c | 9 ++++-----
> 1 file changed, 4 insertions(+), 5 deletions(-)
>
> diff --git a/drivers/misc/kgdbts.c b/drivers/misc/kgdbts.c
> index 9d3218330f0a..2c8f10b8ac74 100644
> --- a/drivers/misc/kgdbts.c
> +++ b/drivers/misc/kgdbts.c
> @@ -1069,11 +1069,10 @@ static void kgdbts_run_tests(void)
>
> static int __init kgdbts_option_setup(char *opt)
> {
> - if (strlen(opt) >= MAX_CONFIG_LEN) {
> + if (strscpy(config, opt) < 0) {
> + config[0] = 0;
This line isn't mentioned in the description.
Daniel.
> printk(KERN_ERR "kgdbts: config string too long\n");
> - return 1;
> }
> - strcpy(config, opt);
> return 1;
> }
>
> @@ -1144,7 +1143,7 @@ static int param_set_kgdbts_var(const char *kmessage,
>
> /* Only copy in the string if the init function has not run yet */
> if (configured < 0) {
> - strcpy(config, kmessage);
> + strscpy(config, kmessage);
> return 0;
> }
>
> @@ -1153,7 +1152,7 @@ static int param_set_kgdbts_var(const char *kmessage,
> return -EBUSY;
> }
>
> - strcpy(config, kmessage);
> + strscpy(config, kmessage);
> /* Chop out \n char as a result of echo */
> if (len && config[len - 1] == '\n')
> config[len - 1] = '\0';
> --
> 2.39.5
>