| Seq | Timestamp | Type | Name | Duration |
|---|---|---|---|---|
| 0/0 | 2026/08/11 21:52 | flow | patch-triage |
0mArgs:null Results: {
"EnableConfigs": [
"MAC80211"
],
"FocusSymbols": [
"ieee80211_netdev_setup_tc"
],
"KMSANReasoning": "The patch fixes an invalid pointer dereference (resulting from `container_of` on a NULL pointer) in `drv_net_setup_tc` by adding a check for `!sdata-\u003ebss` and returning `-EIO` early. It also adds a check for `check_sdata_in_driver(sdata)`. These changes are purely control flow additions to prevent crashes (invalid memory accesses), which are already caught by standard kernel crash handlers and KASAN. There is no introduction of uninitialized memory usage, info-leaks to user space, or complex data structure allocations that would require KMSAN to detect. Therefore, a dedicated KMSAN fuzzing session is not necessary.",
"NeedsKMSAN": false,
"Reasoning": "The patch adds a check in `drv_net_setup_tc` which is called from `ieee80211_netdev_setup_tc`. `ieee80211_netdev_setup_tc` is the `ndo_setup_tc` implementation for mac80211 interfaces. This is reachable from userspace via `tc` commands. The patch fixes a crash when `sdata-\u003evif.type == NL80211_IFTYPE_AP_VLAN` and `!sdata-\u003ebss`. This is definitely worth fuzzing.",
"WorthFuzzing": true
} |
| 1/1 | 2026/08/11 21:52 | action | read-patch-diff |
0mArgs:null Results: {
"PatchDiff": "commit 5433cb5ce725ded08d75050298d5c93dbce4fe1c\nAuthor: syz-cluster \u003ctriage@syzkaller.com\u003e\nDate: Tue Aug 11 21:52:05 2026 +0000\n\n syz-cluster: applied patch under review\n\ndiff --git a/net/mac80211/driver-ops.h b/net/mac80211/driver-ops.h\nindex f1c0b87fddd5f..ecfdb51152f41 100644\n--- a/net/mac80211/driver-ops.h\n+++ b/net/mac80211/driver-ops.h\n@@ -1702,7 +1702,23 @@ static inline int drv_net_setup_tc(struct ieee80211_local *local,\n \n \tmight_sleep();\n \n+\t/*\n+\t * An AP_VLAN interface created without a matching, same-address\n+\t * AP interface present never gets sdata-\u003ebss populated (see the\n+\t * interface-add validation in iface.c, which links bss only\n+\t * opportunistically and does not require it). Such an sdata is\n+\t * not safe to pass through get_bss_sdata(): container_of() on a\n+\t * NULL sdata-\u003ebss yields a small invalid pointer, which the\n+\t * tracepoint below then dereferences to read the interface name,\n+\t * causing a crash.\n+\t */\n+\tif (sdata-\u003evif.type == NL80211_IFTYPE_AP_VLAN \u0026\u0026 !sdata-\u003ebss)\n+\t\treturn -EIO;\n+\n \tsdata = get_bss_sdata(sdata);\n+\tif (!check_sdata_in_driver(sdata))\n+\t\treturn -EIO;\n+\n \ttrace_drv_net_setup_tc(local, sdata, type);\n \tif (local-\u003eops-\u003enet_setup_tc)\n \t\tret = local-\u003eops-\u003enet_setup_tc(\u0026local-\u003ehw, \u0026sdata-\u003evif, dev,\n"
} |
| 2/1 | 2026/08/11 21:52 | agent | patch-evaluator |
0mModel:best-expensive Args: null Results: {
"EnableConfigs": [
"MAC80211"
],
"FocusSymbols": [
"ieee80211_netdev_setup_tc"
],
"Reasoning": "The patch adds a check in `drv_net_setup_tc` which is called from `ieee80211_netdev_setup_tc`. `ieee80211_netdev_setup_tc` is the `ndo_setup_tc` implementation for mac80211 interfaces. This is reachable from userspace via `tc` commands. The patch fixes a crash when `sdata-\u003evif.type == NL80211_IFTYPE_AP_VLAN` and `!sdata-\u003ebss`. This is definitely worth fuzzing.",
"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 5433cb5ce725ded08d75050298d5c93dbce4fe1c
Author: syz-cluster <triage@syzkaller.com>
Date: Tue Aug 11 21:52:05 2026 +0000
syz-cluster: applied patch under review
diff --git a/net/mac80211/driver-ops.h b/net/mac80211/driver-ops.h
index f1c0b87fddd5f..ecfdb51152f41 100644
--- a/net/mac80211/driver-ops.h
+++ b/net/mac80211/driver-ops.h
@@ -1702,7 +1702,23 @@ static inline int drv_net_setup_tc(struct ieee80211_local *local,
might_sleep();
+ /*
+ * An AP_VLAN interface created without a matching, same-address
+ * AP interface present never gets sdata->bss populated (see the
+ * interface-add validation in iface.c, which links bss only
+ * opportunistically and does not require it). Such an sdata is
+ * not safe to pass through get_bss_sdata(): container_of() on a
+ * NULL sdata->bss yields a small invalid pointer, which the
+ * tracepoint below then dereferences to read the interface name,
+ * causing a crash.
+ */
+ if (sdata->vif.type == NL80211_IFTYPE_AP_VLAN && !sdata->bss)
+ return -EIO;
+
sdata = get_bss_sdata(sdata);
+ if (!check_sdata_in_driver(sdata))
+ return -EIO;
+
trace_drv_net_setup_tc(local, sdata, type);
if (local->ops->net_setup_tc)
ret = local->ops->net_setup_tc(&local->hw, &sdata->vif, dev,
|
| 3/2 | 2026/08/11 21:52 | llm | patch-evaluator |
0mModel:gemini-3.1-pro-preview Args: null Results: null Tokens: input: 2227 output: 36 thoughts: 153 Thoughts: **Analyzing a mac80211 Patch** Okay, so I'm looking at this patch for `net/mac80211/driver-ops.h`. It seems to be a functional change, specifically in the `drv_net_setup_tc` function. The patch introduces a new check, which I see right away. It's adding `check_sdata_in_driver(sdata)` in there. And if that check fails, it returns `-EIO`. Right, the existing code already has a check for `NL80211_IFTYPE_AP_VLAN` and if `sdata->bss` is null. Interesting to see this new check being introduced. This is likely to prevent a more specific kind of error, or potentially to handle a new edge case. My next step will definitely be to dig into how `drv_net_setup_tc` is actually used within the driver context. I need to understand the full implications of this change and what scenarios this new `check_sdata_in_driver` function is designed to prevent. This is likely where the real meat of the patch lies. |
| 4/2 | 2026/08/11 21:52 | tool | grepper |
0mArgs:{
"Expression": "drv_net_setup_tc",
"PathPrefix": "net/mac80211/"
}Results: {
"Output": "net/mac80211/driver-ops.h=1674=static inline int drv_net_fill_forward_path(struct ieee80211_local *local,\n--\nnet/mac80211/driver-ops.h-1695-\nnet/mac80211/driver-ops.h:1696:static inline int drv_net_setup_tc(struct ieee80211_local *local,\nnet/mac80211/driver-ops.h-1697-\t\t\t\t struct ieee80211_sub_if_data *sdata,\n--\nnet/mac80211/driver-ops.h-1721-\nnet/mac80211/driver-ops.h:1722:\ttrace_drv_net_setup_tc(local, sdata, type);\nnet/mac80211/driver-ops.h-1723-\tif (local-\u003eops-\u003enet_setup_tc)\n--\nnet/mac80211/iface.c=932=static int ieee80211_netdev_setup_tc(struct net_device *dev,\n--\nnet/mac80211/iface.c-937-\nnet/mac80211/iface.c:938:\treturn drv_net_setup_tc(local, sdata, dev, type, type_data);\nnet/mac80211/iface.c-939-}\n--\nnet/mac80211/trace.h=2532=DEFINE_EVENT(sta_event, drv_net_fill_forward_path,\n--\nnet/mac80211/trace.h-2538-\nnet/mac80211/trace.h:2539:TRACE_EVENT(drv_net_setup_tc,\nnet/mac80211/trace.h-2540-\tTP_PROTO(struct ieee80211_local *local,\n"
} |
| 5/2 | 2026/08/11 21:52 | llm | patch-evaluator |
0mModel:gemini-3.1-pro-preview Args: null Results: null Tokens: input: 3185 output: 43 thoughts: 51 Thoughts: Here's my take on the thought process: **Diving into Traffic Control Setup** Okay, so I'm digging into how traffic control is set up for 802.11 networks. My starting point is `drv_net_setup_tc`. I know it gets called from `ieee80211_netdev_setup_tc`, which makes sense. Now I want to understand *how* that's happening, what's triggering the call, and what the overall flow is. Therefore, my next step is clear – I need to track down the usages of `ieee80211_netdev_setup_tc`. That'll give me the context I need to understand the role of `drv_net_setup_tc` in the bigger picture. Understanding the call path here is going to be key to grasping the traffic management implementation. |
| 6/2 | 2026/08/11 21:52 | tool | grepper |
0mArgs:{
"Expression": "ieee80211_netdev_setup_tc",
"PathPrefix": "net/mac80211/"
}Results: {
"Output": "net/mac80211/iface.c=927=static void ieee80211_uninit(struct net_device *dev)\n--\nnet/mac80211/iface.c-931-\nnet/mac80211/iface.c:932:static int ieee80211_netdev_setup_tc(struct net_device *dev,\nnet/mac80211/iface.c-933-\t\t\t\t enum tc_setup_type type, void *type_data)\n--\nnet/mac80211/iface.c=941=static const struct net_device_ops ieee80211_dataif_ops = {\n--\nnet/mac80211/iface.c-947-\t.ndo_set_mac_address \t= ieee80211_change_mac,\nnet/mac80211/iface.c:948:\t.ndo_setup_tc\t\t= ieee80211_netdev_setup_tc,\nnet/mac80211/iface.c-949-};\n--\nnet/mac80211/iface.c=1047=static const struct net_device_ops ieee80211_dataif_8023_ops = {\n--\nnet/mac80211/iface.c-1054-\t.ndo_fill_forward_path\t= ieee80211_netdev_fill_forward_path,\nnet/mac80211/iface.c:1055:\t.ndo_setup_tc\t\t= ieee80211_netdev_setup_tc,\nnet/mac80211/iface.c-1056-};\n"
} |
| 7/2 | 2026/08/11 21:52 | llm | patch-evaluator |
0mModel:gemini-3.1-pro-preview Args: null Results: null Tokens: input: 3932 output: 36 thoughts: 125 Thoughts: **Analyzing a Mac80211 Interface Crash** Okay, so I'm looking at this patch related to the `ndo_setup_tc` function within the `net_device_ops` structure, specifically for mac80211 interfaces. I recognize this; it’s how userspace interacts with the interface via `tc` commands over netlink. The vulnerability is related to a crash that occurs under specific conditions: when `sdata->vif.type` is set to `NL80211_IFTYPE_AP_VLAN` but `sdata->bss` is null. This immediately strikes me as something we should prioritize for fuzzing. The key symbol to focus on seems to be `ieee80211_netdev_setup_tc`. Knowing the setup required for this particular subsystem, I can see that the `MAC80211` configuration option is likely the prerequisite for reproducing this crash scenario. Let's dig deeper and see if we can craft a precise fuzzing harness. |
| 8/2 | 2026/08/11 21:52 | tool | grepper |
0mArgs:{
"Expression": "config MAC80211",
"PathPrefix": "net/mac80211/"
}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"
} |
| 9/2 | 2026/08/11 21:52 | llm | patch-evaluator |
0mModel:gemini-3.1-pro-preview Args: null Results: null Tokens: input: 6494 output: 182 thoughts: 178 Thoughts: **Analyzing a mac80211 Patch for Vulnerabilities** Okay, let's break this down. I see a patch specifically targeting the `MAC80211` configuration. The core of this seems to be a check added within the `drv_net_setup_tc` function. Now, `drv_net_setup_tc` is called from `ieee80211_netdev_setup_tc`, which I immediately recognize as the `ndo_setup_tc` implementation for mac80211 interfaces. That's key – `ndo_setup_tc` means userspace, through `tc` commands, can reach this code. The patch appears to fix a crash that occurs under very specific conditions: when the `sdata->vif.type` is set to `NL80211_IFTYPE_AP_VLAN` and `sdata->bss` is null. This immediately sets off alarm bells. A null pointer dereference, especially reachable from userspace, is a textbook case for fuzzing. Therefore, `ieee80211_netdev_setup_tc` is the focus, and it will be interesting to see what the fuzzers reveal. Since `MAC80211` is required, the fuzzing harness should be set up accordingly. |
| 10/2 | 2026/08/11 21:52 | tool | set-results |
0mArgs:{
"EnableConfigs": [
"MAC80211"
],
"FocusSymbols": [
"ieee80211_netdev_setup_tc"
],
"Reasoning": "The patch adds a check in `drv_net_setup_tc` which is called from `ieee80211_netdev_setup_tc`. `ieee80211_netdev_setup_tc` is the `ndo_setup_tc` implementation for mac80211 interfaces. This is reachable from userspace via `tc` commands. The patch fixes a crash when `sdata-\u003evif.type == NL80211_IFTYPE_AP_VLAN` and `!sdata-\u003ebss`. This is definitely worth fuzzing.",
"WorthFuzzing": true
}Results: {
"EnableConfigs": [
"MAC80211"
],
"FocusSymbols": [
"ieee80211_netdev_setup_tc"
],
"Reasoning": "The patch adds a check in `drv_net_setup_tc` which is called from `ieee80211_netdev_setup_tc`. `ieee80211_netdev_setup_tc` is the `ndo_setup_tc` implementation for mac80211 interfaces. This is reachable from userspace via `tc` commands. The patch fixes a crash when `sdata-\u003evif.type == NL80211_IFTYPE_AP_VLAN` and `!sdata-\u003ebss`. This is definitely worth fuzzing.",
"WorthFuzzing": true
} |
| 11/1 | 2026/08/11 21:52 | action | If |
0mArgs:{
"WorthFuzzing": true
}Results: null |
| 12/2 | 2026/08/11 21:52 | agent | kmsan-evaluator |
0mModel:best-expensive Args: null Results: {
"KMSANReasoning": "The patch fixes an invalid pointer dereference (resulting from `container_of` on a NULL pointer) in `drv_net_setup_tc` by adding a check for `!sdata-\u003ebss` and returning `-EIO` early. It also adds a check for `check_sdata_in_driver(sdata)`. These changes are purely control flow additions to prevent crashes (invalid memory accesses), which are already caught by standard kernel crash handlers and KASAN. There is no introduction of uninitialized memory usage, info-leaks to user space, or complex data structure allocations that would require KMSAN to detect. Therefore, a dedicated KMSAN fuzzing session is not necessary.",
"NeedsKMSAN": false
}Instruction: You are an expert Linux kernel security engineer specializing in kernel memory
error detectors (KASAN and KMSAN). Your job is to review the provided patch series and
determine if the code changes justify spawning a dedicated KMSAN (KernelMemorySanitizer)
fuzzing session in addition to standard KASAN fuzzing.
CRITICAL DISTINCTION BETWEEN KASAN AND KMSAN:
- Standard KASAN kernel builds (upstream-apparmor-kasan.config) already enable
a comprehensive suite of debugging tools and sanitizers, including KASAN
(out-of-bounds accesses, use-after-free, double free, invalid free), LOCKDEP
(locking bugs and deadlocks), UB-sanitizers, and memory corruption checks.
- KMSAN (KernelMemorySanitizer) detects reads of UNINITIALIZED memory (stack, heap,
or page allocations) and kernel-to-user memory info-leaks.
Rule: THERE IS NO SENSE IN RUNNING A KMSAN SESSION IF A BUG CAN BE CAUGHT BY KASAN,
LOCKDEP, OR OTHER STANDARD BUG DETECTORS.
A dedicated KMSAN fuzzing session incurs significant resource costs. You must ONLY
set NeedsKMSAN=true if the code changes introduce or expose UNINITIALIZED MEMORY risks
that are detected ONLY by KMSAN.
Look holistically at the patch series and surrounding code. Even if no direct
uninitialized field accesses or new buffer allocations are added in the diff itself,
a patch may alter control flow, bounds checking, or data length calculations in ways
that change how the rest of the code operates on existing buffers (e.g. allowing
uninitialized stack/heap memory to be read, copied to user space, or used in control
flow). Do not hesitate to use your code access tools to inspect the surrounding code,
called functions, and callers.
Set NeedsKMSAN=true ONLY IF the patch introduces or modifies:
1. Kernel structures sent to user space (via copy_to_user, put_user, netlink skb
attributes, ioctl output arguments, socket options, or BPF buffers) where fields
or structure padding might not be fully initialized/zeroed.
2. Conditional logic or branching that depends on potentially uninitialized variables
or struct fields.
3. Allocation or initialization of complex data structures where uninitialized fields
could be read later in reachable code paths.
4. Bounds checks, lengths, or logic in a way that allows surrounding code to access
uninitialized bytes of existing buffers.
Set NeedsKMSAN=false IF:
- The code changes primarily risk out-of-bounds access, array overflows, NULL pointer
dereferences, locking deadlocks, or use-after-free bugs (these are already caught
by KASAN, LOCKDEP, or standard bug detectors).
- All stack/heap structures touched or introduced by the patch are fully zeroed
or initialized (e.g. using = {0}, memset, kzalloc) before being read or copied.
- The patch does not introduce any risk of uninitialized memory usage or info-leaks.
Use your code access tools to inspect the surrounding code if necessary, then provide
detailed KMSANReasoning contrasting KASAN vs KMSAN applicability for this patch.
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 5433cb5ce725ded08d75050298d5c93dbce4fe1c
Author: syz-cluster <triage@syzkaller.com>
Date: Tue Aug 11 21:52:05 2026 +0000
syz-cluster: applied patch under review
diff --git a/net/mac80211/driver-ops.h b/net/mac80211/driver-ops.h
index f1c0b87fddd5f..ecfdb51152f41 100644
--- a/net/mac80211/driver-ops.h
+++ b/net/mac80211/driver-ops.h
@@ -1702,7 +1702,23 @@ static inline int drv_net_setup_tc(struct ieee80211_local *local,
might_sleep();
+ /*
+ * An AP_VLAN interface created without a matching, same-address
+ * AP interface present never gets sdata->bss populated (see the
+ * interface-add validation in iface.c, which links bss only
+ * opportunistically and does not require it). Such an sdata is
+ * not safe to pass through get_bss_sdata(): container_of() on a
+ * NULL sdata->bss yields a small invalid pointer, which the
+ * tracepoint below then dereferences to read the interface name,
+ * causing a crash.
+ */
+ if (sdata->vif.type == NL80211_IFTYPE_AP_VLAN && !sdata->bss)
+ return -EIO;
+
sdata = get_bss_sdata(sdata);
+ if (!check_sdata_in_driver(sdata))
+ return -EIO;
+
trace_drv_net_setup_tc(local, sdata, type);
if (local->ops->net_setup_tc)
ret = local->ops->net_setup_tc(&local->hw, &sdata->vif, dev,
|
| 13/3 | 2026/08/11 21:52 | llm | kmsan-evaluator |
0mModel:gemini-3.1-pro-preview Args: null Results: null Tokens: input: 2224 output: 170 thoughts: 511 Thoughts: **Patch Analysis: Preventing a Null Pointer Dereference** Okay, so looking at this patch, my initial assessment is that it's a straightforward fix for a potentially nasty bug. It seems like we're dealing with a null pointer dereference, or perhaps more accurately, the dreaded `container_of` called on a null pointer, leading to an invalid address access, and ultimately a crash. Specifically, this is happening in `drv_net_setup_tc` within `net/mac80211/driver-ops.h`. The patch introduces two checks: ```c if (sdata->vif.type == NL80211_IFTYPE_AP_VLAN && !sdata->bss) return -EIO; sdata = get_bss_sdata(sdata); if (!check_sdata_in_driver(sdata)) return -EIO; ``` Essentially, these checks are designed to short-circuit the execution path when `sdata->bss` is null, preventing the access that would cause the crash, and also adds a check for `check_sdata_in_driver(sdata)`. The error code `-EIO` seems appropriate here, indicating an I/O error due to the invalid state. I don't see any complex logic or data manipulations here, just control flow to avoid accessing a bad memory location. Reviewing the code again confirms this. It's strictly about preventing the crash, so no uninitialized memory reads are introduced, and there's no risk of information leakage to user space. It is a control flow change to avoid an invalid access. The existing kernel crash handlers and KASAN would have caught this original bug anyway. KMSAN isn't needed here. Therefore, my assessment is that a KMSAN fuzzing session isn't required. I will set NeedsKMSAN=false. |
| 14/3 | 2026/08/11 21:52 | tool | set-results |
0mArgs:{
"KMSANReasoning": "The patch fixes an invalid pointer dereference (resulting from `container_of` on a NULL pointer) in `drv_net_setup_tc` by adding a check for `!sdata-\u003ebss` and returning `-EIO` early. It also adds a check for `check_sdata_in_driver(sdata)`. These changes are purely control flow additions to prevent crashes (invalid memory accesses), which are already caught by standard kernel crash handlers and KASAN. There is no introduction of uninitialized memory usage, info-leaks to user space, or complex data structure allocations that would require KMSAN to detect. Therefore, a dedicated KMSAN fuzzing session is not necessary.",
"NeedsKMSAN": false
}Results: {
"KMSANReasoning": "The patch fixes an invalid pointer dereference (resulting from `container_of` on a NULL pointer) in `drv_net_setup_tc` by adding a check for `!sdata-\u003ebss` and returning `-EIO` early. It also adds a check for `check_sdata_in_driver(sdata)`. These changes are purely control flow additions to prevent crashes (invalid memory accesses), which are already caught by standard kernel crash handlers and KASAN. There is no introduction of uninitialized memory usage, info-leaks to user space, or complex data structure allocations that would require KMSAN to detect. Therefore, a dedicated KMSAN fuzzing session is not necessary.",
"NeedsKMSAN": false
} |
| Total Calls | Total Tokens | Avg Tokens | Total Duration (Seconds) | Avg Duration (Seconds) |
|---|
| Total Calls | Total Duration (Seconds) | Avg Duration (Seconds) |
|---|