| Seq | Timestamp | Type | Name | Duration |
|---|---|---|---|---|
| 0/0 | 2026/06/30 03:22 | flow | patch-triage |
0mArgs:null Results: {
"EnableConfigs": null,
"FocusSymbols": [],
"Reasoning": "The patch converts an existing initcall-based selftest for prandom into a KUnit test. It does not modify any functional kernel logic, only the testing framework and test location.",
"WorthFuzzing": false
} |
| 1/1 | 2026/06/30 03:22 | action | read-patch-diff |
0mArgs:null Results: {
"PatchDiff": "commit 44316209bab635bb7a96caec79ad68f3f55047f5\nAuthor: syz-cluster \u003ctriage@syzkaller.com\u003e\nDate: Tue Jun 30 03:22:18 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:22 | agent | patch-evaluator |
0mModel:gemini-3.1-pro-preview Args: null Results: {
"EnableConfigs": null,
"FocusSymbols": [],
"Reasoning": "The patch converts an existing initcall-based selftest for prandom into a KUnit test. It does not modify any functional kernel logic, only the testing framework and test location.",
"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 44316209bab635bb7a96caec79ad68f3f55047f5
Author: syz-cluster <triage@syzkaller.com>
Date: Tue Jun 30 03:22:18 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:22 | llm | patch-evaluator |
0mModel:gemini-3.1-pro-preview Args: null Results: null Tokens: input: 11600 output: 64 thoughts: 263 Thoughts: **My Assessment of the PRandom Selftest Patch** Okay, so this patch is converting the `prandom` selftest from an initcall to a KUnit test. Essentially, it's swapping out the old way of running the self-test for the new KUnit framework. It looks like it's removing the `CONFIG_RANDOM32_SELFTEST` config option and adding `CONFIG_PRANDOM_KUNIT_TEST` instead. And, of course, the actual test code itself is being moved from `lib/random32.c` to `lib/tests/random32_kunit.c`. Crucially, from what I can see, this is a pure test framework conversion. No core kernel logic is being altered – this just changes *how* the tests are executed. I need to make *absolutely* sure of that, though. Wait, am I missing something? Does this touch anything outside the tests? No, it's just moving tests. Okay, that's what I thought. So that confirms my initial instinct: this is **not** something that should require fuzzing. Let me just double-check for any functional changes... I always appreciate a second look. In `lib/random32.c`, the patch: * Makes `prandom_warmup` non-static and exports it, but only if KUnit is enabled. * Leaves `prandom_seed_full_state` untouched. * Removes the old selftest code. Then in `lib/tests/random32_kunit.c`, it does the obvious and adds the selftest code as KUnit tests. Yep, just a test conversion. No functional changes to the underlying `prandom` implementation itself. Definitely not worth fuzzing. I'm going to return WorthFuzzing=false. |
| 4/2 | 2026/06/30 03:22 | tool | set-results |
0mArgs:{
"EnableConfigs": [],
"FocusSymbols": [],
"Reasoning": "The patch converts an existing initcall-based selftest for prandom into a KUnit test. It does not modify any functional kernel logic, only the testing framework and test location.",
"WorthFuzzing": false
}Results: {
"EnableConfigs": null,
"FocusSymbols": [],
"Reasoning": "The patch converts an existing initcall-based selftest for prandom into a KUnit test. It does not modify any functional kernel logic, only the testing framework and test location.",
"WorthFuzzing": false
} |
| Total Calls | Total Tokens | Avg Tokens | Total Duration (Seconds) | Avg Duration (Seconds) |
|---|
| Total Calls | Total Duration (Seconds) | Avg Duration (Seconds) |
|---|