From nobody Thu Apr 2 05:05:02 2026 Received: from forward102b.mail.yandex.net (forward102b.mail.yandex.net [178.154.239.149]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 4D51135D5F6; Thu, 12 Feb 2026 16:44:20 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=178.154.239.149 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770914662; cv=none; b=riGIr3tQQcs8aNbjA8hD5LgAfhAWyhxr0NHa65pGkHEBODkE63rCFSZ7k/WECQe4Wahw6QECg4sAoQl7nx2tuVd60XHUqS6kNgLXi4yvtUav5pg1qUedGuhVlVLLTvi57T0zcD5faoW39dGZv6DFC3t9aSXu0fzeyFDfiqGZfms= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770914662; c=relaxed/simple; bh=dC5IQjg7bcOQhlmLMknzcy3NvAHdhJtqPR4YtAD/p8w=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=YzGX4J4/XO6U4X48p0qN/smrBcwLJN+OYpdIWYvNVD/X9x4VQC0xuHZH54GYpzLAOwaPiiYGLvxeb/zwp7Lj6cFCc33RwNLQwX22cT7Pkc0aT0kYZVZGP801AykbDsqgiIo7sy6LmJdFRSSMq28BalEU1zOa7d/U3s2IFjJVNug= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=yandex.ru; spf=pass smtp.mailfrom=yandex.ru; dkim=pass (1024-bit key) header.d=yandex.ru header.i=@yandex.ru header.b=i0YZgv3d; arc=none smtp.client-ip=178.154.239.149 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=yandex.ru Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=yandex.ru Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=yandex.ru header.i=@yandex.ru header.b="i0YZgv3d" Received: from mail-nwsmtp-smtp-production-main-91.sas.yp-c.yandex.net (mail-nwsmtp-smtp-production-main-91.sas.yp-c.yandex.net [IPv6:2a02:6b8:c1e:3990:0:640:454b:0]) by forward102b.mail.yandex.net (Yandex) with ESMTPS id C36D0C007E; Thu, 12 Feb 2026 19:44:18 +0300 (MSK) Received: by mail-nwsmtp-smtp-production-main-91.sas.yp-c.yandex.net (smtp/Yandex) with ESMTPSA id EiXcAWCGxeA0-nj3Xj5Zf; Thu, 12 Feb 2026 19:44:18 +0300 X-Yandex-Fwd: 1 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yandex.ru; s=mail; t=1770914658; bh=7ca1fZMmWTMdlSKBrBQjmsvVq/wZ571jbt66Zhf0g7M=; h=Message-ID:Date:In-Reply-To:Cc:Subject:References:To:From; b=i0YZgv3dA9D5IIJUO4gkuJJly4E3lBej+6m+tBhOd1a5i3fj5Wu7eHArwtshwjvIt rxOmPeP5VqO4hu+fA1TD3giFiQIFt61iHNOFG+RnfKXr/Q8MxRSy3cXwJUuOzcy3xS dLiIa1CglizXrLmiB99Hd4aEt/Y/aVYlrbs4NcxE= Authentication-Results: mail-nwsmtp-smtp-production-main-91.sas.yp-c.yandex.net; dkim=pass header.i=@yandex.ru From: Dmitry Antipov To: Andy Shevchenko , Andrew Morton Cc: David Laight , Kees Cook , "Darrick J . Wong" , linux-hardening@vger.kernel.org, linux-kernel@vger.kernel.org, Dmitry Antipov Subject: [PATCH v8 4/5] lib/cmdline_kunit: add test case for memparse() Date: Thu, 12 Feb 2026 19:44:12 +0300 Message-ID: <20260212164413.889625-5-dmantipov@yandex.ru> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260212164413.889625-1-dmantipov@yandex.ru> References: <20260212164413.889625-1-dmantipov@yandex.ru> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Better late than never, now there is a long-awaited basic test for 'memparse()' which is provided by cmdline.c. Suggested-by: Andy Shevchenko Reviewed-by: Andy Shevchenko Signed-off-by: Dmitry Antipov --- v7 and upwards: bump version to match the series v6: tests to check whether valid-suffix-only string is handled as unrecogni= zed v5: even more tests to trigger overflow with size suffix v4: move actual overflow tests to test-kstrtox.c v3: adjust style as suggested by Andy v2: few more test cases to trigger overflows --- lib/tests/cmdline_kunit.c | 56 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) diff --git a/lib/tests/cmdline_kunit.c b/lib/tests/cmdline_kunit.c index c1602f797637..18b19c85baef 100644 --- a/lib/tests/cmdline_kunit.c +++ b/lib/tests/cmdline_kunit.c @@ -6,6 +6,7 @@ #include #include #include +#include #include =20 static const char *cmdline_test_strings[] =3D { @@ -139,11 +140,66 @@ static void cmdline_test_range(struct kunit *test) } while (++i < ARRAY_SIZE(cmdline_test_range_strings)); } =20 +struct cmdline_test_memparse_entry { + const char *input; + const char *unrecognized; + unsigned long long result; +}; + +static const struct cmdline_test_memparse_entry testdata[] =3D { + { "0", "", 0ULL }, + { "1", "", 1ULL }, + { "a", "a", 0ULL }, + { "k", "k", 0ULL }, + { "E", "E", 0ULL }, + { "0xb", "", 11ULL }, + { "0xz", "x", 0ULL }, + { "1234", "", 1234ULL }, + { "04567", "", 2423ULL }, + { "0x9876", "", 39030LL }, + { "05678", "8", 375ULL }, + { "0xabcdefz", "z", 11259375ULL }, + { "0cdba", "c", 0ULL }, + { "4K", "", SZ_4K }, + { "0x10k@0xaaaabbbb", "@", SZ_16K }, + { "32M", "", SZ_32M }, + { "067m:foo", ":", 55 * SZ_1M }, + { "2G;bar=3Dbaz", ";", SZ_2G }, + { "07gz", "z", 7ULL * SZ_1G }, + { "3T+data", "+", 3 * SZ_1T }, + { "04t,ro", ",", SZ_4T }, + { "012p", "", 11258999068426240ULL }, + { "7P,sync", ",", 7881299347898368ULL }, + { "0x2e", "", 46ULL }, + { "2E and more", " ", 2305843009213693952ULL }, + { "18446744073709551615", "", ULLONG_MAX }, + { "0xffffffffffffffff0", "", ULLONG_MAX }, + { "1111111111111111111T", "", ULLONG_MAX }, + { "222222222222222222222G", "", ULLONG_MAX }, + { "3333333333333333333333M", "", ULLONG_MAX }, +}; + +static void cmdline_test_memparse(struct kunit *test) +{ + const struct cmdline_test_memparse_entry *e; + unsigned long long ret; + char *retptr; + + for (e =3D testdata; e < testdata + ARRAY_SIZE(testdata); e++) { + ret =3D 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[] =3D { 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), {} }; =20 --=20 2.53.0