From: sashiko-bot@kernel.org
To: "Rodrigo Alencar via B4 Relay"
<devnull+rodrigo.alencar.analog.com@kernel.org>
Cc: robh@kernel.org, krzk+dt@kernel.org, conor+dt@kernel.org,
devicetree@vger.kernel.org
Subject: Re: [PATCH v12 02/11] lib: kstrtox: add kstrtoudec64() and kstrtodec64()
Date: Mon, 11 May 2026 21:14:22 +0000 [thread overview]
Message-ID: <20260511211422.B0AC6C2BCB0@smtp.kernel.org> (raw)
In-Reply-To: <20260510-adf41513-iio-driver-v12-2-34af2ed2779f@analog.com>
Thank you for your contribution! Sashiko AI review found 2 potential issue(s) to consider:
- [High] kstrtoudec64() incorrectly returns -EINVAL for strings with a decimal point when scale is 0, violating the documented truncation behavior.
- [Medium] kstrtoudec64() incorrectly returns -EINVAL for valid numbers that end in a decimal point (e.g., "123.").
--
commit 4ece498f1f16417e4dd8a8ebdad47a15b89527ef
Author: Rodrigo Alencar <rodrigo.alencar@analog.com>
lib: kstrtox: add kstrtoudec64() and kstrtodec64()
Add helpers that parses decimal numbers into 64-bit number, i.e., decimal
point numbers with pre-defined scale are parsed into a 64-bit value (fixed
precision). After the decimal point, digits beyond the specified scale
are ignored.
> diff --git a/lib/kstrtox.c b/lib/kstrtox.c
> index 97be2a39f5371..da7b5f83a3c59 100644
> --- a/lib/kstrtox.c
> +++ b/lib/kstrtox.c
[ ... ]
> @@ -392,6 +393,112 @@ int kstrtobool(const char *s, bool *res)
> }
> EXPORT_SYMBOL(kstrtobool);
>
> +static int _kstrtoudec64(const char *s, unsigned int scale, u64 *res)
> +{
> + u64 _res = 0, _frac = 0;
> + unsigned int rv;
> +
> + if (scale > 19) /* log10(2^64) = 19.26 */
> + return -EINVAL;
> +
> + if (*s != '.') {
> + rv = _parse_integer(s, 10, &_res);
> + if (rv & KSTRTOX_OVERFLOW)
> + return -ERANGE;
> + if (rv == 0)
> + return -EINVAL;
> + s += rv;
> + }
> +
> + if (*s == '.' && scale) {
Does this cause an issue when parsing a string like "123.45" with a scale
of 0?
Since scale is 0, this condition is false, leaving the pointer at the
decimal point. The parser will then fall through to the trailing character
check:
if (*s)
return -EINVAL;
and fail the conversion entirely. Should this truncate the fractional part
instead, as described in the documentation?
> + s++; /* skip decimal point */
> + rv = _parse_integer_limit(s, 10, &_frac, scale);
> + if (rv & KSTRTOX_OVERFLOW)
> + return -ERANGE;
> + if (rv == 0)
> + return -EINVAL;
Is it possible for valid numbers ending in a decimal point (like "123.")
to be rejected here?
If the string has a decimal point but no trailing digits, rv will be 0.
While this correctly catches invalid strings consisting solely of ".", it
appears it will also incorrectly fail strings where the integer portion was
already successfully parsed.
> + s += rv;
> + if (rv < scale)
> + _frac *= int_pow(10, scale - rv);
> + while (isdigit(*s)) /* truncate */
> + s++;
> + }
--
Sashiko AI review · https://sashiko.dev/#/patchset/20260510-adf41513-iio-driver-v12-0-34af2ed2779f@analog.com?part=2
next prev parent reply other threads:[~2026-05-11 21:14 UTC|newest]
Thread overview: 51+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-05-10 12:42 [PATCH v12 00/11] ADF41513/ADF41510 PLL frequency synthesizers Rodrigo Alencar via B4 Relay
2026-05-10 12:42 ` [PATCH v12 01/11] dt-bindings: iio: frequency: add adf41513 Rodrigo Alencar via B4 Relay
2026-05-10 12:42 ` [PATCH v12 02/11] lib: kstrtox: add kstrtoudec64() and kstrtodec64() Rodrigo Alencar via B4 Relay
2026-05-11 21:14 ` sashiko-bot [this message]
2026-05-12 11:39 ` Jonathan Cameron
2026-05-12 11:52 ` Rodrigo Alencar
2026-05-12 13:12 ` Andy Shevchenko
2026-05-12 13:21 ` Rodrigo Alencar
2026-05-12 13:48 ` Andy Shevchenko
2026-05-12 14:12 ` Rodrigo Alencar
2026-05-12 14:43 ` Andy Shevchenko
2026-05-12 15:11 ` Rodrigo Alencar
2026-05-12 15:21 ` Andy Shevchenko
2026-05-12 16:18 ` David Laight
2026-05-12 17:08 ` Andy Shevchenko
2026-05-12 16:35 ` Rodrigo Alencar
2026-05-12 17:13 ` Andy Shevchenko
2026-05-12 17:26 ` Rodrigo Alencar
2026-05-12 17:46 ` Andy Shevchenko
2026-05-12 18:15 ` Rodrigo Alencar
2026-05-12 19:08 ` Andy Shevchenko
2026-05-12 19:39 ` Rodrigo Alencar
2026-05-12 20:16 ` Andy Shevchenko
2026-05-13 7:14 ` Rodrigo Alencar
2026-05-13 10:09 ` David Laight
2026-05-13 9:41 ` Rodrigo Alencar
2026-05-10 12:42 ` [PATCH v12 03/11] lib: test-kstrtox: tests for kstrtodec64() and kstrtoudec64() Rodrigo Alencar via B4 Relay
2026-05-12 13:51 ` Andy Shevchenko
2026-05-10 12:42 ` [PATCH v12 04/11] lib: math: div64: add div64_s64_rem() Rodrigo Alencar via B4 Relay
2026-05-12 13:50 ` Andy Shevchenko
2026-05-10 12:42 ` [PATCH v12 05/11] iio: core: add decimal value formatting into 64-bit value Rodrigo Alencar via B4 Relay
2026-05-11 21:59 ` sashiko-bot
2026-05-12 14:35 ` Andy Shevchenko
2026-05-12 16:09 ` Rodrigo Alencar
2026-05-12 17:49 ` Andy Shevchenko
2026-05-12 19:01 ` Rodrigo Alencar
2026-05-10 12:42 ` [PATCH v12 06/11] iio: test: iio-test-format: add test case for decimal format Rodrigo Alencar via B4 Relay
2026-05-12 14:36 ` Andy Shevchenko
2026-05-12 17:02 ` Rodrigo Alencar
2026-05-12 17:51 ` Andy Shevchenko
2026-05-10 12:42 ` [PATCH v12 07/11] iio: frequency: adf41513: driver implementation Rodrigo Alencar via B4 Relay
2026-05-11 22:43 ` sashiko-bot
2026-05-10 12:42 ` [PATCH v12 08/11] iio: frequency: adf41513: handle LE synchronization feature Rodrigo Alencar via B4 Relay
2026-05-11 23:11 ` sashiko-bot
2026-05-10 12:42 ` [PATCH v12 09/11] iio: frequency: adf41513: features on frequency change Rodrigo Alencar via B4 Relay
2026-05-10 12:42 ` [PATCH v12 10/11] docs: iio: add documentation for adf41513 driver Rodrigo Alencar via B4 Relay
2026-05-11 23:44 ` sashiko-bot
2026-05-10 12:42 ` [PATCH v12 11/11] Documentation: ABI: testing: add common ABI file for iio/frequency Rodrigo Alencar via B4 Relay
2026-05-11 23:31 ` sashiko-bot
2026-05-12 11:36 ` Jonathan Cameron
2026-05-12 11:48 ` [PATCH v12 00/11] ADF41513/ADF41510 PLL frequency synthesizers Jonathan Cameron
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20260511211422.B0AC6C2BCB0@smtp.kernel.org \
--to=sashiko-bot@kernel.org \
--cc=conor+dt@kernel.org \
--cc=devicetree@vger.kernel.org \
--cc=devnull+rodrigo.alencar.analog.com@kernel.org \
--cc=krzk+dt@kernel.org \
--cc=robh@kernel.org \
--cc=sashiko@lists.linux.dev \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox