| Seq | Timestamp | Type | Name | Duration |
|---|---|---|---|---|
| 0/0 | 2026/06/28 10:25 | flow | patch-triage |
0mArgs:null Results: {
"EnableConfigs": [
"MAC80211",
"MAC80211_HWSIM"
],
"FocusSymbols": [
"ieee80211_register_hw"
],
"Reasoning": "The patch fixes a resource leak in the error handling path of `ieee80211_register_hw` when `kmemdup` fails. This is a functional change in the core mac80211 subsystem and can be triggered by creating virtual radios using `mac80211_hwsim` and injecting memory allocation failures.",
"WorthFuzzing": true
} |
| 1/1 | 2026/06/28 10:25 | action | read-patch-diff |
0mArgs:null Results: {
"PatchDiff": "commit f7b37afc60d47d33d4f47f6b678ee33f00cba182\nAuthor: syz-cluster \u003ctriage@syzkaller.com\u003e\nDate: Sun Jun 28 10:25:06 2026 +0000\n\n syz-cluster: applied patch under review\n\ndiff --git a/net/mac80211/main.c b/net/mac80211/main.c\nindex f47dd58770adb9..dba66dd964af33 100644\n--- a/net/mac80211/main.c\n+++ b/net/mac80211/main.c\n@@ -1599,7 +1599,7 @@ int ieee80211_register_hw(struct ieee80211_hw *hw)\n \t\tsband = kmemdup(sband, sizeof(*sband), GFP_KERNEL);\n \t\tif (!sband) {\n \t\t\tresult = -ENOMEM;\n-\t\t\tgoto fail_rate;\n+\t\t\tgoto fail_band;\n \t\t}\n \n \t\twiphy_dbg(hw-\u003ewiphy, \"copying sband (band %d) due to VHT EXT NSS BW flag\\n\",\n@@ -1675,6 +1675,7 @@ int ieee80211_register_hw(struct ieee80211_hw *hw)\n #endif\n \twiphy_unregister(local-\u003ehw.wiphy);\n fail_wiphy_register:\n+ fail_band:\n \trtnl_lock();\n \trate_control_deinitialize(local);\n \tieee80211_remove_interfaces(local);\n"
} |
| 2/1 | 2026/06/28 10:25 | agent | patch-evaluator |
0mModel:gemini-3.1-pro-preview Args: null Results: {
"EnableConfigs": [
"MAC80211",
"MAC80211_HWSIM"
],
"FocusSymbols": [
"ieee80211_register_hw"
],
"Reasoning": "The patch fixes a resource leak in the error handling path of `ieee80211_register_hw` when `kmemdup` fails. This is a functional change in the core mac80211 subsystem and can be triggered by creating virtual radios using `mac80211_hwsim` and injecting memory allocation failures.",
"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 f7b37afc60d47d33d4f47f6b678ee33f00cba182
Author: syz-cluster <triage@syzkaller.com>
Date: Sun Jun 28 10:25:06 2026 +0000
syz-cluster: applied patch under review
diff --git a/net/mac80211/main.c b/net/mac80211/main.c
index f47dd58770adb9..dba66dd964af33 100644
--- a/net/mac80211/main.c
+++ b/net/mac80211/main.c
@@ -1599,7 +1599,7 @@ int ieee80211_register_hw(struct ieee80211_hw *hw)
sband = kmemdup(sband, sizeof(*sband), GFP_KERNEL);
if (!sband) {
result = -ENOMEM;
- goto fail_rate;
+ goto fail_band;
}
wiphy_dbg(hw->wiphy, "copying sband (band %d) due to VHT EXT NSS BW flag\n",
@@ -1675,6 +1675,7 @@ int ieee80211_register_hw(struct ieee80211_hw *hw)
#endif
wiphy_unregister(local->hw.wiphy);
fail_wiphy_register:
+ fail_band:
rtnl_lock();
rate_control_deinitialize(local);
ieee80211_remove_interfaces(local);
|
| 3/2 | 2026/06/28 10:25 | llm | patch-evaluator |
0mModel:gemini-3.1-pro-preview Args: null Results: null Tokens: input: 1972 output: 35 thoughts: 128 Thoughts: **Analyzing a mac80211 Patch** Okay, so this patch is touching `net/mac80211/main.c`, which immediately flags my attention – that's a core file. Let's dig in. It's making a specific change within `ieee80211_register_hw`. The key seems to be the handling of a `kmemdup` failure related to `sband`. Previously, if `kmemdup` failed, the code jumped to `fail_rate`. Now, it's being redirected to `fail_band`. That's the first significant alteration, and the reason for that matters. And then there's the addition of the `fail_band:` label immediately *before* `rtnl_lock()` and the `rate_control_deinitialize(local)` calls. This tells me that the failure handling is being expanded; the intent may be to make the handling more specific to band initialization issues. I want to see if this affects locking. It will be useful to understand how to correctly interpret the change with respect to the existing locking and resource deallocation logic. Essentially, they're creating a more robust failure path specifically for the scenario where `sband` allocation fails. Given my expertise, I'm already mentally walking through the potential consequences of this – memory leaks, resource starvation, unexpected behavior during hardware initialization. Let me take a closer look at `ieee80211_register_hw` itself, to put this into context. |
| 4/2 | 2026/06/28 10:25 | tool | grepper |
0mArgs:{
"Expression": "fail_rate",
"PathPrefix": "net/mac80211/main.c"
}Results: {
"Output": "net/mac80211/main.c=1134=int ieee80211_register_hw(struct ieee80211_hw *hw)\n--\nnet/mac80211/main.c-1564-\t\t\t \"Failed to initialize rate control algorithm\\n\");\nnet/mac80211/main.c:1565:\t\tgoto fail_rate;\nnet/mac80211/main.c-1566-\t}\n--\nnet/mac80211/main.c-1682-\trtnl_unlock();\nnet/mac80211/main.c:1683: fail_rate:\nnet/mac80211/main.c-1684-\tieee80211_txq_teardown_flows(local);\n"
} |
| 5/2 | 2026/06/28 10:25 | llm | patch-evaluator |
0mModel:gemini-3.1-pro-preview Args: null Results: null Tokens: input: 2682 output: 41 thoughts: 59 Thoughts: **Navigating the Codebase** Okay, so I'm trying to track down something related to this `fail_rate` issue. Right, line numbers... `fail_rate` is at 1683, and `fail_band` is at 1675. That makes sense, they are likely related. Let's see... the relevant function is probably near `net/mac80211/main.c`. I need to zero in on the area around line 1675. Hopefully, this section will shed some light on the fail rates. Let's see what's happening in there. This is where the core logic must live. |
| 6/2 | 2026/06/28 10:25 | tool | read-file |
0mArgs:{
"File": "net/mac80211/main.c",
"FirstLine": 1660,
"LineCount": 40
}Results: {
"Contents": "1660:\t\tresult = register_inet6addr_notifier(\u0026local-\u003eifa6_notifier);\n1661:\t\tif (result)\n1662:\t\t\tgoto fail_ifa6;\n1663:\t#endif\n1664:\t\n1665:\t\treturn 0;\n1666:\t\n1667:\t#if IS_ENABLED(CONFIG_IPV6)\n1668:\t fail_ifa6:\n1669:\t#ifdef CONFIG_INET\n1670:\t\tunregister_inetaddr_notifier(\u0026local-\u003eifa_notifier);\n1671:\t#endif\n1672:\t#endif\n1673:\t#if defined(CONFIG_INET) || defined(CONFIG_IPV6)\n1674:\t fail_ifa:\n1675:\t#endif\n1676:\t\twiphy_unregister(local-\u003ehw.wiphy);\n1677:\t fail_wiphy_register:\n1678:\t fail_band:\n1679:\t\trtnl_lock();\n1680:\t\trate_control_deinitialize(local);\n1681:\t\tieee80211_remove_interfaces(local);\n1682:\t\trtnl_unlock();\n1683:\t fail_rate:\n1684:\t\tieee80211_txq_teardown_flows(local);\n1685:\t fail_flows:\n1686:\t\tieee80211_led_exit(local);\n1687:\t\tdestroy_workqueue(local-\u003eworkqueue);\n1688:\t fail_workqueue:\n1689:\t\tkfree(local-\u003eint_scan_req);\n1690:\t\treturn result;\n1691:\t}\n1692:\tEXPORT_SYMBOL(ieee80211_register_hw);\n1693:\t\n1694:\tvoid ieee80211_unregister_hw(struct ieee80211_hw *hw)\n1695:\t{\n1696:\t\tstruct ieee80211_local *local = hw_to_local(hw);\n1697:\t\n1698:\t\ttasklet_kill(\u0026local-\u003etx_pending_tasklet);\n1699:\t\ttasklet_kill(\u0026local-\u003etasklet);\n"
} |
| 7/2 | 2026/06/28 10:25 | llm | patch-evaluator |
0mModel:gemini-3.1-pro-preview Args: null Results: null Tokens: input: 3528 output: 42 thoughts: 119 Thoughts: **Analyzing the Error Handling Flow** Okay, so I'm looking at this code and trying to understand the error path. I see `fail_band` is the label right before the critical section, `rtnl_lock(); rate_control_deinitialize(local); ieee80211_remove_interfaces(local); rtnl_unlock();`. This seems like a cleanup block. Then I remember there's another failure label, `fail_rate`, which *doesn't* execute `rate_control_deinitialize(local)` or `ieee80211_remove_interfaces(local)`. That's important; it means there's a distinction in what needs to be cleaned up based on where the error occurs. Now, I've got a specific failure to track down: the `kmemdup` failure. The code tells me that this failure happens *after* `rate_control_initialize(local)` is called. I need to trace back from that point, understand the implications of the failure, and make sure the correct cleanup happens. Let me go back and see where that `kmemdup` is happening exactly, that's the next step. I'm going to have to carefully consider the state of the system at this point to get this right. |
| 8/2 | 2026/06/28 10:25 | tool | read-file |
0mArgs:{
"File": "net/mac80211/main.c",
"FirstLine": 1550,
"LineCount": 100
}Results: {
"Contents": "1550:\t\tlocal-\u003ehw.conf.flags = IEEE80211_CONF_IDLE;\n1551:\t\n1552:\t\tieee80211_led_init(local);\n1553:\t\n1554:\t\tresult = ieee80211_txq_setup_flows(local);\n1555:\t\tif (result)\n1556:\t\t\tgoto fail_flows;\n1557:\t\n1558:\t\trtnl_lock();\n1559:\t\tresult = ieee80211_init_rate_ctrl_alg(local,\n1560:\t\t\t\t\t\t hw-\u003erate_control_algorithm);\n1561:\t\trtnl_unlock();\n1562:\t\tif (result \u003c 0) {\n1563:\t\t\twiphy_debug(local-\u003ehw.wiphy,\n1564:\t\t\t\t \"Failed to initialize rate control algorithm\\n\");\n1565:\t\t\tgoto fail_rate;\n1566:\t\t}\n1567:\t\n1568:\t\tif (local-\u003erate_ctrl) {\n1569:\t\t\tclear_bit(IEEE80211_HW_SUPPORTS_VHT_EXT_NSS_BW, hw-\u003eflags);\n1570:\t\t\tif (local-\u003erate_ctrl-\u003eops-\u003ecapa \u0026 RATE_CTRL_CAPA_VHT_EXT_NSS_BW)\n1571:\t\t\t\tieee80211_hw_set(hw, SUPPORTS_VHT_EXT_NSS_BW);\n1572:\t\t}\n1573:\t\n1574:\t\t/*\n1575:\t\t * If the VHT capabilities don't have IEEE80211_VHT_EXT_NSS_BW_CAPABLE,\n1576:\t\t * or have it when we don't, copy the sband structure and set/clear it.\n1577:\t\t * This is necessary because rate scaling algorithms could be switched\n1578:\t\t * and have different support values.\n1579:\t\t * Print a message so that in the common case the reallocation can be\n1580:\t\t * avoided.\n1581:\t\t */\n1582:\t\tBUILD_BUG_ON(NUM_NL80211_BANDS \u003e 8 * sizeof(local-\u003esband_allocated));\n1583:\t\tfor (band = 0; band \u003c NUM_NL80211_BANDS; band++) {\n1584:\t\t\tstruct ieee80211_supported_band *sband;\n1585:\t\t\tbool local_cap, ie_cap;\n1586:\t\n1587:\t\t\tlocal_cap = ieee80211_hw_check(hw, SUPPORTS_VHT_EXT_NSS_BW);\n1588:\t\n1589:\t\t\tsband = local-\u003ehw.wiphy-\u003ebands[band];\n1590:\t\t\tif (!sband || !sband-\u003evht_cap.vht_supported)\n1591:\t\t\t\tcontinue;\n1592:\t\n1593:\t\t\tie_cap = !!(sband-\u003evht_cap.vht_mcs.tx_highest \u0026\n1594:\t\t\t\t cpu_to_le16(IEEE80211_VHT_EXT_NSS_BW_CAPABLE));\n1595:\t\n1596:\t\t\tif (local_cap == ie_cap)\n1597:\t\t\t\tcontinue;\n1598:\t\n1599:\t\t\tsband = kmemdup(sband, sizeof(*sband), GFP_KERNEL);\n1600:\t\t\tif (!sband) {\n1601:\t\t\t\tresult = -ENOMEM;\n1602:\t\t\t\tgoto fail_band;\n1603:\t\t\t}\n1604:\t\n1605:\t\t\twiphy_dbg(hw-\u003ewiphy, \"copying sband (band %d) due to VHT EXT NSS BW flag\\n\",\n1606:\t\t\t\t band);\n1607:\t\n1608:\t\t\tsband-\u003evht_cap.vht_mcs.tx_highest ^=\n1609:\t\t\t\tcpu_to_le16(IEEE80211_VHT_EXT_NSS_BW_CAPABLE);\n1610:\t\n1611:\t\t\tlocal-\u003ehw.wiphy-\u003ebands[band] = sband;\n1612:\t\t\tlocal-\u003esband_allocated |= BIT(band);\n1613:\t\t}\n1614:\t\n1615:\t\t/*\n1616:\t\t * mac80211 supports EPPKE, if the driver supports (Re)Association\n1617:\t\t * frame encryption\n1618:\t\t */\n1619:\t\tif (wiphy_ext_feature_isset(local-\u003ehw.wiphy,\n1620:\t\t\t\t\t NL80211_EXT_FEATURE_ASSOC_FRAME_ENCRYPTION))\n1621:\t\t\twiphy_ext_feature_set(local-\u003ehw.wiphy,\n1622:\t\t\t\t\t NL80211_EXT_FEATURE_EPPKE);\n1623:\t\n1624:\t\tresult = wiphy_register(local-\u003ehw.wiphy);\n1625:\t\tif (result \u003c 0)\n1626:\t\t\tgoto fail_wiphy_register;\n1627:\t\n1628:\t\tdebugfs_hw_add(local);\n1629:\t\trate_control_add_debugfs(local);\n1630:\t\n1631:\t\tieee80211_check_wbrf_support(local);\n1632:\t\n1633:\t\trtnl_lock();\n1634:\t\twiphy_lock(hw-\u003ewiphy);\n1635:\t\n1636:\t\t/* add one default STA interface if supported */\n1637:\t\tif (local-\u003ehw.wiphy-\u003einterface_modes \u0026 BIT(NL80211_IFTYPE_STATION) \u0026\u0026\n1638:\t\t !ieee80211_hw_check(hw, NO_AUTO_VIF)) {\n1639:\t\t\tstruct vif_params params = {0};\n1640:\t\n1641:\t\t\tresult = ieee80211_if_add(local, \"wlan%d\", NET_NAME_ENUM, NULL,\n1642:\t\t\t\t\t\t NL80211_IFTYPE_STATION, \u0026params);\n1643:\t\t\tif (result)\n1644:\t\t\t\twiphy_warn(local-\u003ehw.wiphy,\n1645:\t\t\t\t\t \"Failed to add default virtual iface\\n\");\n1646:\t\t}\n1647:\t\n1648:\t\twiphy_unlock(hw-\u003ewiphy);\n1649:\t\trtnl_unlock();\n"
} |
| 9/2 | 2026/06/28 10:25 | llm | patch-evaluator |
0mModel:gemini-3.1-pro-preview Args: null Results: null Tokens: input: 5691 output: 48 thoughts: 390 Thoughts: **Analyzing a Wireless Driver Initialization Bug** Okay, so I'm looking at this patch and immediately, I see the problem. `ieee80211_init_rate_ctrl_alg` gets called before `kmemdup`. If `kmemdup` fails, we used to jump to `fail_rate`, skipping the crucial `rate_control_deinitialize(local)` call. But `ieee80211_init_rate_ctrl_alg` has already set up the rate control algorithm, right? So, the failure means we'd have an uninitialized algorithm hanging around – a classic memory leak or resource leak scenario. The patch correctly fixes this by redirecting to `fail_band`, which now includes the necessary cleanup with `rate_control_deinitialize(local)`. Hold on... `fail_band` also calls `ieee80211_remove_interfaces(local)`. But we *haven't* added any interfaces yet; that happens later in the process with `ieee80211_if_add`. Is it safe to call `ieee80211_remove_interfaces(local)` at this point? Probably. It likely just iterates over an empty list, which should be harmless. Now, is this bug worth fuzzing? Absolutely. It's a solid bug fix in the error handling path of `ieee80211_register_hw`. The fix addresses the potential memory leak that occurs when `kmemdup` fails, which is exactly the kind of situation fuzzing excels at uncovering. To trigger it, we need to force a failure in `kmemdup` during `ieee80211_register_hw`. Remember that `ieee80211_register_hw` is called when a mac80211 driver registers its hardware. Fortunately, we can reach this via `mac80211_hwsim` or other virtual drivers. I should verify that `ieee80211_register_hw` is indeed reachable. |
| 10/2 | 2026/06/28 10:25 | tool | grepper |
0mError:no matches Args: {
"Expression": "ieee80211_register_hw",
"PathPrefix": "drivers/net/wireless/mac80211_hwsim.c"
}Results: {
"error": "no matches"
} |
| 11/2 | 2026/06/28 10:25 | llm | patch-evaluator |
0mModel:gemini-3.1-pro-preview Args: null Results: null Tokens: input: 6586 output: 40 thoughts: 64 Thoughts: Here's my thought process, as requested: **Debugging the mac80211_hwsim Initialization** Okay, so I'm trying to figure out the initialization flow of `mac80211_hwsim`. Specifically, I'm trying to pin down the function that actually registers the simulated hardware with the mac80211 subsystem. Is it `mac80211_hwsim` that does this, or does `mac80211_hwsim_new_radio` make the call to `ieee80211_register_hw`? Gotta clarify that. The obvious next step is to dive right into the code – let's open up `mac80211_hwsim.c` and trace the execution path. Time to fire up the editor and start sleuthing! |
| 12/2 | 2026/06/28 10:25 | tool | grepper |
0mError:no matches Args: {
"Expression": "register_hw",
"PathPrefix": "drivers/net/wireless/mac80211_hwsim.c"
}Results: {
"error": "no matches"
} |
| 13/2 | 2026/06/28 10:25 | llm | patch-evaluator |
0mModel:gemini-3.1-pro-preview Args: null Results: null Tokens: input: 6887 output: 37 thoughts: 26 Thoughts: Here's my thought process, as if I were analyzing that code: **Diving into the 802.11 Registration** Okay, so `ieee80211_register_hw` is an exported function. That immediately piques my interest. It means it's designed to be used by other parts of the kernel, likely by device drivers wanting to register a new 802.11 (WiFi) device. My immediate next step is to figure out *who* is using it. I need to trace the call graph to see what's calling `ieee80211_register_hw`. Understanding the callers will give me a huge amount of insight into its purpose and how it fits into the broader 802.11 networking stack. I'll need to know this to truly understand how a new device or module fits into the framework. I'll need to know whether any of the dependencies change how this function will operate. |
| 14/2 | 2026/06/28 10:25 | tool | grepper |
0mArgs:{
"Expression": "ieee80211_register_hw",
"PathPrefix": "drivers/net/wireless/"
}Results: {
"Output": "drivers/net/wireless/admtek/adm8211.c=1780=static int adm8211_probe(struct pci_dev *pdev,\n--\ndrivers/net/wireless/admtek/adm8211.c-1918-\ndrivers/net/wireless/admtek/adm8211.c:1919:\terr = ieee80211_register_hw(dev);\ndrivers/net/wireless/admtek/adm8211.c-1920-\tif (err) {\n--\ndrivers/net/wireless/ath/ar5523/ar5523.c=1590=static int ar5523_probe(struct usb_interface *intf,\n--\ndrivers/net/wireless/ath/ar5523/ar5523.c-1724-\ndrivers/net/wireless/ath/ar5523/ar5523.c:1725:\terror = ieee80211_register_hw(hw);\ndrivers/net/wireless/ath/ar5523/ar5523.c-1726-\tif (error) {\n--\ndrivers/net/wireless/ath/ath10k/mac.c=9971=int ath10k_mac_register(struct ath10k *ar)\n--\ndrivers/net/wireless/ath/ath10k/mac.c-10332-\ndrivers/net/wireless/ath/ath10k/mac.c:10333:\tret = ieee80211_register_hw(ar-\u003ehw);\ndrivers/net/wireless/ath/ath10k/mac.c-10334-\tif (ret) {\n--\ndrivers/net/wireless/ath/ath11k/mac.c=10460=static int __ath11k_mac_register(struct ath11k *ar)\n--\ndrivers/net/wireless/ath/ath11k/mac.c-10656-\ndrivers/net/wireless/ath/ath11k/mac.c:10657:\tret = ieee80211_register_hw(ar-\u003ehw);\ndrivers/net/wireless/ath/ath11k/mac.c-10658-\tif (ret) {\n--\ndrivers/net/wireless/ath/ath11k/mac.c-10663-\tif (!ab-\u003ehw_params.supports_monitor)\ndrivers/net/wireless/ath/ath11k/mac.c:10664:\t\t/* There's a race between calling ieee80211_register_hw()\ndrivers/net/wireless/ath/ath11k/mac.c-10665-\t\t * and here where the monitor mode is enabled for a little\n--\ndrivers/net/wireless/ath/ath12k/mac.c=14471=static int ath12k_mac_hw_register(struct ath12k_hw *ah)\n--\ndrivers/net/wireless/ath/ath12k/mac.c-14714-\ndrivers/net/wireless/ath/ath12k/mac.c:14715:\tret = ieee80211_register_hw(hw);\ndrivers/net/wireless/ath/ath12k/mac.c-14716-\tif (ret) {\n--\ndrivers/net/wireless/ath/ath12k/mac.c-14721-\tif (is_monitor_disable)\ndrivers/net/wireless/ath/ath12k/mac.c:14722:\t\t/* There's a race between calling ieee80211_register_hw()\ndrivers/net/wireless/ath/ath12k/mac.c-14723-\t\t * and here where the monitor mode is enabled for a little\n--\ndrivers/net/wireless/ath/ath5k/base.c=3027=ath5k_init(struct ieee80211_hw *hw)\n--\ndrivers/net/wireless/ath/ath5k/base.c-3143-\ndrivers/net/wireless/ath/ath5k/base.c:3144:\tret = ieee80211_register_hw(hw);\ndrivers/net/wireless/ath/ath5k/base.c-3145-\tif (ret) {\n--\ndrivers/net/wireless/ath/ath9k/htc_drv_init.c=828=static int ath9k_init_device(struct ath9k_htc_priv *priv,\n--\ndrivers/net/wireless/ath/ath9k/htc_drv_init.c-870-#ifdef CONFIG_MAC80211_LEDS\ndrivers/net/wireless/ath/ath9k/htc_drv_init.c:871:\t/* must be initialized before ieee80211_register_hw */\ndrivers/net/wireless/ath/ath9k/htc_drv_init.c-872-\tpriv-\u003eled_cdev.default_trigger = ieee80211_create_tpt_led_trigger(priv-\u003ehw,\n--\ndrivers/net/wireless/ath/ath9k/htc_drv_init.c-877-\t/* Register with mac80211 */\ndrivers/net/wireless/ath/ath9k/htc_drv_init.c:878:\terror = ieee80211_register_hw(hw);\ndrivers/net/wireless/ath/ath9k/htc_drv_init.c-879-\tif (error)\n--\ndrivers/net/wireless/ath/ath9k/init.c=1006=int ath9k_init_device(u16 devid, struct ath_softc *sc,\n--\ndrivers/net/wireless/ath/ath9k/init.c-1044-#ifdef CONFIG_MAC80211_LEDS\ndrivers/net/wireless/ath/ath9k/init.c:1045:\t/* must be initialized before ieee80211_register_hw */\ndrivers/net/wireless/ath/ath9k/init.c-1046-\tsc-\u003eled_cdev.default_trigger = ieee80211_create_tpt_led_trigger(sc-\u003ehw,\n--\ndrivers/net/wireless/ath/ath9k/init.c-1053-\t/* Register with mac80211 */\ndrivers/net/wireless/ath/ath9k/init.c:1054:\terror = ieee80211_register_hw(hw);\ndrivers/net/wireless/ath/ath9k/init.c-1055-\tif (error)\n--\ndrivers/net/wireless/ath/carl9170/main.c=1947=int carl9170_register(struct ar9170 *ar)\n--\ndrivers/net/wireless/ath/carl9170/main.c-1979-\ndrivers/net/wireless/ath/carl9170/main.c:1980:\terr = ieee80211_register_hw(ar-\u003ehw);\ndrivers/net/wireless/ath/carl9170/main.c-1981-\tif (err)\n--\ndrivers/net/wireless/ath/carl9170/usb.c=398=static void carl9170_usb_rx_complete(struct urb *urb)\n--\ndrivers/net/wireless/ath/carl9170/usb.c-446-\t\t\t * firmware loading attempts (so it doesn't pass\ndrivers/net/wireless/ath/carl9170/usb.c:447:\t\t\t * ieee80211_register_hw() and there is no internal\ndrivers/net/wireless/ath/carl9170/usb.c-448-\t\t\t * workqueue at all).\n--\ndrivers/net/wireless/ath/wcn36xx/main.c=1558=static int wcn36xx_probe(struct platform_device *pdev)\n--\ndrivers/net/wireless/ath/wcn36xx/main.c-1637-\twcn36xx_init_ieee80211(wcn);\ndrivers/net/wireless/ath/wcn36xx/main.c:1638:\tret = ieee80211_register_hw(wcn-\u003ehw);\ndrivers/net/wireless/ath/wcn36xx/main.c-1639-\tif (ret)\n--\ndrivers/net/wireless/atmel/at76c50x-usb.c=2299=static int at76_init_new_device(struct at76_priv *priv,\n--\ndrivers/net/wireless/atmel/at76c50x-usb.c-2360-\ndrivers/net/wireless/atmel/at76c50x-usb.c:2361:\tret = ieee80211_register_hw(priv-\u003ehw);\ndrivers/net/wireless/atmel/at76c50x-usb.c-2362-\tif (ret) {\n--\ndrivers/net/wireless/broadcom/b43/b43.h=898=struct b43_wl {\n--\ndrivers/net/wireless/broadcom/b43/b43.h-909-\ndrivers/net/wireless/broadcom/b43/b43.h:910:\t/* Set this if we call ieee80211_register_hw() and check if we call\ndrivers/net/wireless/broadcom/b43/b43.h-911-\t * ieee80211_unregister_hw(). */\n--\ndrivers/net/wireless/broadcom/b43/main.c=2548=static void b43_request_firmware(struct work_struct *work)\n--\ndrivers/net/wireless/broadcom/b43/main.c-2593-\ndrivers/net/wireless/broadcom/b43/main.c:2594:\terr = ieee80211_register_hw(wl-\u003ehw);\ndrivers/net/wireless/broadcom/b43/main.c-2595-\tif (err)\n--\ndrivers/net/wireless/broadcom/b43legacy/main.c=1561=static void b43legacy_request_firmware(struct work_struct *work)\n--\ndrivers/net/wireless/broadcom/b43legacy/main.c-1628-\t}\ndrivers/net/wireless/broadcom/b43legacy/main.c:1629:\terr = ieee80211_register_hw(wl-\u003ehw);\ndrivers/net/wireless/broadcom/b43legacy/main.c-1630-\tif (err)\n--\ndrivers/net/wireless/broadcom/brcm80211/brcmsmac/mac80211_if.c=1129=static struct brcms_info *brcms_attach(struct bcma_device *pdev)\n--\ndrivers/net/wireless/broadcom/brcm80211/brcmsmac/mac80211_if.c-1194-\ndrivers/net/wireless/broadcom/brcm80211/brcmsmac/mac80211_if.c:1195:\terr = ieee80211_register_hw(hw);\ndrivers/net/wireless/broadcom/brcm80211/brcmsmac/mac80211_if.c-1196-\tif (err)\ndrivers/net/wireless/broadcom/brcm80211/brcmsmac/mac80211_if.c:1197:\t\twiphy_err(wl-\u003ewiphy, \"%s: ieee80211_register_hw failed, status\"\ndrivers/net/wireless/broadcom/brcm80211/brcmsmac/mac80211_if.c-1198-\t\t\t \"%d\\n\", __func__, err);\n--\ndrivers/net/wireless/intel/iwlegacy/3945-mac.c=3486=il3945_setup_mac(struct il_priv *il)\n--\ndrivers/net/wireless/intel/iwlegacy/3945-mac.c-3528-\ndrivers/net/wireless/intel/iwlegacy/3945-mac.c:3529:\tret = ieee80211_register_hw(il-\u003ehw);\ndrivers/net/wireless/intel/iwlegacy/3945-mac.c-3530-\tif (ret) {\n--\ndrivers/net/wireless/intel/iwlegacy/4965-mac.c=5720=il4965_mac_setup_register(struct il_priv *il, u32 max_probe_length)\n--\ndrivers/net/wireless/intel/iwlegacy/4965-mac.c-5774-\ndrivers/net/wireless/intel/iwlegacy/4965-mac.c:5775:\tret = ieee80211_register_hw(il-\u003ehw);\ndrivers/net/wireless/intel/iwlegacy/4965-mac.c-5776-\tif (ret) {\n--\ndrivers/net/wireless/intel/iwlegacy/common.h=2876=void il3945_rs_rate_init(struct il_priv *il, struct ieee80211_sta *sta,\n--\ndrivers/net/wireless/intel/iwlegacy/common.h-2885- * with the mac80211 subsystem. This should be performed prior to calling\ndrivers/net/wireless/intel/iwlegacy/common.h:2886: * ieee80211_register_hw\ndrivers/net/wireless/intel/iwlegacy/common.h-2887- *\n--\ndrivers/net/wireless/intel/iwlwifi/dvm/mac80211.c=78=int iwlagn_mac_setup_register(struct iwl_priv *priv,\n--\ndrivers/net/wireless/intel/iwlwifi/dvm/mac80211.c-197-\ndrivers/net/wireless/intel/iwlwifi/dvm/mac80211.c:198:\tret = ieee80211_register_hw(priv-\u003ehw);\ndrivers/net/wireless/intel/iwlwifi/dvm/mac80211.c-199-\tif (ret) {\n--\ndrivers/net/wireless/intel/iwlwifi/dvm/rs.h=379=void iwl_rs_rate_init(struct iwl_priv *priv, struct ieee80211_sta *sta,\n--\ndrivers/net/wireless/intel/iwlwifi/dvm/rs.h-388- * with the mac80211 subsystem. This should be performed prior to calling\ndrivers/net/wireless/intel/iwlwifi/dvm/rs.h:389: * ieee80211_register_hw\ndrivers/net/wireless/intel/iwlwifi/dvm/rs.h-390- *\n--\ndrivers/net/wireless/intel/iwlwifi/mld/mac80211.c=488=int iwl_mld_register_hw(struct iwl_mld *mld)\n--\ndrivers/net/wireless/intel/iwlwifi/mld/mac80211.c-507-\ndrivers/net/wireless/intel/iwlwifi/mld/mac80211.c:508:\treturn ieee80211_register_hw(mld-\u003ehw);\ndrivers/net/wireless/intel/iwlwifi/mld/mac80211.c-509-}\n--\ndrivers/net/wireless/intel/iwlwifi/mvm/mac80211.c=331=int iwl_mvm_mac_setup_register(struct iwl_mvm *mvm)\n--\ndrivers/net/wireless/intel/iwlwifi/mvm/mac80211.c-793-\ndrivers/net/wireless/intel/iwlwifi/mvm/mac80211.c:794:\tret = ieee80211_register_hw(mvm-\u003ehw);\ndrivers/net/wireless/intel/iwlwifi/mvm/mac80211.c-795-\tif (ret) {\n--\ndrivers/net/wireless/intel/iwlwifi/mvm/rs.h=402=void iwl_mvm_rs_tx_status(struct iwl_mvm *mvm, struct ieee80211_sta *sta,\n--\ndrivers/net/wireless/intel/iwlwifi/mvm/rs.h-411- * with the mac80211 subsystem. This should be performed prior to calling\ndrivers/net/wireless/intel/iwlwifi/mvm/rs.h:412: * ieee80211_register_hw\ndrivers/net/wireless/intel/iwlwifi/mvm/rs.h-413- *\n--\ndrivers/net/wireless/intersil/p54/main.c=805=int p54_register_common(struct ieee80211_hw *dev, struct device *pdev)\n--\ndrivers/net/wireless/intersil/p54/main.c-809-\ndrivers/net/wireless/intersil/p54/main.c:810:\terr = ieee80211_register_hw(dev);\ndrivers/net/wireless/intersil/p54/main.c-811-\tif (err) {\n--\ndrivers/net/wireless/marvell/libertas_tf/main.c=555=struct lbtf_private *lbtf_add_card(void *card, struct device *dmdev,\n--\ndrivers/net/wireless/marvell/libertas_tf/main.c-619-\ndrivers/net/wireless/marvell/libertas_tf/main.c:620:\tif (ieee80211_register_hw(hw))\ndrivers/net/wireless/marvell/libertas_tf/main.c-621-\t\tgoto err_init_adapter;\n--\ndrivers/net/wireless/marvell/mwl8k.c=6156=static int mwl8k_firmware_load_success(struct mwl8k_priv *priv)\n--\ndrivers/net/wireless/marvell/mwl8k.c-6247-\ndrivers/net/wireless/marvell/mwl8k.c:6248:\trc = ieee80211_register_hw(hw);\ndrivers/net/wireless/marvell/mwl8k.c-6249-\tif (rc) {\n--\ndrivers/net/wireless/mediatek/mt76/mac80211.c=548=int mt76_register_phy(struct mt76_phy *phy, bool vht,\n--\ndrivers/net/wireless/mediatek/mt76/mac80211.c-586-\tif ((void *)phy == phy-\u003ehw-\u003epriv) {\ndrivers/net/wireless/mediatek/mt76/mac80211.c:587:\t\tret = ieee80211_register_hw(phy-\u003ehw);\ndrivers/net/wireless/mediatek/mt76/mac80211.c-588-\t\tif (ret)\n--\ndrivers/net/wireless/mediatek/mt76/mac80211.c=744=int mt76_register_device(struct mt76_dev *dev, bool vht,\n--\ndrivers/net/wireless/mediatek/mt76/mac80211.c-785-\ndrivers/net/wireless/mediatek/mt76/mac80211.c:786:\tret = ieee80211_register_hw(hw);\ndrivers/net/wireless/mediatek/mt76/mac80211.c-787-\tif (ret)\n--\ndrivers/net/wireless/mediatek/mt7601u/init.c=574=int mt7601u_register_device(struct mt7601u_dev *dev)\n--\ndrivers/net/wireless/mediatek/mt7601u/init.c-623-\ndrivers/net/wireless/mediatek/mt7601u/init.c:624:\tret = ieee80211_register_hw(hw);\ndrivers/net/wireless/mediatek/mt7601u/init.c-625-\tif (ret)\n--\ndrivers/net/wireless/purelifi/plfxlc/usb.c=580=static int probe(struct usb_interface *intf,\n--\ndrivers/net/wireless/purelifi/plfxlc/usb.c-618-\ndrivers/net/wireless/purelifi/plfxlc/usb.c:619:\tr = ieee80211_register_hw(hw);\ndrivers/net/wireless/purelifi/plfxlc/usb.c-620-\tif (r) {\n--\ndrivers/net/wireless/ralink/rt2x00/rt2x00dev.c=1117=static int rt2x00lib_probe_hw(struct rt2x00_dev *rt2x00dev)\n--\ndrivers/net/wireless/ralink/rt2x00/rt2x00dev.c-1205-\t */\ndrivers/net/wireless/ralink/rt2x00/rt2x00dev.c:1206:\tstatus = ieee80211_register_hw(rt2x00dev-\u003ehw);\ndrivers/net/wireless/ralink/rt2x00/rt2x00dev.c-1207-\tif (status)\n--\ndrivers/net/wireless/realtek/rtl818x/rtl8180/dev.c=1730=static int rtl8180_probe(struct pci_dev *pdev,\n--\ndrivers/net/wireless/realtek/rtl818x/rtl8180/dev.c-1933-\ndrivers/net/wireless/realtek/rtl818x/rtl8180/dev.c:1934:\terr = ieee80211_register_hw(dev);\ndrivers/net/wireless/realtek/rtl818x/rtl8180/dev.c-1935-\tif (err) {\n--\ndrivers/net/wireless/realtek/rtl818x/rtl8187/dev.c=1442=static int rtl8187_probe(struct usb_interface *intf,\n--\ndrivers/net/wireless/realtek/rtl818x/rtl8187/dev.c-1640-\ndrivers/net/wireless/realtek/rtl818x/rtl8187/dev.c:1641:\terr = ieee80211_register_hw(dev);\ndrivers/net/wireless/realtek/rtl818x/rtl8187/dev.c-1642-\tif (err) {\n--\ndrivers/net/wireless/realtek/rtl8xxxu/core.c=7679=static int rtl8xxxu_probe(struct usb_interface *interface,\n--\ndrivers/net/wireless/realtek/rtl8xxxu/core.c-7869-\ndrivers/net/wireless/realtek/rtl8xxxu/core.c:7870:\tret = ieee80211_register_hw(priv-\u003ehw);\ndrivers/net/wireless/realtek/rtl8xxxu/core.c-7871-\tif (ret) {\n--\ndrivers/net/wireless/realtek/rtlwifi/pci.c=2070=int rtl_pci_probe(struct pci_dev *pdev,\n--\ndrivers/net/wireless/realtek/rtlwifi/pci.c-2208-\ndrivers/net/wireless/realtek/rtlwifi/pci.c:2209:\terr = ieee80211_register_hw(hw);\ndrivers/net/wireless/realtek/rtlwifi/pci.c-2210-\tif (err) {\n--\ndrivers/net/wireless/realtek/rtlwifi/usb.c=951=int rtl_usb_probe(struct usb_interface *intf,\n--\ndrivers/net/wireless/realtek/rtlwifi/usb.c-1021-\ndrivers/net/wireless/realtek/rtlwifi/usb.c:1022:\terr = ieee80211_register_hw(hw);\ndrivers/net/wireless/realtek/rtlwifi/usb.c-1023-\tif (err) {\n--\ndrivers/net/wireless/realtek/rtw88/main.c=2255=int rtw_register_hw(struct rtw_dev *rtwdev, struct ieee80211_hw *hw)\n--\ndrivers/net/wireless/realtek/rtw88/main.c-2324-\ndrivers/net/wireless/realtek/rtw88/main.c:2325:\tret = ieee80211_register_hw(hw);\ndrivers/net/wireless/realtek/rtw88/main.c-2326-\tif (ret) {\n--\ndrivers/net/wireless/realtek/rtw88/regd.c=333=void rtw_regd_notifier(struct wiphy *wiphy, struct regulatory_request *request);\ndrivers/net/wireless/realtek/rtw88/regd.c-334-\ndrivers/net/wireless/realtek/rtw88/regd.c:335:/* call this before ieee80211_register_hw() */\ndrivers/net/wireless/realtek/rtw88/regd.c-336-int rtw_regd_init(struct rtw_dev *rtwdev)\n--\ndrivers/net/wireless/realtek/rtw88/regd.c-349-\ndrivers/net/wireless/realtek/rtw88/regd.c:350:\t\t/* Set REGULATORY_STRICT_REG before ieee80211_register_hw(),\ndrivers/net/wireless/realtek/rtw88/regd.c-351-\t\t * stack will wait for regulatory_hint() and consider it\n--\ndrivers/net/wireless/realtek/rtw88/regd.c-367-\ndrivers/net/wireless/realtek/rtw88/regd.c:368:/* call this after ieee80211_register_hw() */\ndrivers/net/wireless/realtek/rtw88/regd.c-369-int rtw_regd_hint(struct rtw_dev *rtwdev)\n--\ndrivers/net/wireless/realtek/rtw89/core.c=6708=static int rtw89_core_register_hw(struct rtw89_dev *rtwdev)\n--\ndrivers/net/wireless/realtek/rtw89/core.c-6827-\ndrivers/net/wireless/realtek/rtw89/core.c:6828:\tret = ieee80211_register_hw(hw);\ndrivers/net/wireless/realtek/rtw89/core.c-6829-\tif (ret) {\n--\ndrivers/net/wireless/rsi/rsi_91x_mac80211.c=2022=int rsi_mac80211_attach(struct rsi_common *common)\n--\ndrivers/net/wireless/rsi/rsi_91x_mac80211.c-2126-\ndrivers/net/wireless/rsi/rsi_91x_mac80211.c:2127:\tstatus = ieee80211_register_hw(hw);\ndrivers/net/wireless/rsi/rsi_91x_mac80211.c-2128-\tif (status)\n--\ndrivers/net/wireless/silabs/wfx/main.c=354=int wfx_probe(struct wfx_dev *wdev)\n--\ndrivers/net/wireless/silabs/wfx/main.c-463-\ndrivers/net/wireless/silabs/wfx/main.c:464:\terr = ieee80211_register_hw(wdev-\u003ehw);\ndrivers/net/wireless/silabs/wfx/main.c-465-\tif (err)\n--\ndrivers/net/wireless/st/cw1200/main.c=419=static int cw1200_register_common(struct ieee80211_hw *dev)\n--\ndrivers/net/wireless/st/cw1200/main.c-432-\ndrivers/net/wireless/st/cw1200/main.c:433:\terr = ieee80211_register_hw(dev);\ndrivers/net/wireless/st/cw1200/main.c-434-\tif (err) {\n--\ndrivers/net/wireless/ti/wl1251/main.c=1491=static int wl1251_register_hw(struct wl1251 *wl)\n--\ndrivers/net/wireless/ti/wl1251/main.c-1499-\ndrivers/net/wireless/ti/wl1251/main.c:1500:\tret = ieee80211_register_hw(wl-\u003ehw);\ndrivers/net/wireless/ti/wl1251/main.c-1501-\tif (ret \u003c 0) {\n--\ndrivers/net/wireless/ti/wlcore/main.c=6119=static int wl1271_register_hw(struct wl1271 *wl)\n--\ndrivers/net/wireless/ti/wlcore/main.c-6171-\ndrivers/net/wireless/ti/wlcore/main.c:6172:\tret = ieee80211_register_hw(wl-\u003ehw);\ndrivers/net/wireless/ti/wlcore/main.c-6173-\tif (ret \u003c 0) {\n--\ndrivers/net/wireless/virtual/mac80211_hwsim.c=5580=static int mac80211_hwsim_new_radio(struct genl_info *info,\n--\ndrivers/net/wireless/virtual/mac80211_hwsim.c-6018-\ndrivers/net/wireless/virtual/mac80211_hwsim.c:6019:\terr = ieee80211_register_hw(hw);\ndrivers/net/wireless/virtual/mac80211_hwsim.c-6020-\tif (err \u003c 0) {\ndrivers/net/wireless/virtual/mac80211_hwsim.c:6021:\t\tpr_debug(\"mac80211_hwsim: ieee80211_register_hw failed (%d)\\n\",\ndrivers/net/wireless/virtual/mac80211_hwsim.c-6022-\t\t err);\n--\ndrivers/net/wireless/zydas/zd1211rw/zd_usb.c=1349=static int probe(struct usb_interface *intf, const struct usb_device_id *id)\n--\ndrivers/net/wireless/zydas/zd1211rw/zd_usb.c-1394-\ndrivers/net/wireless/zydas/zd1211rw/zd_usb.c:1395:\tr = ieee80211_register_hw(hw);\ndrivers/net/wireless/zydas/zd1211rw/zd_usb.c-1396-\tif (r) {\n"
} |
| 15/2 | 2026/06/28 10:25 | llm | patch-evaluator |
0mModel:gemini-3.1-pro-preview Args: null Results: null Tokens: input: 15296 output: 38 thoughts: 160 Thoughts: **My Assessment of the `ieee80211_register_hw` Function** Okay, so I'm thinking about how we can verify the behavior of `ieee80211_register_hw`, and it's looking pretty straightforward thanks to the `mac80211_hwsim_new_radio` function. That call explicitly leads to `ieee80211_register_hw`, which gives us a clear entry point via netlink commands to create a virtual radio. This means we can definitely reach and test `ieee80211_register_hw` in a virtualized, controlled setup – which is ideal for this kind of work. To focus on error paths, and specifically target `ieee80211_register_hw`, I can see we can leverage fault injection, particularly on `kmemdup`. I need to confirm `ieee80211_register_hw` as the primary function we're after, but it seems to require `MAC80211_HWSIM` to be enabled to generate radios. Now I remember...wait, `MAC80211` is the main configuration option, and `MAC80211_HWSIM` is more of a sub-feature. I need to make sure I get the configuration right here. I should probably double-check the exact dependencies and config options before proceeding. |
| 16/2 | 2026/06/28 10:25 | tool | grepper |
0mArgs:{
"Expression": "config MAC80211",
"PathPrefix": "net/mac80211/Kconfig"
}Results: {
"Output": "net/mac80211/Kconfig-1-# SPDX-License-Identifier: GPL-2.0-only\nnet/mac80211/Kconfig:2:config MAC80211\nnet/mac80211/Kconfig-3-\ttristate \"Generic IEEE 802.11 Networking Stack (mac80211)\"\n--\nnet/mac80211/Kconfig=19=if MAC80211 != n\nnet/mac80211/Kconfig-20-\nnet/mac80211/Kconfig:21:config MAC80211_HAS_RC\nnet/mac80211/Kconfig-22-\tbool\nnet/mac80211/Kconfig-23-\nnet/mac80211/Kconfig:24:config MAC80211_RC_MINSTREL\nnet/mac80211/Kconfig-25-\tbool \"Minstrel\" if EXPERT\n--\nnet/mac80211/Kconfig=31=choice\n--\nnet/mac80211/Kconfig-40-\nnet/mac80211/Kconfig:41:config MAC80211_RC_DEFAULT_MINSTREL\nnet/mac80211/Kconfig-42-\tbool \"Minstrel\"\n--\nnet/mac80211/Kconfig=48=endchoice\nnet/mac80211/Kconfig-49-\nnet/mac80211/Kconfig:50:config MAC80211_RC_DEFAULT\nnet/mac80211/Kconfig-51-\tstring\n--\nnet/mac80211/Kconfig=57=comment \"Some wireless drivers require a rate control algorithm\"\n--\nnet/mac80211/Kconfig-59-\nnet/mac80211/Kconfig:60:config MAC80211_KUNIT_TEST\nnet/mac80211/Kconfig-61-\ttristate \"KUnit tests for mac80211\" if !KUNIT_ALL_TESTS\n--\nnet/mac80211/Kconfig-69-\nnet/mac80211/Kconfig:70:config MAC80211_MESH\nnet/mac80211/Kconfig-71-\tbool \"Enable mac80211 mesh networking support\"\n--\nnet/mac80211/Kconfig-78-\nnet/mac80211/Kconfig:79:config MAC80211_LEDS\nnet/mac80211/Kconfig-80-\tbool \"Enable LED triggers\"\n--\nnet/mac80211/Kconfig-87-\nnet/mac80211/Kconfig:88:config MAC80211_DEBUGFS\nnet/mac80211/Kconfig-89-\tbool \"Export mac80211 internals in DebugFS\"\n--\nnet/mac80211/Kconfig-96-\nnet/mac80211/Kconfig:97:config MAC80211_MESSAGE_TRACING\nnet/mac80211/Kconfig-98-\tbool \"Trace all mac80211 debug messages\"\n--\nnet/mac80211/Kconfig-109-\nnet/mac80211/Kconfig:110:menuconfig MAC80211_DEBUG_MENU\nnet/mac80211/Kconfig-111-\tbool \"Select mac80211 debugging features\"\n--\nnet/mac80211/Kconfig-115-\nnet/mac80211/Kconfig:116:config MAC80211_NOINLINE\nnet/mac80211/Kconfig-117-\tbool \"Do not inline TX/RX handlers\"\n--\nnet/mac80211/Kconfig-131-\nnet/mac80211/Kconfig:132:config MAC80211_VERBOSE_DEBUG\nnet/mac80211/Kconfig-133-\tbool \"Verbose debugging output\"\n--\nnet/mac80211/Kconfig-142-\nnet/mac80211/Kconfig:143:config MAC80211_MLME_DEBUG\nnet/mac80211/Kconfig-144-\tbool \"Verbose managed MLME output\"\n--\nnet/mac80211/Kconfig-153-\nnet/mac80211/Kconfig:154:config MAC80211_STA_DEBUG\nnet/mac80211/Kconfig-155-\tbool \"Verbose station debugging\"\n--\nnet/mac80211/Kconfig-162-\nnet/mac80211/Kconfig:163:config MAC80211_HT_DEBUG\nnet/mac80211/Kconfig-164-\tbool \"Verbose HT debugging\"\n--\nnet/mac80211/Kconfig-174-\nnet/mac80211/Kconfig:175:config MAC80211_OCB_DEBUG\nnet/mac80211/Kconfig-176-\tbool \"Verbose OCB debugging\"\n--\nnet/mac80211/Kconfig-185-\nnet/mac80211/Kconfig:186:config MAC80211_IBSS_DEBUG\nnet/mac80211/Kconfig-187-\tbool \"Verbose IBSS debugging\"\n--\nnet/mac80211/Kconfig-196-\nnet/mac80211/Kconfig:197:config MAC80211_PS_DEBUG\nnet/mac80211/Kconfig-198-\tbool \"Verbose powersave mode debugging\"\n--\nnet/mac80211/Kconfig-208-\nnet/mac80211/Kconfig:209:config MAC80211_MPL_DEBUG\nnet/mac80211/Kconfig-210-\tbool \"Verbose mesh peer link debugging\"\n--\nnet/mac80211/Kconfig-221-\nnet/mac80211/Kconfig:222:config MAC80211_MPATH_DEBUG\nnet/mac80211/Kconfig-223-\tbool \"Verbose mesh path debugging\"\n--\nnet/mac80211/Kconfig-234-\nnet/mac80211/Kconfig:235:config MAC80211_MHWMP_DEBUG\nnet/mac80211/Kconfig-236-\tbool \"Verbose mesh HWMP routing debugging\"\n--\nnet/mac80211/Kconfig-247-\nnet/mac80211/Kconfig:248:config MAC80211_MESH_SYNC_DEBUG\nnet/mac80211/Kconfig-249-\tbool \"Verbose mesh synchronization debugging\"\n--\nnet/mac80211/Kconfig-258-\nnet/mac80211/Kconfig:259:config MAC80211_MESH_CSA_DEBUG\nnet/mac80211/Kconfig-260-\tbool \"Verbose mesh channel switch debugging\"\n--\nnet/mac80211/Kconfig-269-\nnet/mac80211/Kconfig:270:config MAC80211_MESH_PS_DEBUG\nnet/mac80211/Kconfig-271-\tbool \"Verbose mesh powersave debugging\"\n--\nnet/mac80211/Kconfig-280-\nnet/mac80211/Kconfig:281:config MAC80211_TDLS_DEBUG\nnet/mac80211/Kconfig-282-\tbool \"Verbose TDLS debugging\"\n--\nnet/mac80211/Kconfig-292-\nnet/mac80211/Kconfig:293:config MAC80211_DEBUG_COUNTERS\nnet/mac80211/Kconfig-294-\tbool \"Extra statistics for TX/RX debugging\"\n--\nnet/mac80211/Kconfig-307-\nnet/mac80211/Kconfig:308:config MAC80211_STA_HASH_MAX_SIZE\nnet/mac80211/Kconfig-309-\tint \"Station hash table maximum size\" if MAC80211_DEBUG_MENU\n"
} |
| 17/2 | 2026/06/28 10:25 | llm | patch-evaluator |
0mModel:gemini-3.1-pro-preview Args: null Results: null Tokens: input: 17983 output: 41 thoughts: 47 Thoughts: Okay, here's my take on those thoughts, framed as my own: **Analyzing Wireless Driver Configuration** Right, so the `MAC80211` config is the primary one here. That's the baseline. Now, I need to check something related to the hardware simulation, `MAC80211_HWSIM`. I seem to recall it being in the `drivers/net/wireless/virtual/Kconfig` file. I'll take a quick look to confirm. Always good to double-check those dependencies, especially when dealing with virtualized wireless environments. Just want to make sure the build process is as efficient and correct as it can be. |
| 18/2 | 2026/06/28 10:25 | tool | grepper |
0mArgs:{
"Expression": "config MAC80211_HWSIM",
"PathPrefix": "drivers/net/wireless/virtual/Kconfig"
}Results: {
"Output": "drivers/net/wireless/virtual/Kconfig:1:config MAC80211_HWSIM\ndrivers/net/wireless/virtual/Kconfig-2-\ttristate \"Simulated radio testing tool for mac80211\"\n"
} |
| 19/2 | 2026/06/28 10:25 | llm | patch-evaluator |
0mModel:gemini-3.1-pro-preview Args: null Results: null Tokens: input: 18283 output: 139 thoughts: 678 Thoughts: **Fuzzing Target Identification: mac80211_hwsim and ieee80211_register_hw** Okay, so I've got this patch here. It looks like it's addressing a memory leak or resource leak in the `mac80211` subsystem, specifically within the `ieee80211_register_hw` function. The clue that made this a good target is the reference to `kmemdup` failing. Right, so first things first, to trigger this, I'll need to enable `MAC80211` and `MAC80211_HWSIM` in the kernel config. `MAC80211_HWSIM` is what allows us to create the virtual radios we need to exercise this code path. The patch itself is modifying the error handling within `ieee80211_register_hw`. Looking at the code diff, the original had a `goto fail_rate` when `kmemdup` fails, but that's been changed to a `goto fail_band`. This suggests a leak in the error handling path, potentially related to the rate control not being deinitialized when the `kmemdup` allocation fails. So, the focus is definitively on `ieee80211_register_hw`. This function is the entry point, and it's called when a new hardware interface is registered. It's not a *hot* path, so it's only called when a new radio is created, which makes it an ideal fuzzing target, as it's less likely to be impacted by other things. With `mac80211_hwsim`, we can reliably trigger calls to `ieee80211_register_hw` by creating virtual radios and injecting memory allocation failures to reach the code where the patch applies. This should allow us to reliably trigger the fix. |
| 20/2 | 2026/06/28 10:25 | tool | set-results |
0mArgs:{
"EnableConfigs": [
"MAC80211",
"MAC80211_HWSIM"
],
"FocusSymbols": [
"ieee80211_register_hw"
],
"Reasoning": "The patch fixes a resource leak in the error handling path of `ieee80211_register_hw` when `kmemdup` fails. This is a functional change in the core mac80211 subsystem and can be triggered by creating virtual radios using `mac80211_hwsim` and injecting memory allocation failures.",
"WorthFuzzing": true
}Results: {
"EnableConfigs": [
"MAC80211",
"MAC80211_HWSIM"
],
"FocusSymbols": [
"ieee80211_register_hw"
],
"Reasoning": "The patch fixes a resource leak in the error handling path of `ieee80211_register_hw` when `kmemdup` fails. This is a functional change in the core mac80211 subsystem and can be triggered by creating virtual radios using `mac80211_hwsim` and injecting memory allocation failures.",
"WorthFuzzing": true
} |
| Total Calls | Total Tokens | Avg Tokens | Total Duration (Seconds) | Avg Duration (Seconds) |
|---|
| Total Calls | Total Duration (Seconds) | Avg Duration (Seconds) |
|---|