AI Trajectory


Trajectory: (Expand/Collapse All)
Seq Timestamp Type Name Duration
0/0 2026/08/05 12:18 flow patch-triage
1m Args:
null

Results:
{
  "EnableConfigs": [
    "CFG80211",
    "MAC80211",
    "MAC80211_HWSIM"
  ],
  "FocusSymbols": [
    "nl80211_set_pmk",
    "nl80211_send_connect_result",
    "nl80211_send_roamed",
    "cfg80211_connect_done",
    "cfg80211_roamed"
  ],
  "Reasoning": "The patch adds a new 'authorized' flag to connection and roaming response parameters in cfg80211, exposing it to userspace via the NL80211_ATTR_PORT_AUTHORIZED netlink attribute. It also introduces the NL80211_EXT_FEATURE_ROAM_OFFLOAD feature flag and modifies nl80211_set_pmk to allow setting the PMK when this feature is supported. These are functional changes to the core wireless subsystem (cfg80211) and its netlink API, which can be reached and tested using the software-emulated mac80211_hwsim driver.",
  "WorthFuzzing": true
}

1/1 2026/08/05 12:18 action read-patch-diff
0m Args:
null

Results:
{
  "PatchDiff": "commit 565f7ee8bb49e7c3b499f81f7347615737f01285\nAuthor: syz-cluster \u003ctriage@syzkaller.com\u003e\nDate:   Wed Aug 5 12:18:36 2026 +0000\n\n    syz-cluster: applied patch under review\n\ndiff --git a/include/net/cfg80211.h b/include/net/cfg80211.h\nindex 97c16d4ff1271..7f576bb7325c7 100644\n--- a/include/net/cfg80211.h\n+++ b/include/net/cfg80211.h\n@@ -9103,6 +9103,8 @@ struct cfg80211_fils_resp_params {\n  * @assoc_encrypted: The driver should set this flag to indicate that the\n  *\t(Re)Association Request/Response frames are transmitted encrypted over\n  *\tthe air.\n+ * @authorized: Indicates whether the connection is ready to transport data\n+ *\tpackets.\n  */\n struct cfg80211_connect_resp_params {\n \tint status;\n@@ -9113,6 +9115,7 @@ struct cfg80211_connect_resp_params {\n \tstruct cfg80211_fils_resp_params fils;\n \tenum nl80211_timeout_reason timeout_reason;\n \tbool assoc_encrypted;\n+\tbool authorized;\n \n \tconst u8 *ap_mld_addr;\n \tu16 valid_links;\n@@ -9281,6 +9284,8 @@ cfg80211_connect_timeout(struct net_device *dev, const u8 *bssid,\n  * @links.bss: For MLO roaming, entry of new bss to which STA link got\n  *\troamed. For non-MLO roaming, links[0].bss points to entry of bss to\n  *\twhich STA got roamed (may be %NULL if %links.bssid is set)\n+ * @authorized: Indicates whether the new connection is ready to transport data\n+ *\tpackets.\n  */\n struct cfg80211_roam_info {\n \tconst u8 *req_ie;\n@@ -9297,6 +9302,7 @@ struct cfg80211_roam_info {\n \t\tstruct ieee80211_channel *channel;\n \t\tstruct cfg80211_bss *bss;\n \t} links[IEEE80211_MLD_MAX_NUM_LINKS];\n+\tbool authorized;\n };\n \n /**\ndiff --git a/include/uapi/linux/nl80211.h b/include/uapi/linux/nl80211.h\nindex 020387d764122..2b96a18def9b3 100644\n--- a/include/uapi/linux/nl80211.h\n+++ b/include/uapi/linux/nl80211.h\n@@ -2705,7 +2705,9 @@ enum nl80211_commands {\n  *\tin %NL80211_CMD_CONNECT to indicate that for 802.1X authentication it\n  *\twants to use the supported offload of the 4-way handshake.\n  * @NL80211_ATTR_PMKR0_NAME: PMK-R0 Name for offloaded FT.\n- * @NL80211_ATTR_PORT_AUTHORIZED: (reserved)\n+ * @NL80211_ATTR_PORT_AUTHORIZED: flag attribute used in %NL80211_CMD_CONNECT\n+ *\tor %NL80211_CMD_ROAM notifications to indicate that 802.1X\n+ *\tauthentication was done by the driver or is not needed.\n  *\n  * @NL80211_ATTR_EXTERNAL_AUTH_ACTION: Identify the requested external\n  *     authentication operation (u32 attribute with an\n@@ -7110,6 +7112,9 @@ enum nl80211_feature_flags {\n  * @NL80211_EXT_FEATURE_PROBE_AP: Driver supports probing the associated AP\n  *\tin STA mode using @NL80211_CMD_PROBE_PEER.\n  *\n+ * @NL80211_EXT_FEATURE_ROAM_OFFLOAD: Driver supports Fast Transition or\n+ *\tOpportunistic Key Caching roaming offload in station mode.\n+ *\n  * @NUM_NL80211_EXT_FEATURES: number of extended features.\n  * @MAX_NL80211_EXT_FEATURES: highest extended feature index.\n  */\n@@ -7192,6 +7197,7 @@ enum nl80211_ext_feature_index {\n \tNL80211_EXT_FEATURE_ROC_ADDR_FILTER,\n \tNL80211_EXT_FEATURE_SET_KEY_LTF_SEED,\n \tNL80211_EXT_FEATURE_PROBE_AP,\n+\tNL80211_EXT_FEATURE_ROAM_OFFLOAD,\n \n \t/* add new features before the definition below */\n \tNUM_NL80211_EXT_FEATURES,\ndiff --git a/net/wireless/nl80211.c b/net/wireless/nl80211.c\nindex 44f2bad086705..7dbd4caf26091 100644\n--- a/net/wireless/nl80211.c\n+++ b/net/wireless/nl80211.c\n@@ -18443,7 +18443,9 @@ static int nl80211_set_pmk(struct sk_buff *skb, struct genl_info *info)\n \t\treturn -EOPNOTSUPP;\n \n \tif (!wiphy_ext_feature_isset(\u0026rdev-\u003ewiphy,\n-\t\t\t\t     NL80211_EXT_FEATURE_4WAY_HANDSHAKE_STA_1X))\n+\t\t\t\t     NL80211_EXT_FEATURE_4WAY_HANDSHAKE_STA_1X) \u0026\u0026\n+\t    !wiphy_ext_feature_isset(\u0026rdev-\u003ewiphy,\n+\t\t\t\t     NL80211_EXT_FEATURE_ROAM_OFFLOAD))\n \t\treturn -EOPNOTSUPP;\n \n \tif (!info-\u003eattrs[NL80211_ATTR_MAC] || !info-\u003eattrs[NL80211_ATTR_PMK])\n@@ -21198,6 +21200,8 @@ void nl80211_send_connect_result(struct cfg80211_registered_device *rdev,\n \t     (nla_put_flag(msg, NL80211_ATTR_TIMED_OUT) ||\n \t      nla_put_u32(msg, NL80211_ATTR_TIMEOUT_REASON,\n \t\t\t  cr-\u003etimeout_reason))) ||\n+\t    (cr-\u003eauthorized \u0026\u0026\n+\t     nla_put_flag(msg, NL80211_ATTR_PORT_AUTHORIZED)) ||\n \t    (cr-\u003ereq_ie \u0026\u0026\n \t     nla_put(msg, NL80211_ATTR_REQ_IE, cr-\u003ereq_ie_len, cr-\u003ereq_ie)) ||\n \t    (cr-\u003eresp_ie \u0026\u0026\n@@ -21321,7 +21325,9 @@ void nl80211_send_roamed(struct cfg80211_registered_device *rdev,\n \t    (info-\u003efils.pmk \u0026\u0026\n \t     nla_put(msg, NL80211_ATTR_PMK, info-\u003efils.pmk_len, info-\u003efils.pmk)) ||\n \t    (info-\u003efils.pmkid \u0026\u0026\n-\t     nla_put(msg, NL80211_ATTR_PMKID, WLAN_PMKID_LEN, info-\u003efils.pmkid)))\n+\t     nla_put(msg, NL80211_ATTR_PMKID, WLAN_PMKID_LEN, info-\u003efils.pmkid)) ||\n+\t    (info-\u003eauthorized \u0026\u0026\n+\t     nla_put_flag(msg, NL80211_ATTR_PORT_AUTHORIZED)))\n \t\tgoto nla_put_failure;\n \n \tif (info-\u003evalid_links) {\ndiff --git a/net/wireless/sme.c b/net/wireless/sme.c\nindex 2a719b5c487e3..974e79f57392d 100644\n--- a/net/wireless/sme.c\n+++ b/net/wireless/sme.c\n@@ -1067,6 +1067,7 @@ void cfg80211_connect_done(struct net_device *dev,\n \tev-\u003ecr.status = params-\u003estatus;\n \tev-\u003ecr.timeout_reason = params-\u003etimeout_reason;\n \tev-\u003ecr.assoc_encrypted = params-\u003eassoc_encrypted;\n+\tev-\u003ecr.authorized = params-\u003eauthorized;\n \n \tspin_lock_irqsave(\u0026wdev-\u003eevent_lock, flags);\n \tlist_add_tail(\u0026ev-\u003elist, \u0026wdev-\u003eevent_list);\n@@ -1253,6 +1254,7 @@ void cfg80211_roamed(struct net_device *dev, struct cfg80211_roam_info *info,\n \t\tnext += ETH_ALEN;\n \t}\n \tev-\u003erm.valid_links = info-\u003evalid_links;\n+\tev-\u003erm.authorized = info-\u003eauthorized;\n \tfor_each_valid_link(info, link) {\n \t\tev-\u003erm.links[link].bss = info-\u003elinks[link].bss;\n \n"
}

2/1 2026/08/05 12:18 agent patch-evaluator
1m Model:
best-expensive

Args:
null

Results:
{
  "EnableConfigs": [
    "CFG80211",
    "MAC80211",
    "MAC80211_HWSIM"
  ],
  "FocusSymbols": [
    "nl80211_set_pmk",
    "nl80211_send_connect_result",
    "nl80211_send_roamed",
    "cfg80211_connect_done",
    "cfg80211_roamed"
  ],
  "Reasoning": "The patch adds a new 'authorized' flag to connection and roaming response parameters in cfg80211, exposing it to userspace via the NL80211_ATTR_PORT_AUTHORIZED netlink attribute. It also introduces the NL80211_EXT_FEATURE_ROAM_OFFLOAD feature flag and modifies nl80211_set_pmk to allow setting the PMK when this feature is supported. These are functional changes to the core wireless subsystem (cfg80211) and its netlink API, which can be reached and tested using the software-emulated mac80211_hwsim driver.",
  "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).
- Code in vendor-specific PCIe switch, SmartNIC, or GPU drivers (e.g., mlxsw, pds_core, qed,
  ionic, amdgpu) that require physical PCIe hardware cards not emulated in standard QEMU.
- Driver .remove, .shutdown, or pci_unregister_driver teardown callbacks (e.g., igb_remove)
  that are executed only during PCI hot-unplug or sysfs driver unbind operations.

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.
   Prefer non-static, non-inlined API entrypoint functions over internal static helper functions
   (which are inlined by the compiler and do not have distinct symbol addresses).
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.
   Also check "depends on" lines in Kconfig to include any non-standard parent subsystem configs
   needed for Kbuild to compile the code statically into vmlinux. 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 565f7ee8bb49e7c3b499f81f7347615737f01285
Author: syz-cluster <triage@syzkaller.com>
Date:   Wed Aug 5 12:18:36 2026 +0000

    syz-cluster: applied patch under review

diff --git a/include/net/cfg80211.h b/include/net/cfg80211.h
index 97c16d4ff1271..7f576bb7325c7 100644
--- a/include/net/cfg80211.h
+++ b/include/net/cfg80211.h
@@ -9103,6 +9103,8 @@ struct cfg80211_fils_resp_params {
  * @assoc_encrypted: The driver should set this flag to indicate that the
  *	(Re)Association Request/Response frames are transmitted encrypted over
  *	the air.
+ * @authorized: Indicates whether the connection is ready to transport data
+ *	packets.
  */
 struct cfg80211_connect_resp_params {
 	int status;
@@ -9113,6 +9115,7 @@ struct cfg80211_connect_resp_params {
 	struct cfg80211_fils_resp_params fils;
 	enum nl80211_timeout_reason timeout_reason;
 	bool assoc_encrypted;
+	bool authorized;
 
 	const u8 *ap_mld_addr;
 	u16 valid_links;
@@ -9281,6 +9284,8 @@ cfg80211_connect_timeout(struct net_device *dev, const u8 *bssid,
  * @links.bss: For MLO roaming, entry of new bss to which STA link got
  *	roamed. For non-MLO roaming, links[0].bss points to entry of bss to
  *	which STA got roamed (may be %NULL if %links.bssid is set)
+ * @authorized: Indicates whether the new connection is ready to transport data
+ *	packets.
  */
 struct cfg80211_roam_info {
 	const u8 *req_ie;
@@ -9297,6 +9302,7 @@ struct cfg80211_roam_info {
 		struct ieee80211_channel *channel;
 		struct cfg80211_bss *bss;
 	} links[IEEE80211_MLD_MAX_NUM_LINKS];
+	bool authorized;
 };
 
 /**
diff --git a/include/uapi/linux/nl80211.h b/include/uapi/linux/nl80211.h
index 020387d764122..2b96a18def9b3 100644
--- a/include/uapi/linux/nl80211.h
+++ b/include/uapi/linux/nl80211.h
@@ -2705,7 +2705,9 @@ enum nl80211_commands {
  *	in %NL80211_CMD_CONNECT to indicate that for 802.1X authentication it
  *	wants to use the supported offload of the 4-way handshake.
  * @NL80211_ATTR_PMKR0_NAME: PMK-R0 Name for offloaded FT.
- * @NL80211_ATTR_PORT_AUTHORIZED: (reserved)
+ * @NL80211_ATTR_PORT_AUTHORIZED: flag attribute used in %NL80211_CMD_CONNECT
+ *	or %NL80211_CMD_ROAM notifications to indicate that 802.1X
+ *	authentication was done by the driver or is not needed.
  *
  * @NL80211_ATTR_EXTERNAL_AUTH_ACTION: Identify the requested external
  *     authentication operation (u32 attribute with an
@@ -7110,6 +7112,9 @@ enum nl80211_feature_flags {
  * @NL80211_EXT_FEATURE_PROBE_AP: Driver supports probing the associated AP
  *	in STA mode using @NL80211_CMD_PROBE_PEER.
  *
+ * @NL80211_EXT_FEATURE_ROAM_OFFLOAD: Driver supports Fast Transition or
+ *	Opportunistic Key Caching roaming offload in station mode.
+ *
  * @NUM_NL80211_EXT_FEATURES: number of extended features.
  * @MAX_NL80211_EXT_FEATURES: highest extended feature index.
  */
@@ -7192,6 +7197,7 @@ enum nl80211_ext_feature_index {
 	NL80211_EXT_FEATURE_ROC_ADDR_FILTER,
 	NL80211_EXT_FEATURE_SET_KEY_LTF_SEED,
 	NL80211_EXT_FEATURE_PROBE_AP,
+	NL80211_EXT_FEATURE_ROAM_OFFLOAD,
 
 	/* add new features before the definition below */
 	NUM_NL80211_EXT_FEATURES,
diff --git a/net/wireless/nl80211.c b/net/wireless/nl80211.c
index 44f2bad086705..7dbd4caf26091 100644
--- a/net/wireless/nl80211.c
+++ b/net/wireless/nl80211.c
@@ -18443,7 +18443,9 @@ static int nl80211_set_pmk(struct sk_buff *skb, struct genl_info *info)
 		return -EOPNOTSUPP;
 
 	if (!wiphy_ext_feature_isset(&rdev->wiphy,
-				     NL80211_EXT_FEATURE_4WAY_HANDSHAKE_STA_1X))
+				     NL80211_EXT_FEATURE_4WAY_HANDSHAKE_STA_1X) &&
+	    !wiphy_ext_feature_isset(&rdev->wiphy,
+				     NL80211_EXT_FEATURE_ROAM_OFFLOAD))
 		return -EOPNOTSUPP;
 
 	if (!info->attrs[NL80211_ATTR_MAC] || !info->attrs[NL80211_ATTR_PMK])
@@ -21198,6 +21200,8 @@ void nl80211_send_connect_result(struct cfg80211_registered_device *rdev,
 	     (nla_put_flag(msg, NL80211_ATTR_TIMED_OUT) ||
 	      nla_put_u32(msg, NL80211_ATTR_TIMEOUT_REASON,
 			  cr->timeout_reason))) ||
+	    (cr->authorized &&
+	     nla_put_flag(msg, NL80211_ATTR_PORT_AUTHORIZED)) ||
 	    (cr->req_ie &&
 	     nla_put(msg, NL80211_ATTR_REQ_IE, cr->req_ie_len, cr->req_ie)) ||
 	    (cr->resp_ie &&
@@ -21321,7 +21325,9 @@ void nl80211_send_roamed(struct cfg80211_registered_device *rdev,
 	    (info->fils.pmk &&
 	     nla_put(msg, NL80211_ATTR_PMK, info->fils.pmk_len, info->fils.pmk)) ||
 	    (info->fils.pmkid &&
-	     nla_put(msg, NL80211_ATTR_PMKID, WLAN_PMKID_LEN, info->fils.pmkid)))
+	     nla_put(msg, NL80211_ATTR_PMKID, WLAN_PMKID_LEN, info->fils.pmkid)) ||
+	    (info->authorized &&
+	     nla_put_flag(msg, NL80211_ATTR_PORT_AUTHORIZED)))
 		goto nla_put_failure;
 
 	if (info->valid_links) {
diff --git a/net/wireless/sme.c b/net/wireless/sme.c
index 2a719b5c487e3..974e79f57392d 100644
--- a/net/wireless/sme.c
+++ b/net/wireless/sme.c
@@ -1067,6 +1067,7 @@ void cfg80211_connect_done(struct net_device *dev,
 	ev->cr.status = params->status;
 	ev->cr.timeout_reason = params->timeout_reason;
 	ev->cr.assoc_encrypted = params->assoc_encrypted;
+	ev->cr.authorized = params->authorized;
 
 	spin_lock_irqsave(&wdev->event_lock, flags);
 	list_add_tail(&ev->list, &wdev->event_list);
@@ -1253,6 +1254,7 @@ void cfg80211_roamed(struct net_device *dev, struct cfg80211_roam_info *info,
 		next += ETH_ALEN;
 	}
 	ev->rm.valid_links = info->valid_links;
+	ev->rm.authorized = info->authorized;
 	for_each_valid_link(info, link) {
 		ev->rm.links[link].bss = info->links[link].bss;
 

3/2 2026/08/05 12:18 llm patch-evaluator
0m Model:
gemini-3.1-pro-preview

Args:
null

Results:
null

Tokens:
							input: 4252
							output: 43
							thoughts: 406
						

Thoughts:
**Fuzzing Potential: A Deep Dive into the mac80211/cfg80211 Patch**

Okay, here's the breakdown. I've got this patch that's messing with the `mac80211/cfg80211` subsystem, specifically `net/wireless`. It's adding an `authorized` field to `cfg80211_connect_resp_params` and `cfg80211_roam_info`, which immediately piques my interest. Anytime we're modifying data structures and adding new attributes in netlink messages, it raises a flag.  Plus, there's a new extended feature flag, `NL80211_EXT_FEATURE_ROAM_OFFLOAD`, which usually means we're introducing new codepaths and state.

This patch is modifying core reachable kernel logic related to `cfg80211` and `nl80211` which immediately screams fuzzing candidate. The modification to `nl80211_set_pmk` is especially interesting. I know that function is an entry point from userspace via the `NL80211_CMD_SET_PMK` netlink command. This means we have direct user-controlled input that's now tied to this new feature, and that always presents an opportunity. The fact that `nl80211_send_connect_result` and `nl80211_send_roamed` are triggered by driver events is also relevant, even if they format netlink messages to userspace.

Now, I'm going to jump into the code and verify the `nl80211_set_pmk` function in `net/wireless/nl80211.c` and check its context. I will use grep for fast navigation to inspect what exactly the changes are. I need to understand how the new `NL80211_EXT_FEATURE_ROAM_OFFLOAD` feature and `authorized` field interact with the existing functionality. This is where the real fuzzing potential lies.



4/2 2026/08/05 12:18 tool grepper
0m Args:
{
  "Expression": "nl80211_set_pmk",
  "PathPrefix": "net/wireless/nl80211.c"
}

Results:
{
  "Output": "net/wireless/nl80211.c=14344=static int nl80211_wiphy_netns(struct sk_buff *skb, struct genl_info *info)\n--\nnet/wireless/nl80211.c-14387-\nnet/wireless/nl80211.c:14388:static int nl80211_set_pmksa(struct sk_buff *skb, struct genl_info *info)\nnet/wireless/nl80211.c-14389-{\n--\nnet/wireless/nl80211.c=18412=static int nl80211_set_multicast_to_unicast(struct sk_buff *skb,\n--\nnet/wireless/nl80211.c-18433-\nnet/wireless/nl80211.c:18434:static int nl80211_set_pmk(struct sk_buff *skb, struct genl_info *info)\nnet/wireless/nl80211.c-18435-{\n--\nnet/wireless/nl80211.c=19735=static const struct genl_small_ops nl80211_small_ops[] = {\n--\nnet/wireless/nl80211.c-20069-\t\t.validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,\nnet/wireless/nl80211.c:20070:\t\t.doit = nl80211_set_pmksa,\nnet/wireless/nl80211.c-20071-\t\t.flags = GENL_UNS_ADMIN_PERM,\n--\nnet/wireless/nl80211.c-20451-\t\t.validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,\nnet/wireless/nl80211.c:20452:\t\t.doit = nl80211_set_pmk,\nnet/wireless/nl80211.c-20453-\t\t.flags = GENL_UNS_ADMIN_PERM,\n"
}

5/2 2026/08/05 12:18 llm patch-evaluator
0m Model:
gemini-3.1-pro-preview

Args:
null

Results:
null

Tokens:
							input: 5737
							output: 34
							thoughts: 248
						

Thoughts:
**My Analysis of the Proposed Changes**

Okay, so `nl80211_set_pmk` is definitely a netlink command handler, as expected. This patch is adding a condition to allow it when `NL80211_EXT_FEATURE_ROAM_OFFLOAD` is enabled. That's good to know. The changes also touch `nl80211_send_connect_result`, `nl80211_send_roamed`, `cfg80211_connect_done`, and `cfg80211_roamed`. Those are all driver-to-cfg80211 API functions, which is useful in understanding the scope of impact.

Given this, I think fuzzing `nl80211_set_pmk` should be our primary focus. We can also explore fuzzing `cfg80211_connect_done` and `cfg80211_roamed`, but that's going to require having `mac80211_hwsim` available. That's something to keep in mind, we can use that to test those.

Let's quickly check the configuration options. We need to confirm that `CONFIG_CFG80211`, `CONFIG_MAC80211`, and `CONFIG_MAC80211_HWSIM` are all present. Knowing that will shape the strategy.



6/2 2026/08/05 12:18 tool grepper
0m Args:
{
  "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/08/05 12:18 llm patch-evaluator
0m Model:
gemini-3.1-pro-preview

Args:
null

Results:
null

Tokens:
							input: 7249
							output: 49
							thoughts: 63
						

Thoughts:
**Examining the Wireless Hardware Simulation Configuration**

Okay, so we're looking at some key configuration options related to wireless. We've got `CFG80211`, which is always a starting point for wireless configurations, and then `MAC80211_HWSIM`. Ah, yes, that's the hardware simulation piece for mac80211.

Right, let's dive into the guts of this. To understand how `MAC80211_HWSIM` actually works, the logical place to start is `drivers/net/wireless/mac80211_hwsim.c`. That file should give us the implementation details, how it mimics the hardware, and how it interacts with the mac80211 core. Time to get my hands dirty and see what's really happening under the hood. I suspect we'll see simulated radios, interfaces, and packet handling within that module.



8/2 2026/08/05 12:18 tool grepper
0m Error:
no matches

Args:
{
  "Expression": "config MAC80211_HWSIM",
  "PathPrefix": "drivers/net/wireless/mac80211_hwsim/Kconfig"
}

Results:
{
  "error": "no matches"
}

9/2 2026/08/05 12:18 llm patch-evaluator
0m Model:
gemini-3.1-pro-preview

Args:
null

Results:
null

Tokens:
							input: 7578
							output: 31
							thoughts: 56
						

Thoughts:
**Navigating the Kernel's Wireless Landscape**

Okay, so I need to figure out where the configuration options for the hardware simulation within the wireless stack are defined. My first instinct, given my experience, is to zero in on the relevant Kconfig files. Given my prior experience, `drivers/net/wireless/Kconfig` is the most obvious starting point for general wireless configuration. However, since I am specifically looking at hardware simulation, `drivers/net/wireless/mac80211_hwsim/Kconfig` feels like it is a strong second contender. Given the simplicity, and time savings, rather than opening these files, I'll bypass searching both Kconfig files, and conduct a quick grep search for `config MAC80211_HWSIM` within the kernel source tree. This will be an efficient way to quickly locate the relevant configuration option.



10/2 2026/08/05 12:18 tool grepper
0m Args:
{
  "Expression": "config MAC80211_HWSIM",
  "PathPrefix": ""
}

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"
}

11/2 2026/08/05 12:19 llm patch-evaluator
0m Model:
gemini-3.1-pro-preview

Args:
null

Results:
null

Tokens:
							input: 7918
							output: 34
							thoughts: 120
						

Thoughts:
**Analyzing the WiFi Driver Interaction**

Alright, let's break this down. My focus right now is on how the WiFi driver, specifically within the context of `MAC80211`, `CFG80211`, and `MAC80211_HWSIM`, handles connection and roaming. I need to understand the interaction, so I'm honing in on specific functions: `nl80211_set_pmk`, `cfg80211_connect_done`, and `cfg80211_roamed`.

Hmm, `cfg80211_connect_done` and `cfg80211_roamed`...those ring a bell. Aren't those exported symbols used by the *drivers* themselves? I need to verify that. It's crucial to understand how the driver interfaces with the cfg80211 core. I'll quickly double-check that they are, in fact, exported. That's a fundamental aspect I need to confirm to proceed effectively.



12/2 2026/08/05 12:19 tool grepper
0m Args:
{
  "Expression": "EXPORT_SYMBOL.*cfg80211_connect_done",
  "PathPrefix": ""
}

Results:
{
  "Output": "net/wireless/sme.c=968=void cfg80211_connect_done(struct net_device *dev,\n--\nnet/wireless/sme.c-1076-}\nnet/wireless/sme.c:1077:EXPORT_SYMBOL(cfg80211_connect_done);\nnet/wireless/sme.c-1078-\n"
}

13/2 2026/08/05 12:19 llm patch-evaluator
0m Model:
gemini-3.1-pro-preview

Args:
null

Results:
null

Tokens:
							input: 8405
							output: 32
							thoughts: 263
						

Thoughts:
**Analyzing API Entrypoints and Static Functions**

Okay, so I'm dealing with exported symbols here. The prompt specifies a preference for non-static, non-inlined API entrypoints over internal static helper functions. Right now, I'm looking at `nl80211_set_pmk`. I remember that's a static function residing in `net/wireless/nl80211.c`. But hold on, the instructions are emphasizing non-static *and* non-inlined functions.

Now, I need to think this through. `nl80211_set_pmk` *is* static, yes, but it's a netlink handler. That means it's referenced through a function pointer, specifically in `nl80211_small_ops`. Therefore, even though it's static, the compiler *won't* inline it completely because a pointer needs a distinct address to point to. It'll still exist as a separate symbol.

However, the key is the *preferred* non-static/non-inlined approach. I also know `cfg80211_connect_done` and `cfg80211_roamed` are exported and non-static, which is good. That makes them strong candidates.

I need to confirm if `nl80211_set_pmk` *actually* gets inlined. I suspect it won't be fully inlined because of the function pointer, but I need to make sure. I'll also consider including `cfg80211_connect_done` and `cfg80211_roamed`.

To be thorough, I'll also check `nl80211_send_connect_result` now, while I'm at it.



14/2 2026/08/05 12:19 tool grepper
0m Args:
{
  "Expression": "nl80211_send_connect_result",
  "PathPrefix": ""
}

Results:
{
  "Output": "net/wireless/nl80211.c=21144=void nl80211_send_assoc_timeout(struct cfg80211_registered_device *rdev,\n--\nnet/wireless/nl80211.c-21151-\nnet/wireless/nl80211.c:21152:void nl80211_send_connect_result(struct cfg80211_registered_device *rdev,\nnet/wireless/nl80211.c-21153-\t\t\t\t struct net_device *netdev,\n--\nnet/wireless/nl80211.h=77=void nl80211_send_assoc_timeout(struct cfg80211_registered_device *rdev,\n--\nnet/wireless/nl80211.h-79-\t\t\t\tconst u8 *addr, gfp_t gfp);\nnet/wireless/nl80211.h:80:void nl80211_send_connect_result(struct cfg80211_registered_device *rdev,\nnet/wireless/nl80211.h-81-\t\t\t\t struct net_device *netdev,\n--\nnet/wireless/sme.c=735=void __cfg80211_connect_result(struct net_device *dev,\n--\nnet/wireless/sme.c-770-\twdev-\u003eunprot_beacon_reported = 0;\nnet/wireless/sme.c:771:\tnl80211_send_connect_result(wiphy_to_rdev(wdev-\u003ewiphy), dev, cr,\nnet/wireless/sme.c-772-\t\t\t\t    GFP_KERNEL);\n"
}

15/2 2026/08/05 12:19 llm patch-evaluator
0m Model:
gemini-3.1-pro-preview

Args:
null

Results:
null

Tokens:
							input: 9537
							output: 39
							thoughts: 622
						

Thoughts:
**My Analysis of Netlink and cfg80211 Function Inclusions**

Okay, so I'm evaluating which functions from this patch need to be considered, given the concern about static functions. I've noted that `nl80211_send_connect_result` and `nl80211_send_roamed` are not static, which is a good starting point since these were modified in `nl80211.c`. Those will definitely need inclusion. Then I need to remember that I want to grab `cfg80211_connect_done` and `cfg80211_roamed`.

I need to confirm whether `nl80211_set_pmk` is static. Hmm, yes, it is. But, I remember that it's the main entry point for the changes in `nl80211.c` regarding the extended feature. And since it's called through netlink, I think that makes it an exception, as it likely won't be inlined. Even though it's static, I should include `nl80211_set_pmk`. I will include it.

The primary goal here is to get access to the modified code.

The change introduces an `authorized` flag to the connection and roaming responses, exposed via `NL80211_ATTR_PORT_AUTHORIZED`. It also includes a new `NL80211_EXT_FEATURE_ROAM_OFFLOAD` feature and modifies `nl80211_set_pmk`. So, it's core cfg80211 functionality and touches the netlink API. Given that, I will also include `nl80211_set_pmk` because it is modified.

I should also make sure to check if `MAC80211_HWSIM` has any dependencies.



16/2 2026/08/05 12:19 tool grepper
0m Args:
{
  "Expression": "depends on.*MAC80211",
  "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\"\ndrivers/net/wireless/virtual/Kconfig:3:\tdepends on MAC80211\ndrivers/net/wireless/virtual/Kconfig-4-\thelp\n"
}

17/2 2026/08/05 12:19 llm patch-evaluator
0m Model:
gemini-3.1-pro-preview

Args:
null

Results:
null

Tokens:
							input: 10718
							output: 268
							thoughts: 700
						

Thoughts:
**My Analysis of the Wireless Subsystem Changes**

Okay, so I'm looking at this patch and I need to figure out the attack surface. It seems we're dealing with `CFG80211`, `MAC80211`, and `MAC80211_HWSIM` – those are the key configurations in play. The relationship is clear: `MAC80211_HWSIM` depends on `MAC80211`, and `MAC80211` relies on `CFG80211`. That makes `CFG80211` a foundational element here, and its interaction with the other two is what I need to focus on.

I've been examining `nl80211_set_pmk`, which, even though it's static, functions as a crucial netlink handler. I've decided to include it.

Based on the code diff, these seem like prime targets for fuzzing as they handle critical connection and roaming responses: `nl80211_set_pmk`, `nl80211_send_connect_result`, `nl80211_send_roamed`, `cfg80211_connect_done`, and `cfg80211_roamed`.

The patch introduces a new 'authorized' flag in connection and roaming responses and exposes it through the `NL80211_ATTR_PORT_AUTHORIZED` netlink attribute. It also adds a `NL80211_EXT_FEATURE_ROAM_OFFLOAD` feature flag. The changes to `nl80211_set_pmk` to allow setting the PMK when this feature is supported are significant. These are functional changes to the core wireless subsystem which I'm confident can be reached, and potentially fuzzed, using the `mac80211_hwsim` driver. This is a good place to start my investigation.



18/2 2026/08/05 12:19 tool set-results
0m Args:
{
  "EnableConfigs": [
    "CFG80211",
    "MAC80211",
    "MAC80211_HWSIM"
  ],
  "FocusSymbols": [
    "nl80211_set_pmk",
    "nl80211_send_connect_result",
    "nl80211_send_roamed",
    "cfg80211_connect_done",
    "cfg80211_roamed"
  ],
  "Reasoning": "The patch adds a new 'authorized' flag to connection and roaming response parameters in cfg80211, exposing it to userspace via the NL80211_ATTR_PORT_AUTHORIZED netlink attribute. It also introduces the NL80211_EXT_FEATURE_ROAM_OFFLOAD feature flag and modifies nl80211_set_pmk to allow setting the PMK when this feature is supported. These are functional changes to the core wireless subsystem (cfg80211) and its netlink API, which can be reached and tested using the software-emulated mac80211_hwsim driver.",
  "WorthFuzzing": true
}

Results:
{
  "EnableConfigs": [
    "CFG80211",
    "MAC80211",
    "MAC80211_HWSIM"
  ],
  "FocusSymbols": [
    "nl80211_set_pmk",
    "nl80211_send_connect_result",
    "nl80211_send_roamed",
    "cfg80211_connect_done",
    "cfg80211_roamed"
  ],
  "Reasoning": "The patch adds a new 'authorized' flag to connection and roaming response parameters in cfg80211, exposing it to userspace via the NL80211_ATTR_PORT_AUTHORIZED netlink attribute. It also introduces the NL80211_EXT_FEATURE_ROAM_OFFLOAD feature flag and modifies nl80211_set_pmk to allow setting the PMK when this feature is supported. These are functional changes to the core wireless subsystem (cfg80211) and its netlink API, which can be reached and tested using the software-emulated mac80211_hwsim driver.",
  "WorthFuzzing": true
}

LLM Calls Summary:
Total Calls Total Tokens Avg Tokens Total Duration (Seconds) Avg Duration (Seconds)
Tool Calls Summary:
Total Calls Total Duration (Seconds) Avg Duration (Seconds)