net: usb: pegasus: replace simple_strtoul with kstrtouint

simple_strtoul() is deprecated as it has no error checking. Replace it
with kstrtouint() which returns an error code on invalid input, and add
appropriate error handling.

Also add a NULL check before parsing flags, since strsep() can set id
to NULL if the input has fewer tokens than expected.

Preserve the original behavior for a trailing colon by checking *id
before parsing flags, so an empty string results in flags = 0 rather
than an error.

Signed-off-by: Sajal Gupta <sajal2005gupta@gmail.com>
Link: https://patch.msgid.link/20260509095518.2640-1-sajal2005gupta@gmail.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
Sajal Gupta 2026-05-09 15:21:48 +05:30 committed by Jakub Kicinski
parent d0273dbe8b
commit 1f8fd0fe56

View File

@ -1328,14 +1328,18 @@ static void __init parse_id(char *id)
unsigned int vendor_id = 0, device_id = 0, flags = 0, i = 0;
char *token, *name = NULL;
if ((token = strsep(&id, ":")) != NULL)
token = strsep(&id, ":");
if (token)
name = token;
/* name now points to a null terminated string*/
if ((token = strsep(&id, ":")) != NULL)
vendor_id = simple_strtoul(token, NULL, 16);
if ((token = strsep(&id, ":")) != NULL)
device_id = simple_strtoul(token, NULL, 16);
flags = simple_strtoul(id, NULL, 16);
token = strsep(&id, ":");
if (token && kstrtouint(token, 16, &vendor_id))
return;
token = strsep(&id, ":");
if (token && kstrtouint(token, 16, &device_id))
return;
if (id && *id && kstrtouint(id, 16, &flags))
return;
pr_info("%s: new device %s, vendor ID 0x%04x, device ID 0x%04x, flags: 0x%x\n",
driver_name, name, vendor_id, device_id, flags);