[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