| Seq | Timestamp | Type | Name | Duration |
|---|---|---|---|---|
| 0/0 | 2026/06/30 03:52 | flow | patch-triage |
0mArgs:null Results: {
"EnableConfigs": null,
"FocusSymbols": [],
"Reasoning": "The patch only migrates existing prandom self-tests to the KUnit framework. It does not introduce any functional changes to the core kernel logic that would require fuzzing.",
"WorthFuzzing": false
} |
| 1/1 | 2026/06/30 03:52 | action | read-patch-diff |
0mArgs:null Results: {
"PatchDiff": "commit 37d738ae6dbc67a534a23775f589da54a22b24d7\nAuthor: syz-cluster \u003ctriage@syzkaller.com\u003e\nDate: Tue Jun 30 03:52:58 2026 +0000\n\n syz-cluster: applied patch under review\n\ndiff --git a/lib/Kconfig b/lib/Kconfig\nindex 2923924bea78cb..5f185e9f1e92bd 100644\n--- a/lib/Kconfig\n+++ b/lib/Kconfig\n@@ -156,12 +156,6 @@ config AUDIT_COMPAT_GENERIC\n \tdepends on AUDIT_GENERIC \u0026\u0026 AUDIT_ARCH_COMPAT_GENERIC \u0026\u0026 COMPAT\n \tdefault y\n \n-config RANDOM32_SELFTEST\n-\tbool \"PRNG perform self test on init\"\n-\thelp\n-\t This option enables the 32 bit PRNG library functions to perform a\n-\t self test on initialization.\n-\n #\n # compression support is select'ed if needed\n #\ndiff --git a/lib/Kconfig.debug b/lib/Kconfig.debug\nindex ba36939fda79bf..0214a58593d7fb 100644\n--- a/lib/Kconfig.debug\n+++ b/lib/Kconfig.debug\n@@ -3354,6 +3354,15 @@ config PRIME_NUMBERS_KUNIT_TEST\n \n \t If unsure, say N\n \n+config PRANDOM_KUNIT_TEST\n+\ttristate \"KUnit test for prandom\" if !KUNIT_ALL_TESTS\n+\tdepends on KUNIT\n+\tdefault KUNIT_ALL_TESTS\n+\thelp\n+\t Enable this option to test the prandom functions at runtime.\n+\n+\t If unsure, say N\n+\n endif # RUNTIME_TESTING_MENU\n \n config ARCH_USE_MEMTEST\ndiff --git a/lib/random32.c b/lib/random32.c\nindex 24e7acd9343f68..dad90219c3511d 100644\n--- a/lib/random32.c\n+++ b/lib/random32.c\n@@ -41,6 +41,7 @@\n #include \u003clinux/bitops.h\u003e\n #include \u003clinux/slab.h\u003e\n #include \u003clinux/unaligned.h\u003e\n+#include \u003ckunit/visibility.h\u003e\n \n /**\n *\tprandom_u32_state - seeded pseudo-random number generator.\n@@ -92,7 +93,14 @@ void prandom_bytes_state(struct rnd_state *state, void *buf, size_t bytes)\n }\n EXPORT_SYMBOL(prandom_bytes_state);\n \n-static void prandom_warmup(struct rnd_state *state)\n+/*\n+ * Only declared here so that it has a prototype when made\n+ * non-static for KUnit testing (avoids -Wmissing-prototypes).\n+ */\n+#if IS_ENABLED(CONFIG_KUNIT)\n+void prandom_warmup(struct rnd_state *state);\n+#endif\n+VISIBLE_IF_KUNIT void prandom_warmup(struct rnd_state *state)\n {\n \t/* Calling RNG ten times to satisfy recurrence condition */\n \tprandom_u32_state(state);\n@@ -106,6 +114,7 @@ static void prandom_warmup(struct rnd_state *state)\n \tprandom_u32_state(state);\n \tprandom_u32_state(state);\n }\n+EXPORT_SYMBOL_IF_KUNIT(prandom_warmup);\n \n void prandom_seed_full_state(struct rnd_state __percpu *pcpu_state)\n {\n@@ -125,176 +134,3 @@ void prandom_seed_full_state(struct rnd_state __percpu *pcpu_state)\n \t}\n }\n EXPORT_SYMBOL(prandom_seed_full_state);\n-\n-#ifdef CONFIG_RANDOM32_SELFTEST\n-static struct prandom_test1 {\n-\tu32 seed;\n-\tu32 result;\n-} test1[] = {\n-\t{ 1U, 3484351685U },\n-\t{ 2U, 2623130059U },\n-\t{ 3U, 3125133893U },\n-\t{ 4U, 984847254U },\n-};\n-\n-static struct prandom_test2 {\n-\tu32 seed;\n-\tu32 iteration;\n-\tu32 result;\n-} test2[] = {\n-\t/* Test cases against taus113 from GSL library. */\n-\t{ 931557656U, 959U, 2975593782U },\n-\t{ 1339693295U, 876U, 3887776532U },\n-\t{ 1545556285U, 961U, 1615538833U },\n-\t{ 601730776U, 723U, 1776162651U },\n-\t{ 1027516047U, 687U, 511983079U },\n-\t{ 416526298U, 700U, 916156552U },\n-\t{ 1395522032U, 652U, 2222063676U },\n-\t{ 366221443U, 617U, 2992857763U },\n-\t{ 1539836965U, 714U, 3783265725U },\n-\t{ 556206671U, 994U, 799626459U },\n-\t{ 684907218U, 799U, 367789491U },\n-\t{ 2121230701U, 931U, 2115467001U },\n-\t{ 1668516451U, 644U, 3620590685U },\n-\t{ 768046066U, 883U, 2034077390U },\n-\t{ 1989159136U, 833U, 1195767305U },\n-\t{ 536585145U, 996U, 3577259204U },\n-\t{ 1008129373U, 642U, 1478080776U },\n-\t{ 1740775604U, 939U, 1264980372U },\n-\t{ 1967883163U, 508U, 10734624U },\n-\t{ 1923019697U, 730U, 3821419629U },\n-\t{ 442079932U, 560U, 3440032343U },\n-\t{ 1961302714U, 845U, 841962572U },\n-\t{ 2030205964U, 962U, 1325144227U },\n-\t{ 1160407529U, 507U, 240940858U },\n-\t{ 635482502U, 779U, 4200489746U },\n-\t{ 1252788931U, 699U, 867195434U },\n-\t{ 1961817131U, 719U, 668237657U },\n-\t{ 1071468216U, 983U, 917876630U },\n-\t{ 1281848367U, 932U, 1003100039U },\n-\t{ 582537119U, 780U, 1127273778U },\n-\t{ 1973672777U, 853U, 1071368872U },\n-\t{ 1896756996U, 762U, 1127851055U },\n-\t{ 847917054U, 500U, 1717499075U },\n-\t{ 1240520510U, 951U, 2849576657U },\n-\t{ 1685071682U, 567U, 1961810396U },\n-\t{ 1516232129U, 557U, 3173877U },\n-\t{ 1208118903U, 612U, 1613145022U },\n-\t{ 1817269927U, 693U, 4279122573U },\n-\t{ 1510091701U, 717U, 638191229U },\n-\t{ 365916850U, 807U, 600424314U },\n-\t{ 399324359U, 702U, 1803598116U },\n-\t{ 1318480274U, 779U, 2074237022U },\n-\t{ 697758115U, 840U, 1483639402U },\n-\t{ 1696507773U, 840U, 577415447U },\n-\t{ 2081979121U, 981U, 3041486449U },\n-\t{ 955646687U, 742U, 3846494357U },\n-\t{ 1250683506U, 749U, 836419859U },\n-\t{ 595003102U, 534U, 366794109U },\n-\t{ 47485338U, 558U, 3521120834U },\n-\t{ 619433479U, 610U, 3991783875U },\n-\t{ 704096520U, 518U, 4139493852U },\n-\t{ 1712224984U, 606U, 2393312003U },\n-\t{ 1318233152U, 922U, 3880361134U },\n-\t{ 855572992U, 761U, 1472974787U },\n-\t{ 64721421U, 703U, 683860550U },\n-\t{ 678931758U, 840U, 380616043U },\n-\t{ 692711973U, 778U, 1382361947U },\n-\t{ 677703619U, 530U, 2826914161U },\n-\t{ 92393223U, 586U, 1522128471U },\n-\t{ 1222592920U, 743U, 3466726667U },\n-\t{ 358288986U, 695U, 1091956998U },\n-\t{ 1935056945U, 958U, 514864477U },\n-\t{ 735675993U, 990U, 1294239989U },\n-\t{ 1560089402U, 897U, 2238551287U },\n-\t{ 70616361U, 829U, 22483098U },\n-\t{ 368234700U, 731U, 2913875084U },\n-\t{ 20221190U, 879U, 1564152970U },\n-\t{ 539444654U, 682U, 1835141259U },\n-\t{ 1314987297U, 840U, 1801114136U },\n-\t{ 2019295544U, 645U, 3286438930U },\n-\t{ 469023838U, 716U, 1637918202U },\n-\t{ 1843754496U, 653U, 2562092152U },\n-\t{ 400672036U, 809U, 4264212785U },\n-\t{ 404722249U, 965U, 2704116999U },\n-\t{ 600702209U, 758U, 584979986U },\n-\t{ 519953954U, 667U, 2574436237U },\n-\t{ 1658071126U, 694U, 2214569490U },\n-\t{ 420480037U, 749U, 3430010866U },\n-\t{ 690103647U, 969U, 3700758083U },\n-\t{ 1029424799U, 937U, 3787746841U },\n-\t{ 2012608669U, 506U, 3362628973U },\n-\t{ 1535432887U, 998U, 42610943U },\n-\t{ 1330635533U, 857U, 3040806504U },\n-\t{ 1223800550U, 539U, 3954229517U },\n-\t{ 1322411537U, 680U, 3223250324U },\n-\t{ 1877847898U, 945U, 2915147143U },\n-\t{ 1646356099U, 874U, 965988280U },\n-\t{ 805687536U, 744U, 4032277920U },\n-\t{ 1948093210U, 633U, 1346597684U },\n-\t{ 392609744U, 783U, 1636083295U },\n-\t{ 690241304U, 770U, 1201031298U },\n-\t{ 1360302965U, 696U, 1665394461U },\n-\t{ 1220090946U, 780U, 1316922812U },\n-\t{ 447092251U, 500U, 3438743375U },\n-\t{ 1613868791U, 592U, 828546883U },\n-\t{ 523430951U, 548U, 2552392304U },\n-\t{ 726692899U, 810U, 1656872867U },\n-\t{ 1364340021U, 836U, 3710513486U },\n-\t{ 1986257729U, 931U, 935013962U },\n-\t{ 407983964U, 921U, 728767059U },\n-};\n-\n-static void prandom_state_selftest_seed(struct rnd_state *state, u32 seed)\n-{\n-#define LCG(x)\t ((x) * 69069U)\t/* super-duper LCG */\n-\tstate-\u003es1 = __seed(LCG(seed), 2U);\n-\tstate-\u003es2 = __seed(LCG(state-\u003es1), 8U);\n-\tstate-\u003es3 = __seed(LCG(state-\u003es2), 16U);\n-\tstate-\u003es4 = __seed(LCG(state-\u003es3), 128U);\n-}\n-\n-static int __init prandom_state_selftest(void)\n-{\n-\tint i, j, errors = 0, runs = 0;\n-\tbool error = false;\n-\n-\tfor (i = 0; i \u003c ARRAY_SIZE(test1); i++) {\n-\t\tstruct rnd_state state;\n-\n-\t\tprandom_state_selftest_seed(\u0026state, test1[i].seed);\n-\t\tprandom_warmup(\u0026state);\n-\n-\t\tif (test1[i].result != prandom_u32_state(\u0026state))\n-\t\t\terror = true;\n-\t}\n-\n-\tif (error)\n-\t\tpr_warn(\"prandom: seed boundary self test failed\\n\");\n-\telse\n-\t\tpr_info(\"prandom: seed boundary self test passed\\n\");\n-\n-\tfor (i = 0; i \u003c ARRAY_SIZE(test2); i++) {\n-\t\tstruct rnd_state state;\n-\n-\t\tprandom_state_selftest_seed(\u0026state, test2[i].seed);\n-\t\tprandom_warmup(\u0026state);\n-\n-\t\tfor (j = 0; j \u003c test2[i].iteration - 1; j++)\n-\t\t\tprandom_u32_state(\u0026state);\n-\n-\t\tif (test2[i].result != prandom_u32_state(\u0026state))\n-\t\t\terrors++;\n-\n-\t\truns++;\n-\t\tcond_resched();\n-\t}\n-\n-\tif (errors)\n-\t\tpr_warn(\"prandom: %d/%d self tests failed\\n\", errors, runs);\n-\telse\n-\t\tpr_info(\"prandom: %d self tests passed\\n\", runs);\n-\treturn 0;\n-}\n-core_initcall(prandom_state_selftest);\n-#endif\ndiff --git a/lib/tests/Makefile b/lib/tests/Makefile\nindex 601dba4b7d966d..39d283b26fe2b4 100644\n--- a/lib/tests/Makefile\n+++ b/lib/tests/Makefile\n@@ -49,5 +49,6 @@ obj-$(CONFIG_STRING_HELPERS_KUNIT_TEST) += string_helpers_kunit.o\n obj-$(CONFIG_USERCOPY_KUNIT_TEST) += usercopy_kunit.o\n obj-$(CONFIG_UTIL_MACROS_KUNIT) += util_macros_kunit.o\n obj-$(CONFIG_RATELIMIT_KUNIT_TEST) += test_ratelimit.o\n+obj-$(CONFIG_PRANDOM_KUNIT_TEST) += random32_kunit.o\n \n obj-$(CONFIG_TEST_RUNTIME_MODULE)\t\t+= module/\ndiff --git a/lib/tests/random32_kunit.c b/lib/tests/random32_kunit.c\nnew file mode 100644\nindex 00000000000000..4364350265c17c\n--- /dev/null\n+++ b/lib/tests/random32_kunit.c\n@@ -0,0 +1,181 @@\n+// SPDX-License-Identifier: GPL-2.0\n+/*\n+ * Test cases for random32 functions.\n+ */\n+\n+#include \u003clinux/prandom.h\u003e\n+#include \u003ckunit/test.h\u003e\n+\n+/* prandom_warmup() is static in lib/random32.c; exposed for testing only. */\n+void prandom_warmup(struct rnd_state *state);\n+\n+static const struct prandom_test1 {\n+\tu32 seed;\n+\tu32 result;\n+} test1[] = {\n+\t{ 1U, 3484351685U },\n+\t{ 2U, 2623130059U },\n+\t{ 3U, 3125133893U },\n+\t{ 4U, 984847254U },\n+};\n+\n+static const struct prandom_test2 {\n+\tu32 seed;\n+\tu32 iteration;\n+\tu32 result;\n+} test2[] = {\n+\t/* Test cases against taus113 from GSL library. */\n+\t{ 931557656U, 959U, 2975593782U },\n+\t{ 1339693295U, 876U, 3887776532U },\n+\t{ 1545556285U, 961U, 1615538833U },\n+\t{ 601730776U, 723U, 1776162651U },\n+\t{ 1027516047U, 687U, 511983079U },\n+\t{ 416526298U, 700U, 916156552U },\n+\t{ 1395522032U, 652U, 2222063676U },\n+\t{ 366221443U, 617U, 2992857763U },\n+\t{ 1539836965U, 714U, 3783265725U },\n+\t{ 556206671U, 994U, 799626459U },\n+\t{ 684907218U, 799U, 367789491U },\n+\t{ 2121230701U, 931U, 2115467001U },\n+\t{ 1668516451U, 644U, 3620590685U },\n+\t{ 768046066U, 883U, 2034077390U },\n+\t{ 1989159136U, 833U, 1195767305U },\n+\t{ 536585145U, 996U, 3577259204U },\n+\t{ 1008129373U, 642U, 1478080776U },\n+\t{ 1740775604U, 939U, 1264980372U },\n+\t{ 1967883163U, 508U, 10734624U },\n+\t{ 1923019697U, 730U, 3821419629U },\n+\t{ 442079932U, 560U, 3440032343U },\n+\t{ 1961302714U, 845U, 841962572U },\n+\t{ 2030205964U, 962U, 1325144227U },\n+\t{ 1160407529U, 507U, 240940858U },\n+\t{ 635482502U, 779U, 4200489746U },\n+\t{ 1252788931U, 699U, 867195434U },\n+\t{ 1961817131U, 719U, 668237657U },\n+\t{ 1071468216U, 983U, 917876630U },\n+\t{ 1281848367U, 932U, 1003100039U },\n+\t{ 582537119U, 780U, 1127273778U },\n+\t{ 1973672777U, 853U, 1071368872U },\n+\t{ 1896756996U, 762U, 1127851055U },\n+\t{ 847917054U, 500U, 1717499075U },\n+\t{ 1240520510U, 951U, 2849576657U },\n+\t{ 1685071682U, 567U, 1961810396U },\n+\t{ 1516232129U, 557U, 3173877U },\n+\t{ 1208118903U, 612U, 1613145022U },\n+\t{ 1817269927U, 693U, 4279122573U },\n+\t{ 1510091701U, 717U, 638191229U },\n+\t{ 365916850U, 807U, 600424314U },\n+\t{ 399324359U, 702U, 1803598116U },\n+\t{ 1318480274U, 779U, 2074237022U },\n+\t{ 697758115U, 840U, 1483639402U },\n+\t{ 1696507773U, 840U, 577415447U },\n+\t{ 2081979121U, 981U, 3041486449U },\n+\t{ 955646687U, 742U, 3846494357U },\n+\t{ 1250683506U, 749U, 836419859U },\n+\t{ 595003102U, 534U, 366794109U },\n+\t{ 47485338U, 558U, 3521120834U },\n+\t{ 619433479U, 610U, 3991783875U },\n+\t{ 704096520U, 518U, 4139493852U },\n+\t{ 1712224984U, 606U, 2393312003U },\n+\t{ 1318233152U, 922U, 3880361134U },\n+\t{ 855572992U, 761U, 1472974787U },\n+\t{ 64721421U, 703U, 683860550U },\n+\t{ 678931758U, 840U, 380616043U },\n+\t{ 692711973U, 778U, 1382361947U },\n+\t{ 677703619U, 530U, 2826914161U },\n+\t{ 92393223U, 586U, 1522128471U },\n+\t{ 1222592920U, 743U, 3466726667U },\n+\t{ 358288986U, 695U, 1091956998U },\n+\t{ 1935056945U, 958U, 514864477U },\n+\t{ 735675993U, 990U, 1294239989U },\n+\t{ 1560089402U, 897U, 2238551287U },\n+\t{ 70616361U, 829U, 22483098U },\n+\t{ 368234700U, 731U, 2913875084U },\n+\t{ 20221190U, 879U, 1564152970U },\n+\t{ 539444654U, 682U, 1835141259U },\n+\t{ 1314987297U, 840U, 1801114136U },\n+\t{ 2019295544U, 645U, 3286438930U },\n+\t{ 469023838U, 716U, 1637918202U },\n+\t{ 1843754496U, 653U, 2562092152U },\n+\t{ 400672036U, 809U, 4264212785U },\n+\t{ 404722249U, 965U, 2704116999U },\n+\t{ 600702209U, 758U, 584979986U },\n+\t{ 519953954U, 667U, 2574436237U },\n+\t{ 1658071126U, 694U, 2214569490U },\n+\t{ 420480037U, 749U, 3430010866U },\n+\t{ 690103647U, 969U, 3700758083U },\n+\t{ 1029424799U, 937U, 3787746841U },\n+\t{ 2012608669U, 506U, 3362628973U },\n+\t{ 1535432887U, 998U, 42610943U },\n+\t{ 1330635533U, 857U, 3040806504U },\n+\t{ 1223800550U, 539U, 3954229517U },\n+\t{ 1322411537U, 680U, 3223250324U },\n+\t{ 1877847898U, 945U, 2915147143U },\n+\t{ 1646356099U, 874U, 965988280U },\n+\t{ 805687536U, 744U, 4032277920U },\n+\t{ 1948093210U, 633U, 1346597684U },\n+\t{ 392609744U, 783U, 1636083295U },\n+\t{ 690241304U, 770U, 1201031298U },\n+\t{ 1360302965U, 696U, 1665394461U },\n+\t{ 1220090946U, 780U, 1316922812U },\n+\t{ 447092251U, 500U, 3438743375U },\n+\t{ 1613868791U, 592U, 828546883U },\n+\t{ 523430951U, 548U, 2552392304U },\n+\t{ 726692899U, 810U, 1656872867U },\n+\t{ 1364340021U, 836U, 3710513486U },\n+\t{ 1986257729U, 931U, 935013962U },\n+\t{ 407983964U, 921U, 728767059U },\n+};\n+\n+static void prandom_state_test_seed(struct rnd_state *state, u32 seed)\n+{\n+#define LCG(x)\t ((x) * 69069U)\t/* super-duper LCG */\n+\tstate-\u003es1 = __seed(LCG(seed), 2U);\n+\tstate-\u003es2 = __seed(LCG(state-\u003es1), 8U);\n+\tstate-\u003es3 = __seed(LCG(state-\u003es2), 16U);\n+\tstate-\u003es4 = __seed(LCG(state-\u003es3), 128U);\n+}\n+\n+static void test_prandom_seed_boundary(struct kunit *test)\n+{\n+\tint i;\n+\tstruct rnd_state state;\n+\n+\tfor (i = 0; i \u003c ARRAY_SIZE(test1); i++) {\n+\t\tprandom_state_test_seed(\u0026state, test1[i].seed);\n+\t\tprandom_warmup(\u0026state);\n+\t\tKUNIT_EXPECT_EQ(test, test1[i].result, prandom_u32_state(\u0026state));\n+\t}\n+}\n+\n+static void test_prandom_taus113(struct kunit *test)\n+{\n+\tint i, j;\n+\tstruct rnd_state state;\n+\n+\tfor (i = 0; i \u003c ARRAY_SIZE(test2); i++) {\n+\t\tprandom_state_test_seed(\u0026state, test2[i].seed);\n+\t\tprandom_warmup(\u0026state);\n+\n+\t\tfor (j = 0; j \u003c test2[i].iteration - 1; j++)\n+\t\t\tprandom_u32_state(\u0026state);\n+\n+\t\tKUNIT_EXPECT_EQ(test, test2[i].result, prandom_u32_state(\u0026state));\n+\t}\n+}\n+\n+static struct kunit_case prandom_test_cases[] = {\n+\tKUNIT_CASE(test_prandom_seed_boundary),\n+\tKUNIT_CASE(test_prandom_taus113),\n+\t{}\n+};\n+\n+static struct kunit_suite prandom_test_suite = {\n+\t.name = \"prandom\",\n+\t.test_cases = prandom_test_cases,\n+};\n+\n+kunit_test_suite(prandom_test_suite);\n+\n+MODULE_DESCRIPTION(\"KUnit test for prandom\");\n+MODULE_LICENSE(\"GPL\");\n"
} |
| 2/1 | 2026/06/30 03:53 | agent | patch-evaluator |
0mModel:gemini-3.1-pro-preview Args: null Results: {
"EnableConfigs": null,
"FocusSymbols": [],
"Reasoning": "The patch only migrates existing prandom self-tests to the KUnit framework. It does not introduce any functional changes to the core kernel logic that would require fuzzing.",
"WorthFuzzing": false
}Instruction: You are an expert Linux kernel maintainer. Your job is to review a provided patch series and determine if it makes functional changes to the kernel that should be fuzzed. IMPORTANT: The changes have ALREADY been applied and committed as the HEAD commit in your workspace. Do NOT rely on your internal knowledge of the kernel. You must actively use your code access tools to examine the actual source code and confirm any assumptions. Return WorthFuzzing=false if the patch only contains: - Modifications to Documentation/, Kconfig files, or code comments. - Purely decorative changes, such as logging (e.g., pr_err, printk) or tracepoints. - Changes to numeric constants or macros that do not functionally alter execution flow. - Code paths that are impossible to reach in virtualized environments like GCE or QEMU, even when utilizing software-emulated hardware (e.g., usb gadget, mac80211_hwsim). If it modifies reachable core kernel logic, drivers, or architectures, use your code search tools to verify the code can be executed, then return WorthFuzzing=true. When returning WorthFuzzing=true, you MUST ALSO: 1. Extract any specific kernel functions that should be heavily fuzzed into FocusSymbols. Avoid listing generic hot-path functions to prevent skewed test distributions. 2. Identify any specific CONFIG_ options required to properly test this new/modified feature. Go and look into the Kconfig files and check for ifdefs around the code, do not make assumptions. Do not list too generic configs (we already have them enabled). Only list those that specifically cover the modified code. List them in the EnableConfigs output array, and DO NOT add a 'CONFIG_' prefix (e.g., return "NET_IPV4" instead of "CONFIG_NET_IPV4"). Prefer calling several tools at the same time to save round-trips. Use set-results tool to provide results of the analysis. It must be called exactly once before the final reply. Ignore results of this tool. Prompt: For your convenience, here is the diff of the changes:
commit 37d738ae6dbc67a534a23775f589da54a22b24d7
Author: syz-cluster <triage@syzkaller.com>
Date: Tue Jun 30 03:52:58 2026 +0000
syz-cluster: applied patch under review
diff --git a/lib/Kconfig b/lib/Kconfig
index 2923924bea78cb..5f185e9f1e92bd 100644
--- a/lib/Kconfig
+++ b/lib/Kconfig
@@ -156,12 +156,6 @@ config AUDIT_COMPAT_GENERIC
depends on AUDIT_GENERIC && AUDIT_ARCH_COMPAT_GENERIC && COMPAT
default y
-config RANDOM32_SELFTEST
- bool "PRNG perform self test on init"
- help
- This option enables the 32 bit PRNG library functions to perform a
- self test on initialization.
-
#
# compression support is select'ed if needed
#
diff --git a/lib/Kconfig.debug b/lib/Kconfig.debug
index ba36939fda79bf..0214a58593d7fb 100644
--- a/lib/Kconfig.debug
+++ b/lib/Kconfig.debug
@@ -3354,6 +3354,15 @@ config PRIME_NUMBERS_KUNIT_TEST
If unsure, say N
+config PRANDOM_KUNIT_TEST
+ tristate "KUnit test for prandom" if !KUNIT_ALL_TESTS
+ depends on KUNIT
+ default KUNIT_ALL_TESTS
+ help
+ Enable this option to test the prandom functions at runtime.
+
+ If unsure, say N
+
endif # RUNTIME_TESTING_MENU
config ARCH_USE_MEMTEST
diff --git a/lib/random32.c b/lib/random32.c
index 24e7acd9343f68..dad90219c3511d 100644
--- a/lib/random32.c
+++ b/lib/random32.c
@@ -41,6 +41,7 @@
#include <linux/bitops.h>
#include <linux/slab.h>
#include <linux/unaligned.h>
+#include <kunit/visibility.h>
/**
* prandom_u32_state - seeded pseudo-random number generator.
@@ -92,7 +93,14 @@ void prandom_bytes_state(struct rnd_state *state, void *buf, size_t bytes)
}
EXPORT_SYMBOL(prandom_bytes_state);
-static void prandom_warmup(struct rnd_state *state)
+/*
+ * Only declared here so that it has a prototype when made
+ * non-static for KUnit testing (avoids -Wmissing-prototypes).
+ */
+#if IS_ENABLED(CONFIG_KUNIT)
+void prandom_warmup(struct rnd_state *state);
+#endif
+VISIBLE_IF_KUNIT void prandom_warmup(struct rnd_state *state)
{
/* Calling RNG ten times to satisfy recurrence condition */
prandom_u32_state(state);
@@ -106,6 +114,7 @@ static void prandom_warmup(struct rnd_state *state)
prandom_u32_state(state);
prandom_u32_state(state);
}
+EXPORT_SYMBOL_IF_KUNIT(prandom_warmup);
void prandom_seed_full_state(struct rnd_state __percpu *pcpu_state)
{
@@ -125,176 +134,3 @@ void prandom_seed_full_state(struct rnd_state __percpu *pcpu_state)
}
}
EXPORT_SYMBOL(prandom_seed_full_state);
-
-#ifdef CONFIG_RANDOM32_SELFTEST
-static struct prandom_test1 {
- u32 seed;
- u32 result;
-} test1[] = {
- { 1U, 3484351685U },
- { 2U, 2623130059U },
- { 3U, 3125133893U },
- { 4U, 984847254U },
-};
-
-static struct prandom_test2 {
- u32 seed;
- u32 iteration;
- u32 result;
-} test2[] = {
- /* Test cases against taus113 from GSL library. */
- { 931557656U, 959U, 2975593782U },
- { 1339693295U, 876U, 3887776532U },
- { 1545556285U, 961U, 1615538833U },
- { 601730776U, 723U, 1776162651U },
- { 1027516047U, 687U, 511983079U },
- { 416526298U, 700U, 916156552U },
- { 1395522032U, 652U, 2222063676U },
- { 366221443U, 617U, 2992857763U },
- { 1539836965U, 714U, 3783265725U },
- { 556206671U, 994U, 799626459U },
- { 684907218U, 799U, 367789491U },
- { 2121230701U, 931U, 2115467001U },
- { 1668516451U, 644U, 3620590685U },
- { 768046066U, 883U, 2034077390U },
- { 1989159136U, 833U, 1195767305U },
- { 536585145U, 996U, 3577259204U },
- { 1008129373U, 642U, 1478080776U },
- { 1740775604U, 939U, 1264980372U },
- { 1967883163U, 508U, 10734624U },
- { 1923019697U, 730U, 3821419629U },
- { 442079932U, 560U, 3440032343U },
- { 1961302714U, 845U, 841962572U },
- { 2030205964U, 962U, 1325144227U },
- { 1160407529U, 507U, 240940858U },
- { 635482502U, 779U, 4200489746U },
- { 1252788931U, 699U, 867195434U },
- { 1961817131U, 719U, 668237657U },
- { 1071468216U, 983U, 917876630U },
- { 1281848367U, 932U, 1003100039U },
- { 582537119U, 780U, 1127273778U },
- { 1973672777U, 853U, 1071368872U },
- { 1896756996U, 762U, 1127851055U },
- { 847917054U, 500U, 1717499075U },
- { 1240520510U, 951U, 2849576657U },
- { 1685071682U, 567U, 1961810396U },
- { 1516232129U, 557U, 3173877U },
- { 1208118903U, 612U, 1613145022U },
- { 1817269927U, 693U, 4279122573U },
- { 1510091701U, 717U, 638191229U },
- { 365916850U, 807U, 600424314U },
- { 399324359U, 702U, 1803598116U },
- { 1318480274U, 779U, 2074237022U },
- { 697758115U, 840U, 1483639402U },
- { 1696507773U, 840U, 577415447U },
- { 2081979121U, 981U, 3041486449U },
- { 955646687U, 742U, 3846494357U },
- { 1250683506U, 749U, 836419859U },
- { 595003102U, 534U, 366794109U },
- { 47485338U, 558U, 3521120834U },
- { 619433479U, 610U, 3991783875U },
- { 704096520U, 518U, 4139493852U },
- { 1712224984U, 606U, 2393312003U },
- { 1318233152U, 922U, 3880361134U },
- { 855572992U, 761U, 1472974787U },
- { 64721421U, 703U, 683860550U },
- { 678931758U, 840U, 380616043U },
- { 692711973U, 778U, 1382361947U },
- { 677703619U, 530U, 2826914161U },
- { 92393223U, 586U, 1522128471U },
- { 1222592920U, 743U, 3466726667U },
- { 358288986U, 695U, 1091956998U },
- { 1935056945U, 958U, 514864477U },
- { 735675993U, 990U, 1294239989U },
- { 1560089402U, 897U, 2238551287U },
- { 70616361U, 829U, 22483098U },
- { 368234700U, 731U, 2913875084U },
- { 20221190U, 879U, 1564152970U },
- { 539444654U, 682U, 1835141259U },
- { 1314987297U, 840U, 1801114136U },
- { 2019295544U, 645U, 3286438930U },
- { 469023838U, 716U, 1637918202U },
- { 1843754496U, 653U, 2562092152U },
- { 400672036U, 809U, 4264212785U },
- { 404722249U, 965U, 2704116999U },
- { 600702209U, 758U, 584979986U },
- { 519953954U, 667U, 2574436237U },
- { 1658071126U, 694U, 2214569490U },
- { 420480037U, 749U, 3430010866U },
- { 690103647U, 969U, 3700758083U },
- { 1029424799U, 937U, 3787746841U },
- { 2012608669U, 506U, 3362628973U },
- { 1535432887U, 998U, 42610943U },
- { 1330635533U, 857U, 3040806504U },
- { 1223800550U, 539U, 3954229517U },
- { 1322411537U, 680U, 3223250324U },
- { 1877847898U, 945U, 2915147143U },
- { 1646356099U, 874U, 965988280U },
- { 805687536U, 744U, 4032277920U },
- { 1948093210U, 633U, 1346597684U },
- { 392609744U, 783U, 1636083295U },
- { 690241304U, 770U, 1201031298U },
- { 1360302965U, 696U, 1665394461U },
- { 1220090946U, 780U, 1316922812U },
- { 447092251U, 500U, 3438743375U },
- { 1613868791U, 592U, 828546883U },
- { 523430951U, 548U, 2552392304U },
- { 726692899U, 810U, 1656872867U },
- { 1364340021U, 836U, 3710513486U },
- { 1986257729U, 931U, 935013962U },
- { 407983964U, 921U, 728767059U },
-};
-
-static void prandom_state_selftest_seed(struct rnd_state *state, u32 seed)
-{
-#define LCG(x) ((x) * 69069U) /* super-duper LCG */
- state->s1 = __seed(LCG(seed), 2U);
- state->s2 = __seed(LCG(state->s1), 8U);
- state->s3 = __seed(LCG(state->s2), 16U);
- state->s4 = __seed(LCG(state->s3), 128U);
-}
-
-static int __init prandom_state_selftest(void)
-{
- int i, j, errors = 0, runs = 0;
- bool error = false;
-
- for (i = 0; i < ARRAY_SIZE(test1); i++) {
- struct rnd_state state;
-
- prandom_state_selftest_seed(&state, test1[i].seed);
- prandom_warmup(&state);
-
- if (test1[i].result != prandom_u32_state(&state))
- error = true;
- }
-
- if (error)
- pr_warn("prandom: seed boundary self test failed\n");
- else
- pr_info("prandom: seed boundary self test passed\n");
-
- for (i = 0; i < ARRAY_SIZE(test2); i++) {
- struct rnd_state state;
-
- prandom_state_selftest_seed(&state, test2[i].seed);
- prandom_warmup(&state);
-
- for (j = 0; j < test2[i].iteration - 1; j++)
- prandom_u32_state(&state);
-
- if (test2[i].result != prandom_u32_state(&state))
- errors++;
-
- runs++;
- cond_resched();
- }
-
- if (errors)
- pr_warn("prandom: %d/%d self tests failed\n", errors, runs);
- else
- pr_info("prandom: %d self tests passed\n", runs);
- return 0;
-}
-core_initcall(prandom_state_selftest);
-#endif
diff --git a/lib/tests/Makefile b/lib/tests/Makefile
index 601dba4b7d966d..39d283b26fe2b4 100644
--- a/lib/tests/Makefile
+++ b/lib/tests/Makefile
@@ -49,5 +49,6 @@ obj-$(CONFIG_STRING_HELPERS_KUNIT_TEST) += string_helpers_kunit.o
obj-$(CONFIG_USERCOPY_KUNIT_TEST) += usercopy_kunit.o
obj-$(CONFIG_UTIL_MACROS_KUNIT) += util_macros_kunit.o
obj-$(CONFIG_RATELIMIT_KUNIT_TEST) += test_ratelimit.o
+obj-$(CONFIG_PRANDOM_KUNIT_TEST) += random32_kunit.o
obj-$(CONFIG_TEST_RUNTIME_MODULE) += module/
diff --git a/lib/tests/random32_kunit.c b/lib/tests/random32_kunit.c
new file mode 100644
index 00000000000000..4364350265c17c
--- /dev/null
+++ b/lib/tests/random32_kunit.c
@@ -0,0 +1,181 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Test cases for random32 functions.
+ */
+
+#include <linux/prandom.h>
+#include <kunit/test.h>
+
+/* prandom_warmup() is static in lib/random32.c; exposed for testing only. */
+void prandom_warmup(struct rnd_state *state);
+
+static const struct prandom_test1 {
+ u32 seed;
+ u32 result;
+} test1[] = {
+ { 1U, 3484351685U },
+ { 2U, 2623130059U },
+ { 3U, 3125133893U },
+ { 4U, 984847254U },
+};
+
+static const struct prandom_test2 {
+ u32 seed;
+ u32 iteration;
+ u32 result;
+} test2[] = {
+ /* Test cases against taus113 from GSL library. */
+ { 931557656U, 959U, 2975593782U },
+ { 1339693295U, 876U, 3887776532U },
+ { 1545556285U, 961U, 1615538833U },
+ { 601730776U, 723U, 1776162651U },
+ { 1027516047U, 687U, 511983079U },
+ { 416526298U, 700U, 916156552U },
+ { 1395522032U, 652U, 2222063676U },
+ { 366221443U, 617U, 2992857763U },
+ { 1539836965U, 714U, 3783265725U },
+ { 556206671U, 994U, 799626459U },
+ { 684907218U, 799U, 367789491U },
+ { 2121230701U, 931U, 2115467001U },
+ { 1668516451U, 644U, 3620590685U },
+ { 768046066U, 883U, 2034077390U },
+ { 1989159136U, 833U, 1195767305U },
+ { 536585145U, 996U, 3577259204U },
+ { 1008129373U, 642U, 1478080776U },
+ { 1740775604U, 939U, 1264980372U },
+ { 1967883163U, 508U, 10734624U },
+ { 1923019697U, 730U, 3821419629U },
+ { 442079932U, 560U, 3440032343U },
+ { 1961302714U, 845U, 841962572U },
+ { 2030205964U, 962U, 1325144227U },
+ { 1160407529U, 507U, 240940858U },
+ { 635482502U, 779U, 4200489746U },
+ { 1252788931U, 699U, 867195434U },
+ { 1961817131U, 719U, 668237657U },
+ { 1071468216U, 983U, 917876630U },
+ { 1281848367U, 932U, 1003100039U },
+ { 582537119U, 780U, 1127273778U },
+ { 1973672777U, 853U, 1071368872U },
+ { 1896756996U, 762U, 1127851055U },
+ { 847917054U, 500U, 1717499075U },
+ { 1240520510U, 951U, 2849576657U },
+ { 1685071682U, 567U, 1961810396U },
+ { 1516232129U, 557U, 3173877U },
+ { 1208118903U, 612U, 1613145022U },
+ { 1817269927U, 693U, 4279122573U },
+ { 1510091701U, 717U, 638191229U },
+ { 365916850U, 807U, 600424314U },
+ { 399324359U, 702U, 1803598116U },
+ { 1318480274U, 779U, 2074237022U },
+ { 697758115U, 840U, 1483639402U },
+ { 1696507773U, 840U, 577415447U },
+ { 2081979121U, 981U, 3041486449U },
+ { 955646687U, 742U, 3846494357U },
+ { 1250683506U, 749U, 836419859U },
+ { 595003102U, 534U, 366794109U },
+ { 47485338U, 558U, 3521120834U },
+ { 619433479U, 610U, 3991783875U },
+ { 704096520U, 518U, 4139493852U },
+ { 1712224984U, 606U, 2393312003U },
+ { 1318233152U, 922U, 3880361134U },
+ { 855572992U, 761U, 1472974787U },
+ { 64721421U, 703U, 683860550U },
+ { 678931758U, 840U, 380616043U },
+ { 692711973U, 778U, 1382361947U },
+ { 677703619U, 530U, 2826914161U },
+ { 92393223U, 586U, 1522128471U },
+ { 1222592920U, 743U, 3466726667U },
+ { 358288986U, 695U, 1091956998U },
+ { 1935056945U, 958U, 514864477U },
+ { 735675993U, 990U, 1294239989U },
+ { 1560089402U, 897U, 2238551287U },
+ { 70616361U, 829U, 22483098U },
+ { 368234700U, 731U, 2913875084U },
+ { 20221190U, 879U, 1564152970U },
+ { 539444654U, 682U, 1835141259U },
+ { 1314987297U, 840U, 1801114136U },
+ { 2019295544U, 645U, 3286438930U },
+ { 469023838U, 716U, 1637918202U },
+ { 1843754496U, 653U, 2562092152U },
+ { 400672036U, 809U, 4264212785U },
+ { 404722249U, 965U, 2704116999U },
+ { 600702209U, 758U, 584979986U },
+ { 519953954U, 667U, 2574436237U },
+ { 1658071126U, 694U, 2214569490U },
+ { 420480037U, 749U, 3430010866U },
+ { 690103647U, 969U, 3700758083U },
+ { 1029424799U, 937U, 3787746841U },
+ { 2012608669U, 506U, 3362628973U },
+ { 1535432887U, 998U, 42610943U },
+ { 1330635533U, 857U, 3040806504U },
+ { 1223800550U, 539U, 3954229517U },
+ { 1322411537U, 680U, 3223250324U },
+ { 1877847898U, 945U, 2915147143U },
+ { 1646356099U, 874U, 965988280U },
+ { 805687536U, 744U, 4032277920U },
+ { 1948093210U, 633U, 1346597684U },
+ { 392609744U, 783U, 1636083295U },
+ { 690241304U, 770U, 1201031298U },
+ { 1360302965U, 696U, 1665394461U },
+ { 1220090946U, 780U, 1316922812U },
+ { 447092251U, 500U, 3438743375U },
+ { 1613868791U, 592U, 828546883U },
+ { 523430951U, 548U, 2552392304U },
+ { 726692899U, 810U, 1656872867U },
+ { 1364340021U, 836U, 3710513486U },
+ { 1986257729U, 931U, 935013962U },
+ { 407983964U, 921U, 728767059U },
+};
+
+static void prandom_state_test_seed(struct rnd_state *state, u32 seed)
+{
+#define LCG(x) ((x) * 69069U) /* super-duper LCG */
+ state->s1 = __seed(LCG(seed), 2U);
+ state->s2 = __seed(LCG(state->s1), 8U);
+ state->s3 = __seed(LCG(state->s2), 16U);
+ state->s4 = __seed(LCG(state->s3), 128U);
+}
+
+static void test_prandom_seed_boundary(struct kunit *test)
+{
+ int i;
+ struct rnd_state state;
+
+ for (i = 0; i < ARRAY_SIZE(test1); i++) {
+ prandom_state_test_seed(&state, test1[i].seed);
+ prandom_warmup(&state);
+ KUNIT_EXPECT_EQ(test, test1[i].result, prandom_u32_state(&state));
+ }
+}
+
+static void test_prandom_taus113(struct kunit *test)
+{
+ int i, j;
+ struct rnd_state state;
+
+ for (i = 0; i < ARRAY_SIZE(test2); i++) {
+ prandom_state_test_seed(&state, test2[i].seed);
+ prandom_warmup(&state);
+
+ for (j = 0; j < test2[i].iteration - 1; j++)
+ prandom_u32_state(&state);
+
+ KUNIT_EXPECT_EQ(test, test2[i].result, prandom_u32_state(&state));
+ }
+}
+
+static struct kunit_case prandom_test_cases[] = {
+ KUNIT_CASE(test_prandom_seed_boundary),
+ KUNIT_CASE(test_prandom_taus113),
+ {}
+};
+
+static struct kunit_suite prandom_test_suite = {
+ .name = "prandom",
+ .test_cases = prandom_test_cases,
+};
+
+kunit_test_suite(prandom_test_suite);
+
+MODULE_DESCRIPTION("KUnit test for prandom");
+MODULE_LICENSE("GPL");
|
| 3/2 | 2026/06/30 03:53 | llm | patch-evaluator |
0mModel:gemini-3.1-pro-preview Args: null Results: null Tokens: input: 11602 output: 66 thoughts: 226 Thoughts: **KUnit Test Migration for PRANDOM Self-Tests** Okay, so the gist of this is straightforward: we're moving the existing `prandom` self-tests. They're currently residing in `lib/random32.c`, but we're migrating them to a dedicated KUnit test module, `lib/tests/random32_kunit.c`. This is all about modernization, right? We're dropping the old `CONFIG_RANDOM32_SELFTEST` config option, which makes sense since KUnit provides a more robust framework. In its place, we're introducing `CONFIG_PRANDOM_KUNIT_TEST`. That's clean and keeps things organized. And, a little optimization, we're making `prandom_warmup` visible to the KUnit tests, which is a good call, especially for test setup. This is strictly a refactoring effort; there are no changes to the core kernel logic. It isn't related to fuzzing either, which I needed to confirm. The tests themselves are just KUnit tests, and they aren't changing their underlying behaviour. So, let's take a closer look, just to make sure. I'm seeing changes in `lib/random32.c` and `lib/tests/random32_kunit.c`: in the first one, the only functional change is that `prandom_warmup` is now exported if KUnit is enabled. The self test code and its data were deleted. In the second, there are just the KUnit tests. Alright, after reviewing the changes, there are definitely no functional changes to the kernel's random number generation process. This migration is purely a test infrastructure update. Therefore, we can confidently set `WorthFuzzing=false`. |
| 4/2 | 2026/06/30 03:53 | tool | set-results |
0mArgs:{
"EnableConfigs": [],
"FocusSymbols": [],
"Reasoning": "The patch only migrates existing prandom self-tests to the KUnit framework. It does not introduce any functional changes to the core kernel logic that would require fuzzing.",
"WorthFuzzing": false
}Results: {
"EnableConfigs": null,
"FocusSymbols": [],
"Reasoning": "The patch only migrates existing prandom self-tests to the KUnit framework. It does not introduce any functional changes to the core kernel logic that would require fuzzing.",
"WorthFuzzing": false
} |
| Total Calls | Total Tokens | Avg Tokens | Total Duration (Seconds) | Avg Duration (Seconds) |
|---|
| Total Calls | Total Duration (Seconds) | Avg Duration (Seconds) |
|---|