* [PATCH 0/2] minor lib/cmdline enhancements
@ 2026-01-22 11:12 Dmitry Antipov
2026-01-22 11:12 ` [PATCH 1/2] lib/cmdline_kunit: add test case for memparse() Dmitry Antipov
2026-01-22 11:12 ` [PATCH 2/2] lib/cmdline: adjust a few comments to fix kernel-doc -Wreturn warnings Dmitry Antipov
0 siblings, 2 replies; 7+ messages in thread
From: Dmitry Antipov @ 2026-01-22 11:12 UTC (permalink / raw)
To: Andy Shevchenko
Cc: Andrew Morton, Kees Cook, Darrick J . Wong, linux-hardening,
Dmitry Antipov
Add KUnit-based test for 'memparse()' and fix
kernel-doc glitches found in lib/cmdline.c.
Dmitry Antipov (2):
lib/cmdline_kunit: add test case for memparse()
lib/cmdline: adjust a few comments to fix kernel-doc -Wreturn warnings
lib/cmdline.c | 7 ++++--
lib/tests/cmdline_kunit.c | 50 +++++++++++++++++++++++++++++++++++++++
2 files changed, 55 insertions(+), 2 deletions(-)
--
2.52.0
^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH 1/2] lib/cmdline_kunit: add test case for memparse()
2026-01-22 11:12 [PATCH 0/2] minor lib/cmdline enhancements Dmitry Antipov
@ 2026-01-22 11:12 ` Dmitry Antipov
2026-01-22 11:46 ` Andy Shevchenko
2026-01-22 11:12 ` [PATCH 2/2] lib/cmdline: adjust a few comments to fix kernel-doc -Wreturn warnings Dmitry Antipov
1 sibling, 1 reply; 7+ messages in thread
From: Dmitry Antipov @ 2026-01-22 11:12 UTC (permalink / raw)
To: Andy Shevchenko
Cc: Andrew Morton, Kees Cook, Darrick J . Wong, linux-hardening,
Dmitry Antipov
Better late than never, now there is a long-awaited basic
test for 'memparse()' which is provided by cmdline.c.
Suggested-by: Andy Shevchenko <andriy.shevchenko@intel.com>
Signed-off-by: Dmitry Antipov <dmantipov@yandex.ru>
---
lib/tests/cmdline_kunit.c | 50 +++++++++++++++++++++++++++++++++++++++
1 file changed, 50 insertions(+)
diff --git a/lib/tests/cmdline_kunit.c b/lib/tests/cmdline_kunit.c
index c1602f797637..afde35f44690 100644
--- a/lib/tests/cmdline_kunit.c
+++ b/lib/tests/cmdline_kunit.c
@@ -139,11 +139,61 @@ static void cmdline_test_range(struct kunit *test)
} while (++i < ARRAY_SIZE(cmdline_test_range_strings));
}
+struct cmdline_test_memparse_entry {
+ const char *input;
+ const char *unrecognized;
+ unsigned long long result;
+};
+
+static const struct cmdline_test_memparse_entry testdata[] = {
+ { "0", "", 0ULL },
+ { "1", "", 1ULL },
+ { "a", "a", 0ULL },
+ { "0xb", "", 11ULL },
+ { "0xz", "x", 0ULL },
+ { "1234", "", 1234ULL },
+ { "04567", "", 2423ULL },
+ { "0x9876", "", 39030LL },
+ { "05678", "8", 375ULL },
+ { "0xabcdefz", "z", 11259375ULL },
+ { "0cdba", "c", 0ULL },
+ { "4K", "", 4096ULL },
+ { "0x10k@0xaaaabbbb", "@", 16384ULL },
+ { "32M", "", 33554432ULL },
+ { "067m:foo", ":", 57671680ULL },
+ { "2G;bar=baz", ";", 2147483648ULL },
+ { "07gz", "z", 7516192768ULL },
+ { "3T+data", "+", 3298534883328ULL },
+ { "04t,ro", ",", 4398046511104ULL },
+ { "012p", "", 11258999068426240ULL },
+ { "7P,sync", ",", 7881299347898368ULL },
+ { "0x2e", "", 46ULL },
+ { "2E and more", " ", 2305843009213693952ULL },
+ { "18446744073709551615", "", 18446744073709551615ULL },
+ { "18446744073709551616", "", 0ULL }
+};
+
+static void cmdline_test_memparse(struct kunit *test)
+{
+ const struct cmdline_test_memparse_entry *e;
+ unsigned long long ret;
+ char *retptr;
+
+ for (e = testdata; e < testdata + ARRAY_SIZE(testdata); e++) {
+ ret = memparse(e->input, &retptr);
+ KUNIT_EXPECT_EQ_MSG(test, ret, e->result,
+ " when parsing '%s'", e->input);
+ KUNIT_EXPECT_EQ_MSG(test, *retptr, *e->unrecognized,
+ " when parsing '%s'", e->input);
+ }
+}
+
static struct kunit_case cmdline_test_cases[] = {
KUNIT_CASE(cmdline_test_noint),
KUNIT_CASE(cmdline_test_lead_int),
KUNIT_CASE(cmdline_test_tail_int),
KUNIT_CASE(cmdline_test_range),
+ KUNIT_CASE(cmdline_test_memparse),
{}
};
--
2.52.0
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH 2/2] lib/cmdline: adjust a few comments to fix kernel-doc -Wreturn warnings
2026-01-22 11:12 [PATCH 0/2] minor lib/cmdline enhancements Dmitry Antipov
2026-01-22 11:12 ` [PATCH 1/2] lib/cmdline_kunit: add test case for memparse() Dmitry Antipov
@ 2026-01-22 11:12 ` Dmitry Antipov
2026-01-22 11:40 ` Andy Shevchenko
1 sibling, 1 reply; 7+ messages in thread
From: Dmitry Antipov @ 2026-01-22 11:12 UTC (permalink / raw)
To: Andy Shevchenko
Cc: Andrew Morton, Kees Cook, Darrick J . Wong, linux-hardening,
Dmitry Antipov
Fix 'get_option()', 'memparse()' and 'parse_option_str()' comments
to match the commonly used style as suggested by kernel-doc -Wreturn.
Suggested-by: Andy Shevchenko <andriy.shevchenko@intel.com>
Signed-off-by: Dmitry Antipov <dmantipov@yandex.ru>
---
lib/cmdline.c | 7 +++++--
1 file changed, 5 insertions(+), 2 deletions(-)
diff --git a/lib/cmdline.c b/lib/cmdline.c
index 90ed997d9570..9ac23a0aecf7 100644
--- a/lib/cmdline.c
+++ b/lib/cmdline.c
@@ -43,7 +43,7 @@ static int get_range(char **str, int *pint, int n)
* When @pint is NULL the function can be used as a validator of
* the current option in the string.
*
- * Return values:
+ * Return:
* 0 - no int in string
* 1 - int found, no subsequent comma
* 2 - int found including a subsequent comma
@@ -145,6 +145,9 @@ EXPORT_SYMBOL(get_options);
*
* Parses a string into a number. The number stored at @ptr is
* potentially suffixed with K, M, G, T, P, E.
+ *
+ * Return: The value as recognized by simple_strtoull() multiplied
+ * by the value as specified by suffix, if any.
*/
unsigned long long memparse(const char *ptr, char **retptr)
@@ -198,7 +201,7 @@ EXPORT_SYMBOL(memparse);
* This function parses a string containing a comma-separated list of
* strings like a=b,c.
*
- * Return true if there's such option in the string, or return false.
+ * Return: True if there's such option in the string or false otherwise.
*/
bool parse_option_str(const char *str, const char *option)
{
--
2.52.0
^ permalink raw reply related [flat|nested] 7+ messages in thread
* Re: [PATCH 2/2] lib/cmdline: adjust a few comments to fix kernel-doc -Wreturn warnings
2026-01-22 11:12 ` [PATCH 2/2] lib/cmdline: adjust a few comments to fix kernel-doc -Wreturn warnings Dmitry Antipov
@ 2026-01-22 11:40 ` Andy Shevchenko
0 siblings, 0 replies; 7+ messages in thread
From: Andy Shevchenko @ 2026-01-22 11:40 UTC (permalink / raw)
To: Dmitry Antipov
Cc: Andrew Morton, Kees Cook, Darrick J . Wong, linux-hardening
On Thu, Jan 22, 2026 at 02:12:54PM +0300, Dmitry Antipov wrote:
> Fix 'get_option()', 'memparse()' and 'parse_option_str()' comments
> to match the commonly used style as suggested by kernel-doc -Wreturn.
So, I gave you a tag for this change in the other series and it's dropped.
Why?
--
With Best Regards,
Andy Shevchenko
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH 1/2] lib/cmdline_kunit: add test case for memparse()
2026-01-22 11:12 ` [PATCH 1/2] lib/cmdline_kunit: add test case for memparse() Dmitry Antipov
@ 2026-01-22 11:46 ` Andy Shevchenko
2026-01-22 15:00 ` Dmitry Antipov
0 siblings, 1 reply; 7+ messages in thread
From: Andy Shevchenko @ 2026-01-22 11:46 UTC (permalink / raw)
To: Dmitry Antipov
Cc: Andrew Morton, Kees Cook, Darrick J . Wong, linux-hardening
On Thu, Jan 22, 2026 at 02:12:53PM +0300, Dmitry Antipov wrote:
> Better late than never, now there is a long-awaited basic
> test for 'memparse()' which is provided by cmdline.c.
Thank you for this! Really appreciate!
See a couple of nit-picks below.
Reviewed-by: Andy Shevchenko <andriy.shevchenko@intel.com>
assuming they will be amended.
...
> +static const struct cmdline_test_memparse_entry testdata[] = {
> + { "0", "", 0ULL },
> + { "1", "", 1ULL },
> + { "a", "a", 0ULL },
> + { "0xb", "", 11ULL },
> + { "0xz", "x", 0ULL },
> + { "1234", "", 1234ULL },
> + { "04567", "", 2423ULL },
> + { "0x9876", "", 39030LL },
> + { "05678", "8", 375ULL },
> + { "0xabcdefz", "z", 11259375ULL },
> + { "0cdba", "c", 0ULL },
> + { "4K", "", 4096ULL },
> + { "0x10k@0xaaaabbbb", "@", 16384ULL },
> + { "32M", "", 33554432ULL },
These can utilize constants from sizes.h.
> + { "067m:foo", ":", 57671680ULL },
> + { "2G;bar=baz", ";", 2147483648ULL },
Ditto.
> + { "07gz", "z", 7516192768ULL },
> + { "3T+data", "+", 3298534883328ULL },
> + { "04t,ro", ",", 4398046511104ULL },
Ditto. (However I don't remember the maximum available there.)
> + { "012p", "", 11258999068426240ULL },
> + { "7P,sync", ",", 7881299347898368ULL },
> + { "0x2e", "", 46ULL },
> + { "2E and more", " ", 2305843009213693952ULL },
> + { "18446744073709551615", "", 18446744073709551615ULL },
> + { "18446744073709551616", "", 0ULL }
Leave trailing comma as it's not a terminator.
Can we also have one with more than 20 decimal digits?
> +};
--
With Best Regards,
Andy Shevchenko
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH 1/2] lib/cmdline_kunit: add test case for memparse()
2026-01-22 11:46 ` Andy Shevchenko
@ 2026-01-22 15:00 ` Dmitry Antipov
2026-01-22 15:25 ` Andy Shevchenko
0 siblings, 1 reply; 7+ messages in thread
From: Dmitry Antipov @ 2026-01-22 15:00 UTC (permalink / raw)
To: Andy Shevchenko
Cc: Andrew Morton, Kees Cook, Darrick J . Wong, linux-hardening
On Thu, 2026-01-22 at 13:46 +0200, Andy Shevchenko wrote:
> Can we also have one with more than 20 decimal digits?
Hmmm... running simple userspace test,
strtoull("569202370375329612767", ...)
returns ULLONG_MAX (and sets errno to -ERANGE), but
memparse("569202370375329612767", ...)
seems blindly overflows to -2646695909666487329.
I'm strongly suspecting that 'memparse()' should be carefully
tweaked to use 'kstrtoull()' instead of 'simple_strtoull()'.
Dmitry
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH 1/2] lib/cmdline_kunit: add test case for memparse()
2026-01-22 15:00 ` Dmitry Antipov
@ 2026-01-22 15:25 ` Andy Shevchenko
0 siblings, 0 replies; 7+ messages in thread
From: Andy Shevchenko @ 2026-01-22 15:25 UTC (permalink / raw)
To: Dmitry Antipov
Cc: Andrew Morton, Kees Cook, Darrick J . Wong, linux-hardening
On Thu, Jan 22, 2026 at 06:00:43PM +0300, Dmitry Antipov wrote:
> On Thu, 2026-01-22 at 13:46 +0200, Andy Shevchenko wrote:
>
> > Can we also have one with more than 20 decimal digits?
>
> Hmmm... running simple userspace test,
>
> strtoull("569202370375329612767", ...)
>
> returns ULLONG_MAX (and sets errno to -ERANGE), but
>
> memparse("569202370375329612767", ...)
>
> seems blindly overflows to -2646695909666487329.
>
> I'm strongly suspecting that 'memparse()' should be carefully
> tweaked to use 'kstrtoull()' instead of 'simple_strtoull()'.
It will require an intermediate buffer which your series is exactly against,
right? It's better to actually create a safe wrapper on top of
simple_strtoull().
The points are the following:
If there is a decimal base, we need to count leading 0:s.
Then add a check for how many characters were actually processed.
Partially something similar is done here:
drivers/crypto/intel/qat/qat_common/qat_uclo.c:206
--
With Best Regards,
Andy Shevchenko
^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2026-01-22 15:25 UTC | newest]
Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-01-22 11:12 [PATCH 0/2] minor lib/cmdline enhancements Dmitry Antipov
2026-01-22 11:12 ` [PATCH 1/2] lib/cmdline_kunit: add test case for memparse() Dmitry Antipov
2026-01-22 11:46 ` Andy Shevchenko
2026-01-22 15:00 ` Dmitry Antipov
2026-01-22 15:25 ` Andy Shevchenko
2026-01-22 11:12 ` [PATCH 2/2] lib/cmdline: adjust a few comments to fix kernel-doc -Wreturn warnings Dmitry Antipov
2026-01-22 11:40 ` Andy Shevchenko
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox