drivers/input/joystick/analog.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-)
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
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;
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
© 2016 - 2026 Red Hat, Inc.