[PATCH] Input: analog: replace deprecated simple_strtoul() with kstrtouint()

Akash Sukhavasi posted 1 patch 1 month ago
drivers/input/joystick/analog.c | 8 +++++---
1 file changed, 5 insertions(+), 3 deletions(-)
[PATCH] Input: analog: replace deprecated simple_strtoul() with kstrtouint()
Posted by Akash Sukhavasi 1 month ago
The simple_strtoul() function is deprecated because it ignores
trailing garbage characters, which can mask typos in input.

Replace it with kstrtouint() in analog_parse_options() to enforce
strict input parsing.

Note that this introduces a minor, intended behavior change: while
the old code would silently parse a malformed string like "12abc"
as 12, the new code will reject it entirely and fall back to the
unconfigured state (0xff). This strict parsing is the preferred
modern behavior for kernel parameters.

Signed-off-by: Akash Sukhavasi <akash.sukhavasi@gmail.com>
---
 drivers/input/joystick/analog.c | 8 +++++---
 1 file changed, 5 insertions(+), 3 deletions(-)

diff --git a/drivers/input/joystick/analog.c b/drivers/input/joystick/analog.c
index b6f7bce1c..07ad360f8 100644
--- a/drivers/input/joystick/analog.c
+++ b/drivers/input/joystick/analog.c
@@ -653,7 +653,7 @@ static struct analog_types analog_types[] = {
 static void analog_parse_options(void)
 {
 	int i, j;
-	char *end;
+	unsigned int parsed_val;
 
 	for (i = 0; i < js_nargs; i++) {
 
@@ -664,8 +664,10 @@ static void analog_parse_options(void)
 			}
 		if (analog_types[j].name) continue;
 
-		analog_options[i] = simple_strtoul(js[i], &end, 0);
-		if (end != js[i]) continue;
+		if (kstrtouint(js[i], 0, &parsed_val) == 0) {
+			analog_options[i] = parsed_val;
+			continue;
+		}
 
 		analog_options[i] = 0xff;
 		if (!strlen(js[i])) continue;
-- 
2.54.0
Re: [PATCH] Input: analog: replace deprecated simple_strtoul() with kstrtouint()
Posted by David Laight 1 month ago
On Fri,  8 May 2026 21:40:48 -0500
Akash Sukhavasi <akash.sukhavasi@gmail.com> wrote:

> The simple_strtoul() function is deprecated because it ignores
> trailing garbage characters, which can mask typos in input.
> 
> Replace it with kstrtouint() in analog_parse_options() to enforce
> strict input parsing.
> 
> Note that this introduces a minor, intended behavior change: while
> the old code would silently parse a malformed string like "12abc"
> as 12, the new code will reject it entirely and fall back to the
> unconfigured state (0xff). This strict parsing is the preferred
> modern behavior for kernel parameters.

However that might break existing systems.
So I'm not at all sure it should be done.

	David

> 
> Signed-off-by: Akash Sukhavasi <akash.sukhavasi@gmail.com>
> ---
>  drivers/input/joystick/analog.c | 8 +++++---
>  1 file changed, 5 insertions(+), 3 deletions(-)
> 
> diff --git a/drivers/input/joystick/analog.c b/drivers/input/joystick/analog.c
> index b6f7bce1c..07ad360f8 100644
> --- a/drivers/input/joystick/analog.c
> +++ b/drivers/input/joystick/analog.c
> @@ -653,7 +653,7 @@ static struct analog_types analog_types[] = {
>  static void analog_parse_options(void)
>  {
>  	int i, j;
> -	char *end;
> +	unsigned int parsed_val;
>  
>  	for (i = 0; i < js_nargs; i++) {
>  
> @@ -664,8 +664,10 @@ static void analog_parse_options(void)
>  			}
>  		if (analog_types[j].name) continue;
>  
> -		analog_options[i] = simple_strtoul(js[i], &end, 0);
> -		if (end != js[i]) continue;
> +		if (kstrtouint(js[i], 0, &parsed_val) == 0) {
> +			analog_options[i] = parsed_val;
> +			continue;
> +		}
>  
>  		analog_options[i] = 0xff;
>  		if (!strlen(js[i])) continue;
Re: [PATCH] Input: analog: replace deprecated simple_strtoul() with kstrtouint()
Posted by Akash Sukhavasi 4 weeks, 1 day ago
On Sat, May 9, 2026 at 4:55 AM David Laight <david.laight.linux@gmail.com> wrote:

> However that might break existing systems.
> So I'm not at all sure it should be done.

Hi David,

You're right. It could introduce regressions for users of analog
joysticks passing module parameters via scripts or boot configs.

Additionally, digging through list history: Dmitry reviewed this
same call in 2011 [1] and chose to leave it, noting the complex
parsing semantics were intentional for this context.

Withdrawing the patch. Thanks for the review.

[1] https://lore.kernel.org/all/20111108034805.GA21927@core.coreip.homeip.net/

Thanks,
Akash