| Seq | Timestamp | Type | Name | Duration |
|---|---|---|---|---|
| 0/0 | 2026/07/03 05:40 | flow | patch-triage |
0mArgs:null Results: {
"EnableConfigs": null,
"FocusSymbols": [],
"Reasoning": "The patch converts an existing random32 self-test into a KUnit test. It does not modify any functional core kernel logic or introduce new features that require fuzzing.",
"WorthFuzzing": false
} |
| 1/1 | 2026/07/03 05:40 | action | read-patch-diff |
0mArgs:null Results: {
"PatchDiff": "commit 788cb63113be4f330b0620d7a60faaa6d7833a0b\nAuthor: syz-cluster \u003ctriage@syzkaller.com\u003e\nDate: Fri Jul 3 05:40:54 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..0b4af2b09c0112\n--- /dev/null\n+++ b/lib/tests/random32_kunit.c\n@@ -0,0 +1,182 @@\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+MODULE_IMPORT_NS(\"EXPORTED_FOR_KUNIT_TESTING\");\n"
} |
| 2/1 | 2026/07/03 05:40 | agent | patch-evaluator |
0mModel:gemini-3.1-pro-preview Args: null Results: {
"EnableConfigs": null,
"FocusSymbols": [],
"Reasoning": "The patch converts an existing random32 self-test into a KUnit test. It does not modify any functional core kernel logic or introduce new features that 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 788cb63113be4f330b0620d7a60faaa6d7833a0b
Author: syz-cluster <triage@syzkaller.com>
Date: Fri Jul 3 05:40:54 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..0b4af2b09c0112
--- /dev/null
+++ b/lib/tests/random32_kunit.c
@@ -0,0 +1,182 @@
+// 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");
+MODULE_IMPORT_NS("EXPORTED_FOR_KUNIT_TESTING");
|
| 3/2 | 2026/07/03 05:40 | llm | patch-evaluator |
0mModel:gemini-3.1-pro-preview Args: null Results: null Tokens: input: 11619 output: 66 thoughts: 291 Thoughts: **KUnit Test Conversion for the Random32 Self-Test** Okay, so I've just been looking over this patch. It's essentially a straightforward conversion of the existing `random32` self-test to a KUnit test framework. My immediate takeaway is that this is a *purely* refactoring effort for testing; there's no alteration to the underlying PRNG logic itself, which is what I'm most concerned with from a fuzzing perspective. Specifically, it looks like `CONFIG_RANDOM32_SELFTEST` is getting removed, and in its place we're seeing `CONFIG_PRANDOM_KUNIT_TEST` introduced. The test code itself has been moved out of `lib/random32.c` and into its own dedicated KUnit test file, `lib/tests/random32_kunit.c`. Importantly, they've modified `lib/random32.c` to expose `prandom_warmup` specifically for KUnit usage. This is a sensible move. Let me just do a quick sanity check of the changes... Yep, as expected: `lib/Kconfig` has the `RANDOM32_SELFTEST` removal, `lib/Kconfig.debug` now includes the `PRANDOM_KUNIT_TEST`. The main `random32.c` file is being cleaned up – `prandom_warmup` is exposed, but the old selftest functions and data are now gone. And of course, the `lib/tests/Makefile` has been updated to include the new `random32_kunit.o` and the `random32_kunit.c` file itself. Since this is merely a test restructuring, and the core PRNG functionality is untouched, I'm confident in assessing this as **not** introducing any new functional kernel logic that would require fuzzing. So, I will be returning `WorthFuzzing=false`. |
| 4/2 | 2026/07/03 05:41 | tool | set-results |
0mArgs:{
"EnableConfigs": [],
"FocusSymbols": [],
"Reasoning": "The patch converts an existing random32 self-test into a KUnit test. It does not modify any functional core kernel logic or introduce new features that require fuzzing.",
"WorthFuzzing": false
}Results: {
"EnableConfigs": null,
"FocusSymbols": [],
"Reasoning": "The patch converts an existing random32 self-test into a KUnit test. It does not modify any functional core kernel logic or introduce new features that require fuzzing.",
"WorthFuzzing": false
} |
| Total Calls | Total Tokens | Avg Tokens | Total Duration (Seconds) | Avg Duration (Seconds) |
|---|
| Total Calls | Total Duration (Seconds) | Avg Duration (Seconds) |
|---|