From: Geert Uytterhoeven Date: Fri, 3 Apr 2026 08:41:29 +0000 (+0200) Subject: firmware: arm_scmi: quirk: Improve quirk range parsing X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=6991e5de9709b0df1f37029e5d0ada6df69aea99;p=thirdparty%2Fkernel%2Flinux.git firmware: arm_scmi: quirk: Improve quirk range parsing When a range contains only an end ("-X"), the number string is parsed twice, as both "sep == first" and "sep != last" are true. Fix this by dropping the superfluous number parsing for "sep == first". This does have a harmless functional impact for the unbounded range: "-" is now accepted, while it was rejected before. Signed-off-by: Geert Uytterhoeven Link: https://patch.msgid.link/fe257b3b7b7b5c17fd0e5727bb9746c731bd7e3c.1775205358.git.geert+renesas@glider.be (sudeep.holla: Initialise ret to 0 as it will be uninitialise for "-" range) Signed-off-by: Sudeep Holla --- diff --git a/drivers/firmware/arm_scmi/quirks.c b/drivers/firmware/arm_scmi/quirks.c index 03848283c2a07..b31f23e2bbbcb 100644 --- a/drivers/firmware/arm_scmi/quirks.c +++ b/drivers/firmware/arm_scmi/quirks.c @@ -219,9 +219,9 @@ static unsigned int scmi_quirk_signature(const char *vend, const char *sub_vend) static int scmi_quirk_range_parse(struct scmi_quirk *quirk) { const char *last, *first __free(kfree) = NULL; + int ret = 0; size_t len; char *sep; - int ret; quirk->start_range = 0; quirk->end_range = 0xFFFFFFFF; @@ -238,16 +238,15 @@ static int scmi_quirk_range_parse(struct scmi_quirk *quirk) if (sep) *sep = '\0'; - if (sep == first) /* -X */ - ret = kstrtouint(first + 1, 0, &quirk->end_range); - else /* X OR X- OR X-y */ + if (sep != first) /* X OR X- OR X-y */ { ret = kstrtouint(first, 0, &quirk->start_range); - if (ret) - return ret; + if (ret) + return ret; + } if (!sep) quirk->end_range = quirk->start_range; - else if (sep != last) /* x-Y */ + else if (sep != last) /* -X OR x-Y */ ret = kstrtouint(sep + 1, 0, &quirk->end_range); if (quirk->start_range > quirk->end_range)