| Seq | Timestamp | Type | Name | Duration |
|---|---|---|---|---|
| 0/0 | 2026/07/07 22:54 | flow | patch-triage |
0mArgs:null Results: {
"EnableConfigs": [
"CFG80211"
],
"FocusSymbols": [
"cfg80211_process_wiphy_works"
],
"Reasoning": "The patch fixes a list corruption/use-after-free bug in `cfg80211_process_wiphy_works` by properly removing elements from `wiphy_work_list` when the runaway limit is reached, instead of just reinitializing the list head. This is a functional change in the core wireless subsystem.",
"WorthFuzzing": true
} |
| 1/1 | 2026/07/07 22:54 | action | read-patch-diff |
0mArgs:null Results: {
"PatchDiff": "commit 16fcb7da35eeacaa67ee82cb8953b122ab489d68\nAuthor: syz-cluster \u003ctriage@syzkaller.com\u003e\nDate: Tue Jul 7 22:54:37 2026 +0000\n\n syz-cluster: applied patch under review\n\ndiff --git a/net/wireless/core.c b/net/wireless/core.c\nindex 3dcf63b04c41db..a7e011ed455db5 100644\n--- a/net/wireless/core.c\n+++ b/net/wireless/core.c\n@@ -1278,8 +1278,14 @@ void cfg80211_process_wiphy_works(struct cfg80211_registered_device *rdev,\n \t\tif (wk == end)\n \t\t\tbreak;\n \n-\t\tif (WARN_ON(--runaway_limit == 0))\n-\t\t\tINIT_LIST_HEAD(\u0026rdev-\u003ewiphy_work_list);\n+\t\tif (WARN_ON(--runaway_limit == 0)) {\n+\t\t\twhile (!list_empty(\u0026rdev-\u003ewiphy_work_list)) {\n+\t\t\t\twk = list_first_entry(\u0026rdev-\u003ewiphy_work_list,\n+\t\t\t\t\t\t struct wiphy_work,\n+\t\t\t\t\t\t entry);\n+\t\t\t\tlist_del_init(\u0026wk-\u003eentry);\n+\t\t\t}\n+\t\t}\n \t}\n \tspin_unlock_irqrestore(\u0026rdev-\u003ewiphy_work_lock, flags);\n }\n"
} |
| 2/1 | 2026/07/07 22:54 | agent | patch-evaluator |
0mModel:gemini-3.1-pro-preview Args: null Results: {
"EnableConfigs": [
"CFG80211"
],
"FocusSymbols": [
"cfg80211_process_wiphy_works"
],
"Reasoning": "The patch fixes a list corruption/use-after-free bug in `cfg80211_process_wiphy_works` by properly removing elements from `wiphy_work_list` when the runaway limit is reached, instead of just reinitializing the list head. This is a functional change in the core wireless subsystem.",
"WorthFuzzing": true
}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 16fcb7da35eeacaa67ee82cb8953b122ab489d68
Author: syz-cluster <triage@syzkaller.com>
Date: Tue Jul 7 22:54:37 2026 +0000
syz-cluster: applied patch under review
diff --git a/net/wireless/core.c b/net/wireless/core.c
index 3dcf63b04c41db..a7e011ed455db5 100644
--- a/net/wireless/core.c
+++ b/net/wireless/core.c
@@ -1278,8 +1278,14 @@ void cfg80211_process_wiphy_works(struct cfg80211_registered_device *rdev,
if (wk == end)
break;
- if (WARN_ON(--runaway_limit == 0))
- INIT_LIST_HEAD(&rdev->wiphy_work_list);
+ if (WARN_ON(--runaway_limit == 0)) {
+ while (!list_empty(&rdev->wiphy_work_list)) {
+ wk = list_first_entry(&rdev->wiphy_work_list,
+ struct wiphy_work,
+ entry);
+ list_del_init(&wk->entry);
+ }
+ }
}
spin_unlock_irqrestore(&rdev->wiphy_work_lock, flags);
}
|
| 3/2 | 2026/07/07 22:54 | llm | patch-evaluator |
0mModel:gemini-3.1-pro-preview Args: null Results: null Tokens: input: 1923 output: 27 thoughts: 147 Thoughts: **Analyzing the Wireless Core Patch** Okay, so this patch is targeting `cfg80211_process_wiphy_works` in `net/wireless/core.c`. My initial thought is, "Ah, another wireless core change, likely performance or a bug fix". Now, the interesting part is the modification. Instead of just initializing the work list with `INIT_LIST_HEAD`, the author is iterating through the list and using `list_del_init` on each entry. That’s a crucial distinction. It implies they are actively *cleaning up* the list. This is more than just initializing; it's a removal process. Thinking through it, this is a definite functional improvement. The original implementation likely had lingering pointers, potentially leading to use-after-free or list corruption errors, nasty, difficult bugs to track down. This patch is aimed at explicitly clearing the entries before they're re-used or, potentially, when the wiphy is shut down. My next step? I need to delve into the code. Let's trace `cfg80211_process_wiphy_works` and see *where* it's called and *what* it does. Understanding the call paths and the context is essential to grasp the full implications of this fix, and how critical it is. |
| 4/2 | 2026/07/07 22:54 | tool | grepper |
0mArgs:{
"Expression": "cfg80211_process_wiphy_works"
}Results: {
"Output": "net/wireless/core.c=1254=EXPORT_SYMBOL(wiphy_rfkill_start_polling);\nnet/wireless/core.c-1255-\nnet/wireless/core.c:1256:void cfg80211_process_wiphy_works(struct cfg80211_registered_device *rdev,\nnet/wireless/core.c-1257-\t\t\t\t struct wiphy_work *end)\n--\nnet/wireless/core.c=1293=void wiphy_unregister(struct wiphy *wiphy)\n--\nnet/wireless/core.c-1336-\t/* surely nothing is reachable now, clean up work */\nnet/wireless/core.c:1337:\tcfg80211_process_wiphy_works(rdev, NULL);\nnet/wireless/core.c-1338-\twiphy_unlock(\u0026rdev-\u003ewiphy);\n--\nnet/wireless/core.c=1913=void wiphy_work_flush(struct wiphy *wiphy, struct wiphy_work *work)\n--\nnet/wireless/core.c-1925-\tif (run)\nnet/wireless/core.c:1926:\t\tcfg80211_process_wiphy_works(rdev, work);\nnet/wireless/core.c-1927-}\n--\nnet/wireless/core.h=469=void cfg80211_process_rdev_events(struct cfg80211_registered_device *rdev);\nnet/wireless/core.h:470:void cfg80211_process_wiphy_works(struct cfg80211_registered_device *rdev,\nnet/wireless/core.h-471-\t\t\t\t struct wiphy_work *end);\n--\nnet/wireless/sysfs.c=94=static int wiphy_suspend(struct device *dev)\n--\nnet/wireless/sysfs.c-106-\t\tscoped_guard(wiphy, \u0026rdev-\u003ewiphy) {\nnet/wireless/sysfs.c:107:\t\t\tcfg80211_process_wiphy_works(rdev, NULL);\nnet/wireless/sysfs.c-108-\t\t\tif (rdev-\u003eops-\u003esuspend)\n--\nnet/wireless/sysfs.c-120-\t\tcfg80211_process_rdev_events(rdev);\nnet/wireless/sysfs.c:121:\t\tcfg80211_process_wiphy_works(rdev, NULL);\nnet/wireless/sysfs.c-122-\t\tif (rdev-\u003eops-\u003esuspend)\n"
} |
| 5/2 | 2026/07/07 22:54 | llm | patch-evaluator |
0mModel:gemini-3.1-pro-preview Args: null Results: null Tokens: input: 3045 output: 34 thoughts: 103 Thoughts: **Analyzing the cfg80211 Core's Work Processing** Okay, so I'm looking at this `cfg80211` code, specifically the function `cfg80211_process_wiphy_works`. My initial thought is to understand its scope and how it's being used. I see that it's called in a few critical places: `wiphy_unregister`, `wiphy_work_flush`, and `wiphy_suspend`. That suggests it's central to handling work items related to the Wi-Fi PHY abstraction layer, which is consistent with the `cfg80211` core's role. Now, because I’m dealing with configuration aspects of the kernel, I want to confirm that there isn't a specific configuration option influencing this behavior. It makes sense to check `net/wireless/Kconfig`. I'll look for any associated configurations, specifically related to `cfg80211`, like the main `CFG80211` config, to see if there are any flags I might have to consider. |
| 6/2 | 2026/07/07 22:54 | tool | grepper |
0mArgs:{
"Expression": "config CFG80211",
"PathPrefix": "net/wireless/Kconfig"
}Results: {
"Output": "net/wireless/Kconfig=14=config WEXT_PRIV\n--\nnet/wireless/Kconfig-16-\nnet/wireless/Kconfig:17:config CFG80211\nnet/wireless/Kconfig-18-\ttristate \"cfg80211 - wireless configuration API\"\n--\nnet/wireless/Kconfig=38=config NL80211_TESTMODE\n--\nnet/wireless/Kconfig-51-\nnet/wireless/Kconfig:52:config CFG80211_DEVELOPER_WARNINGS\nnet/wireless/Kconfig-53-\tbool \"enable developer warnings\"\n--\nnet/wireless/Kconfig-67-\nnet/wireless/Kconfig:68:config CFG80211_CERTIFICATION_ONUS\nnet/wireless/Kconfig-69-\tbool \"cfg80211 certification onus\"\n--\nnet/wireless/Kconfig-88-\nnet/wireless/Kconfig:89:config CFG80211_REQUIRE_SIGNED_REGDB\nnet/wireless/Kconfig-90-\tbool \"require regdb signature\" if CFG80211_CERTIFICATION_ONUS\n--\nnet/wireless/Kconfig-98-\nnet/wireless/Kconfig:99:config CFG80211_USE_KERNEL_REGDB_KEYS\nnet/wireless/Kconfig-100-\tbool \"allow regdb keys shipped with the kernel\" if CFG80211_CERTIFICATION_ONUS\n--\nnet/wireless/Kconfig-110-\nnet/wireless/Kconfig:111:config CFG80211_EXTRA_REGDB_KEYDIR\nnet/wireless/Kconfig-112-\tstring \"additional regdb key directory\" if CFG80211_CERTIFICATION_ONUS\n--\nnet/wireless/Kconfig-121-\nnet/wireless/Kconfig:122:config CFG80211_REG_CELLULAR_HINTS\nnet/wireless/Kconfig-123-\tbool \"cfg80211 regulatory support for cellular base station hints\"\n--\nnet/wireless/Kconfig-134-\nnet/wireless/Kconfig:135:config CFG80211_REG_RELAX_NO_IR\nnet/wireless/Kconfig-136-\tbool \"cfg80211 support for NO_IR relaxation\"\n--\nnet/wireless/Kconfig-158-\nnet/wireless/Kconfig:159:config CFG80211_DEFAULT_PS\nnet/wireless/Kconfig-160-\tbool \"enable powersave by default\"\n--\nnet/wireless/Kconfig-168-\nnet/wireless/Kconfig:169:config CFG80211_DEBUGFS\nnet/wireless/Kconfig-170-\tbool \"cfg80211 DebugFS entries\"\n--\nnet/wireless/Kconfig-176-\nnet/wireless/Kconfig:177:config CFG80211_CRDA_SUPPORT\nnet/wireless/Kconfig-178-\tbool \"support CRDA\" if EXPERT\n--\nnet/wireless/Kconfig-186-\nnet/wireless/Kconfig:187:config CFG80211_WEXT\nnet/wireless/Kconfig-188-\tbool \"cfg80211 wireless extensions compatibility\"\n--\nnet/wireless/Kconfig-193-\nnet/wireless/Kconfig:194:config CFG80211_KUNIT_TEST\nnet/wireless/Kconfig-195-\ttristate \"KUnit tests for cfg80211\" if !KUNIT_ALL_TESTS\n"
} |
| 7/2 | 2026/07/07 22:54 | llm | patch-evaluator |
0mModel:gemini-3.1-pro-preview Args: null Results: null Tokens: input: 4334 output: 36 thoughts: 134 Thoughts: **Analyzing a Wireless Core Bug Fix** Okay, so this patch is targeting a bug within `net/wireless/core.c`, specifically related to the `cfg80211_process_wiphy_works` function. Good, that makes sense. It looks like this code path is only active when `CONFIG_CFG80211` is enabled, which is the core configuration for the CFG80211 wireless subsystem. Knowing that `CFG80211` is the key enables me to quickly assess the impact and implications of the change. The core of the issue appears to revolve around improper list management within `cfg80211_process_wiphy_works`. It seems that instead of properly handling list elements (presumably removing them), the code was using `INIT_LIST_HEAD` inappropriately when the `runaway_limit` hits zero. That's a classic error, and it can definitely lead to memory leaks or unexpected behavior in the wireless stack. This is a functional change, implying that it directly impacts the operation of the wireless driver. Now, I need to take a closer look at the `cfg80211_process_wiphy_works` function itself within `net/wireless/core.c` to understand the exact context and the severity of the flaw. I need to understand *how* the list is used and *why* this initialization was incorrect. This is a good starting point for a deeper dive. |
| 8/2 | 2026/07/07 22:55 | tool | read-file |
0mArgs:{
"File": "net/wireless/core.c",
"FirstLine": 1256,
"LineCount": 50
}Results: {
"Contents": "1256:\tvoid cfg80211_process_wiphy_works(struct cfg80211_registered_device *rdev,\n1257:\t\t\t\t\t struct wiphy_work *end)\n1258:\t{\n1259:\t\tunsigned int runaway_limit = 100;\n1260:\t\tunsigned long flags;\n1261:\t\n1262:\t\tlockdep_assert_held(\u0026rdev-\u003ewiphy.mtx);\n1263:\t\n1264:\t\tspin_lock_irqsave(\u0026rdev-\u003ewiphy_work_lock, flags);\n1265:\t\twhile (!list_empty(\u0026rdev-\u003ewiphy_work_list)) {\n1266:\t\t\tstruct wiphy_work *wk;\n1267:\t\n1268:\t\t\twk = list_first_entry(\u0026rdev-\u003ewiphy_work_list,\n1269:\t\t\t\t\t struct wiphy_work, entry);\n1270:\t\t\tlist_del_init(\u0026wk-\u003eentry);\n1271:\t\t\tspin_unlock_irqrestore(\u0026rdev-\u003ewiphy_work_lock, flags);\n1272:\t\n1273:\t\t\ttrace_wiphy_work_run(\u0026rdev-\u003ewiphy, wk);\n1274:\t\t\twk-\u003efunc(\u0026rdev-\u003ewiphy, wk);\n1275:\t\n1276:\t\t\tspin_lock_irqsave(\u0026rdev-\u003ewiphy_work_lock, flags);\n1277:\t\n1278:\t\t\tif (wk == end)\n1279:\t\t\t\tbreak;\n1280:\t\n1281:\t\t\tif (WARN_ON(--runaway_limit == 0)) {\n1282:\t\t\t\twhile (!list_empty(\u0026rdev-\u003ewiphy_work_list)) {\n1283:\t\t\t\t\twk = list_first_entry(\u0026rdev-\u003ewiphy_work_list,\n1284:\t\t\t\t\t\t\t struct wiphy_work,\n1285:\t\t\t\t\t\t\t entry);\n1286:\t\t\t\t\tlist_del_init(\u0026wk-\u003eentry);\n1287:\t\t\t\t}\n1288:\t\t\t}\n1289:\t\t}\n1290:\t\tspin_unlock_irqrestore(\u0026rdev-\u003ewiphy_work_lock, flags);\n1291:\t}\n1292:\t\n1293:\tvoid wiphy_unregister(struct wiphy *wiphy)\n1294:\t{\n1295:\t\tstruct cfg80211_registered_device *rdev = wiphy_to_rdev(wiphy);\n1296:\t\n1297:\t\twait_event(rdev-\u003edev_wait, ({\n1298:\t\t\tint __count;\n1299:\t\t\twiphy_lock(\u0026rdev-\u003ewiphy);\n1300:\t\t\t__count = rdev-\u003eopencount;\n1301:\t\t\twiphy_unlock(\u0026rdev-\u003ewiphy);\n1302:\t\t\t__count == 0; }));\n1303:\t\n1304:\t\tif (rdev-\u003ewiphy.rfkill)\n1305:\t\t\trfkill_unregister(rdev-\u003ewiphy.rfkill);\n"
} |
| 9/2 | 2026/07/07 22:55 | llm | patch-evaluator |
0mModel:gemini-3.1-pro-preview Args: null Results: null Tokens: input: 5624 output: 124 thoughts: 191 Thoughts: **My Approach to Testing this Kernel Patch** Okay, so I've got this patch targeting `cfg80211_process_wiphy_works`. My initial thought is that I need to verify its core functionality and ensure that this specific bug – a list corruption/use-after-free situation – is truly addressed. The logic seems straightforward: the patch deals with the correct handling of elements within the `wiphy_work_list` when the processing limit is hit. Instead of just resetting the list head, it now does a proper removal. Given that it's a critical change within the wireless core, I'll leverage the `MAC80211_HWSIM` driver for testing. It’s ideal for these sorts of `cfg80211` investigations. To make sure the target code is active, I'll definitely enable the `CFG80211` configuration option. Therefore, for my fuzzing setup, I'll set `WorthFuzzing` to `true`, as the fix sounds like it would benefit from fuzz testing, specifically to trigger whatever state results in the corruption in the first place. I'll make sure to zero in on `cfg80211_process_wiphy_works` with `FocusSymbols`. And of course, `EnableConfigs` will be set to `CFG80211` so I'm not missing any pre-requisites. |
| 10/2 | 2026/07/07 22:55 | tool | set-results |
0mArgs:{
"EnableConfigs": [
"CFG80211"
],
"FocusSymbols": [
"cfg80211_process_wiphy_works"
],
"Reasoning": "The patch fixes a list corruption/use-after-free bug in `cfg80211_process_wiphy_works` by properly removing elements from `wiphy_work_list` when the runaway limit is reached, instead of just reinitializing the list head. This is a functional change in the core wireless subsystem.",
"WorthFuzzing": true
}Results: {
"EnableConfigs": [
"CFG80211"
],
"FocusSymbols": [
"cfg80211_process_wiphy_works"
],
"Reasoning": "The patch fixes a list corruption/use-after-free bug in `cfg80211_process_wiphy_works` by properly removing elements from `wiphy_work_list` when the runaway limit is reached, instead of just reinitializing the list head. This is a functional change in the core wireless subsystem.",
"WorthFuzzing": true
} |
| Total Calls | Total Tokens | Avg Tokens | Total Duration (Seconds) | Avg Duration (Seconds) |
|---|
| Total Calls | Total Duration (Seconds) | Avg Duration (Seconds) |
|---|