[PATCH v3] ALSA: control: Fix parsing of numeric fields

From: Sreeraj S Kurup

Date: Sun Nov 08 2026 - 07:49:15 EST


parse_uint() passes the remaining input string to kstrtoull().

When the input contains comma-separated fields, the string
contains both the numeric value and the following fields.

For example, with:

device=1,subdevice=0,name=Master

kstrtoull() receives "1,subdevice=0,name=Master" and fails
to parse the numeric value.

Stop parsing at the next comma and pass only the numeric
field to kstrtouint().

This allows numeric fields to be parsed correctly in
comma-separated input.

Fixes: a135dfb5de15 ("ALSA: led control - add sysfs kcontrol LED marking layer")
Signed-off-by: Sreeraj S Kurup <sreekuttan2156239@xxxxxxxxx>
---
v3:
- No code changes. Retain the v2 implementation after
comparing the alternative approaches.
v2:
- Add the Fixes trailer.

sound/core/control_led.c | 18 +++++++++++++-----
1 file changed, 13 insertions(+), 5 deletions(-)

diff --git a/sound/core/control_led.c b/sound/core/control_led.c
index 501387287ae6..3f54af2cb505 100644
--- a/sound/core/control_led.c
+++ b/sound/core/control_led.c
@@ -458,11 +458,19 @@ static char *find_eos(char *s)

static char *parse_uint(char *s, unsigned int *val)
{
- unsigned long long res;
- if (kstrtoull(s, 10, &res))
- res = 0;
- *val = res;
- return find_eos(s);
+ char *end = s;
+ char delimiter;
+
+ while (*end && *end != ',')
+ end++;
+
+ delimiter = *end;
+ *end = '\0';
+ if (kstrtouint(s, 10, val))
+ *val = 0;
+ *end = delimiter;
+
+ return delimiter ? end + 1 : end;
}

static char *parse_string(char *s, char *val, size_t val_size)
--
2.55.0