| Seq | Timestamp | Type | Name | Duration |
|---|---|---|---|---|
| 0/0 | 2026/08/25 12:22 | flow | patch-triage |
0mArgs:null Results: {
"EnableConfigs": [
"CFG80211",
"USB",
"MWIFIEX",
"MWIFIEX_USB"
],
"FocusSymbols": [
"mwifiex_process_mgmt_packet"
],
"KMSANReasoning": "The patch adds bounds checks to prevent out-of-bounds reads when parsing IEEE 802.11 management packets in `mwifiex_parse_mgmt_packet`. Reading past the packet length (`len`) is an out-of-bounds access, which is reliably detected by KASAN. The patch does not introduce or expose any uninitialized memory usage or info-leaks that would require KMSAN.",
"NeedsKMSAN": false,
"Reasoning": "The patch adds bounds checking to `mwifiex_parse_mgmt_packet` to prevent out-of-bounds reads when parsing management packets. The driver has a USB interface (`MWIFIEX_USB`) which can be fuzzed in a virtualized environment using USB emulation. The function `mwifiex_process_mgmt_packet` is the non-static caller of the modified static function.",
"WorthFuzzing": true
} |
| 1/1 | 2026/08/25 12:22 | action | read-patch-diff |
0mArgs:null Results: {
"PatchDiff": "commit ac4e0544d8042ed53eeb3a0087babc6504c8fb60\nAuthor: syz-cluster \u003ctriage@syzkaller.com\u003e\nDate: Tue Aug 25 12:22:17 2026 +0000\n\n syz-cluster: applied patch under review\n\ndiff --git a/drivers/net/wireless/marvell/mwifiex/util.c b/drivers/net/wireless/marvell/mwifiex/util.c\nindex 7d3631d212236..71305efb77ac5 100644\n--- a/drivers/net/wireless/marvell/mwifiex/util.c\n+++ b/drivers/net/wireless/marvell/mwifiex/util.c\n@@ -317,10 +317,16 @@ mwifiex_parse_mgmt_packet(struct mwifiex_private *priv, u8 *payload, u16 len,\n \n \tswitch (stype) {\n \tcase IEEE80211_STYPE_ACTION:\n-\t\tcategory = *(payload + sizeof(struct ieee80211_hdr));\n+\t\tif (len \u003c sizeof(*ieee_hdr) + 1)\n+\t\t\treturn -1;\n+\n+\t\tcategory = *(payload + sizeof(*ieee_hdr));\n \t\tswitch (category) {\n \t\tcase WLAN_CATEGORY_PUBLIC:\n-\t\t\taction_code = *(payload + sizeof(struct ieee80211_hdr)\n+\t\t\tif (len \u003c sizeof(*ieee_hdr) + 2)\n+\t\t\t\treturn -1;\n+\n+\t\t\taction_code = *(payload + sizeof(*ieee_hdr)\n \t\t\t\t\t+ 1);\n \t\t\tif (action_code == WLAN_PUB_ACTION_TDLS_DISCOVER_RES) {\n \t\t\t\taddr2 = ieee_hdr-\u003eaddr2;\n"
} |
| 2/1 | 2026/08/25 12:22 | agent | patch-evaluator |
0mModel:best-expensive Args: null Results: {
"EnableConfigs": [
"CFG80211",
"USB",
"MWIFIEX",
"MWIFIEX_USB"
],
"FocusSymbols": [
"mwifiex_process_mgmt_packet"
],
"Reasoning": "The patch adds bounds checking to `mwifiex_parse_mgmt_packet` to prevent out-of-bounds reads when parsing management packets. The driver has a USB interface (`MWIFIEX_USB`) which can be fuzzed in a virtualized environment using USB emulation. The function `mwifiex_process_mgmt_packet` is the non-static caller of the modified static function.",
"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 ac4e0544d8042ed53eeb3a0087babc6504c8fb60
Author: syz-cluster <triage@syzkaller.com>
Date: Tue Aug 25 12:22:17 2026 +0000
syz-cluster: applied patch under review
diff --git a/drivers/net/wireless/marvell/mwifiex/util.c b/drivers/net/wireless/marvell/mwifiex/util.c
index 7d3631d212236..71305efb77ac5 100644
--- a/drivers/net/wireless/marvell/mwifiex/util.c
+++ b/drivers/net/wireless/marvell/mwifiex/util.c
@@ -317,10 +317,16 @@ mwifiex_parse_mgmt_packet(struct mwifiex_private *priv, u8 *payload, u16 len,
switch (stype) {
case IEEE80211_STYPE_ACTION:
- category = *(payload + sizeof(struct ieee80211_hdr));
+ if (len < sizeof(*ieee_hdr) + 1)
+ return -1;
+
+ category = *(payload + sizeof(*ieee_hdr));
switch (category) {
case WLAN_CATEGORY_PUBLIC:
- action_code = *(payload + sizeof(struct ieee80211_hdr)
+ if (len < sizeof(*ieee_hdr) + 2)
+ return -1;
+
+ action_code = *(payload + sizeof(*ieee_hdr)
+ 1);
if (action_code == WLAN_PUB_ACTION_TDLS_DISCOVER_RES) {
addr2 = ieee_hdr->addr2;
|
| 3/2 | 2026/08/25 12:22 | llm | patch-evaluator |
0mModel:gemini-3.1-pro-preview Args: null Results: null Tokens: input: 2158 output: 23 thoughts: 143 Thoughts: **Analyzing a Critical Patch in the Marvell WiFi Driver** Okay, so I've got a patch in front of me for `drivers/net/wireless/marvell/mwifiex/util.c`. It's a pretty straightforward fix, thankfully. It looks like they've added bounds checking to `mwifiex_parse_mgmt_packet`. Smart move. Specifically, they're checking if `len` is less than `sizeof(*ieee_hdr) + 1` and `sizeof(*ieee_hdr) + 2` before dereferencing `payload`. That catches those classic off-by-one errors and potential buffer overflows – exactly the kind of thing you want to prevent in a network driver. Now, a key question for me is whether this driver even *matters* in the context I'm typically concerned with. This is a Marvell WiFi-Ex driver, so I need to quickly determine the reach of this. First, I need to understand the deployment context. Is this a USB, SDIO, or PCIe driver? That's going to heavily influence the scope of potential impacts from this fix, and how critical it is. I need to figure out if it is used in a virtualized environment. That will help me identify the extent of vulnerabilities. I'm going to quickly search for `mwifiex_parse_mgmt_packet` and its callers to map out the call graph and get a clearer picture of where this function sits within the driver and understand the attack surface. That'll let me assess the risk and prioritization of this patch. |
| 4/2 | 2026/08/25 12:22 | tool | grepper |
0mArgs:{
"Expression": "mwifiex_parse_mgmt_packet"
}Results: {
"Output": "drivers/net/wireless/marvell/mwifiex/util.c=308=static int\ndrivers/net/wireless/marvell/mwifiex/util.c:309:mwifiex_parse_mgmt_packet(struct mwifiex_private *priv, u8 *payload, u16 len,\ndrivers/net/wireless/marvell/mwifiex/util.c-310-\t\t\t struct rxpd *rx_pd)\n--\ndrivers/net/wireless/marvell/mwifiex/util.c=405=mwifiex_process_mgmt_packet(struct mwifiex_private *priv,\n--\ndrivers/net/wireless/marvell/mwifiex/util.c-434-\tif (ieee80211_is_mgmt(ieee_hdr-\u003eframe_control)) {\ndrivers/net/wireless/marvell/mwifiex/util.c:435:\t\tif (mwifiex_parse_mgmt_packet(priv, (u8 *)ieee_hdr,\ndrivers/net/wireless/marvell/mwifiex/util.c-436-\t\t\t\t\t pkt_len, rx_pd))\n"
} |
| 5/2 | 2026/08/25 12:22 | llm | patch-evaluator |
0mModel:gemini-3.1-pro-preview Args: null Results: null Tokens: input: 2946 output: 23 thoughts: 36 Thoughts: **Tracing the Management Packet Processing** Okay, so I'm diving into this `mwifiex` code, and the starting point is `mwifiex_process_mgmt_packet`. Right, management packets. Now, my first instinct is to understand the context. Where does this crucial function actually get *called* from? I need to trace the call graph to get a handle on the bigger picture of how these packets are handled in this driver. It's the most logical place to start figuring out the control flow. Let's see... back to the debugger or the source code, and find those callsites. |
| 6/2 | 2026/08/25 12:22 | tool | grepper |
0mArgs:{
"Expression": "mwifiex_process_mgmt_packet"
}Results: {
"Output": "drivers/net/wireless/marvell/mwifiex/main.h=1068=void mwifiex_host_mlme_disconnect(struct mwifiex_private *priv,\n--\ndrivers/net/wireless/marvell/mwifiex/main.h-1070-\ndrivers/net/wireless/marvell/mwifiex/main.h:1071:int mwifiex_process_mgmt_packet(struct mwifiex_private *priv,\ndrivers/net/wireless/marvell/mwifiex/main.h-1072-\t\t\t\tstruct sk_buff *skb);\n--\ndrivers/net/wireless/marvell/mwifiex/sta_rx.c=189=int mwifiex_process_sta_rx_packet(struct mwifiex_private *priv,\n--\ndrivers/net/wireless/marvell/mwifiex/sta_rx.c-218-\tif (rx_pkt_type == PKT_TYPE_MGMT) {\ndrivers/net/wireless/marvell/mwifiex/sta_rx.c:219:\t\tret = mwifiex_process_mgmt_packet(priv, skb);\ndrivers/net/wireless/marvell/mwifiex/sta_rx.c-220-\t\tif (ret)\n--\ndrivers/net/wireless/marvell/mwifiex/uap_txrx.c=373=int mwifiex_process_uap_rx_packet(struct mwifiex_private *priv,\n--\ndrivers/net/wireless/marvell/mwifiex/uap_txrx.c-416-\tif (rx_pkt_type == PKT_TYPE_MGMT) {\ndrivers/net/wireless/marvell/mwifiex/uap_txrx.c:417:\t\tret = mwifiex_process_mgmt_packet(priv, skb);\ndrivers/net/wireless/marvell/mwifiex/uap_txrx.c-418-\t\tif (ret)\n--\ndrivers/net/wireless/marvell/mwifiex/util.c=404=int\ndrivers/net/wireless/marvell/mwifiex/util.c:405:mwifiex_process_mgmt_packet(struct mwifiex_private *priv,\ndrivers/net/wireless/marvell/mwifiex/util.c-406-\t\t\t struct sk_buff *skb)\n"
} |
| 7/2 | 2026/08/25 12:22 | llm | patch-evaluator |
0mModel:gemini-3.1-pro-preview Args: null Results: null Tokens: input: 3721 output: 42 thoughts: 80 Thoughts: **Analyzing the mwifiex Driver** Okay, so I'm digging into this code and I see these functions, `mwifiex_process_sta_rx_packet` and `mwifiex_process_uap_rx_packet`, being called. Right, those are definitely part of the `mwifiex` driver. Now, the real question is, is this `mwifiex` driver virtualizable? That's what I really need to figure out. My intuition is that there might be something specific in the Kconfig related to this virtualisation, so let's go check the Kconfig file for that driver. Let's see what `drivers/net/wireless/marvell/mwifiex/Kconfig` has to say about it. |
| 8/2 | 2026/08/25 12:22 | tool | read-file |
0mArgs:{
"File": "drivers/net/wireless/marvell/mwifiex/Kconfig",
"FirstLine": 1,
"LineCount": 100
}Results: {
"Contents": " 1:\t# SPDX-License-Identifier: GPL-2.0-only\n 2:\tconfig MWIFIEX\n 3:\t\ttristate \"Marvell WiFi-Ex Driver\"\n 4:\t\tdepends on CFG80211\n 5:\t\thelp\n 6:\t\t This adds support for wireless adapters based on Marvell\n 7:\t\t 802.11n/ac chipsets.\n 8:\t\n 9:\t\t If you choose to build it as a module, it will be called\n 10:\t\t mwifiex.\n 11:\t\n 12:\tconfig MWIFIEX_SDIO\n 13:\t\ttristate \"Marvell WiFi-Ex Driver for SD8786/SD8787/SD8797/SD8887/SD8897/SD8977/SD8978/SD8987/SD8997\"\n 14:\t\tdepends on MWIFIEX \u0026\u0026 MMC\n 15:\t\tselect FW_LOADER\n 16:\t\tselect WANT_DEV_COREDUMP\n 17:\t\thelp\n 18:\t\t This adds support for wireless adapters based on Marvell\n 19:\t\t 8786/8787/8797/8887/8897/8977/8978/8987/8997 chipsets with\n 20:\t\t SDIO interface. SD8978 is also known as NXP IW416.\n 21:\t\n 22:\t\t If you choose to build it as a module, it will be called\n 23:\t\t mwifiex_sdio.\n 24:\t\n 25:\tconfig MWIFIEX_PCIE\n 26:\t\ttristate \"Marvell WiFi-Ex Driver for PCIE 8766/8897/8997\"\n 27:\t\tdepends on MWIFIEX \u0026\u0026 PCI\n 28:\t\tselect FW_LOADER\n 29:\t\tselect WANT_DEV_COREDUMP\n 30:\t\thelp\n 31:\t\t This adds support for wireless adapters based on Marvell\n 32:\t\t 8766/8897/8997 chipsets with PCIe interface.\n 33:\t\n 34:\t\t If you choose to build it as a module, it will be called\n 35:\t\t mwifiex_pcie.\n 36:\t\n 37:\tconfig MWIFIEX_USB\n 38:\t\ttristate \"Marvell WiFi-Ex Driver for USB8766/8797/8997\"\n 39:\t\tdepends on MWIFIEX \u0026\u0026 USB\n 40:\t\tselect FW_LOADER\n 41:\t\thelp\n 42:\t\t This adds support for wireless adapters based on Marvell\n 43:\t\t 8797/8997 chipset with USB interface.\n 44:\t\n 45:\t\t If you choose to build it as a module, it will be called\n 46:\t\t mwifiex_usb.\n"
} |
| 9/2 | 2026/08/25 12:22 | llm | patch-evaluator |
0mModel:gemini-3.1-pro-preview Args: null Results: null Tokens: input: 4770 output: 24 thoughts: 130 Thoughts: **Analyzing a USB-Connected WiFi Driver Vulnerability** Okay, so I'm looking at this patch for `MWIFIEX_USB`, and my initial thought is, "USB, interesting." That immediately flags a potential attack surface – USB drivers are often reachable in virtualized environments. I can start thinking about fuzzing strategies, specifically dummy HCD or raw-gadget techniques, since that's a common approach. The patch itself focuses on an out-of-bounds read within `mwifiex_parse_mgmt_packet`. That function's name suggests it deals with parsing management frames, which are crucial for WiFi operation. The good news is that it looks like a functional patch; at least it is adding a bounds check. My next step is to drill down into the context. The patch indicates the vulnerability is within the `mwifiex_parse_mgmt_packet` function. It is a static function, that means it is local to the source file where it is defined, which limits how it can be called. That is useful to know. The key question now becomes, where is `mwifiex_parse_mgmt_packet` called? The patch states the caller is `mwifiex_process_mgmt_packet`, so I need to check if that function is also static to complete the picture. This information will help narrow down the attack vectors. |
| 10/2 | 2026/08/25 12:22 | tool | grepper |
0mArgs:{
"Expression": "int mwifiex_process_mgmt_packet"
}Results: {
"Output": "drivers/net/wireless/marvell/mwifiex/main.h=1068=void mwifiex_host_mlme_disconnect(struct mwifiex_private *priv,\n--\ndrivers/net/wireless/marvell/mwifiex/main.h-1070-\ndrivers/net/wireless/marvell/mwifiex/main.h:1071:int mwifiex_process_mgmt_packet(struct mwifiex_private *priv,\ndrivers/net/wireless/marvell/mwifiex/main.h-1072-\t\t\t\tstruct sk_buff *skb);\n"
} |
| 11/2 | 2026/08/25 12:22 | llm | patch-evaluator |
0mModel:gemini-3.1-pro-preview Args: null Results: null Tokens: input: 5364 output: 26 thoughts: 50 Thoughts: Okay, here's my take on those thoughts, framed as an expert's internal monologue: **Investigating Potential Non-Static Function Usage** Alright, so `mwifiex_process_mgmt_packet` isn't static, which is interesting. It opens up some possibilities I need to explore. My next step is to drill down into the related reception functions to see how this non-static characteristic is being leveraged. I'll need to check the interactions within `mwifiex_process_sta_rx_packet` and `mwifiex_process_uap_rx_packet`. I'm guessing there might be some interaction or dependency that clarifies why the function isn't static. It's time to dig in and see what's happening. |
| 12/2 | 2026/08/25 12:22 | tool | grepper |
0mArgs:{
"Expression": "int mwifiex_process_sta_rx_packet"
}Results: {
"Output": "drivers/net/wireless/marvell/mwifiex/main.h=1137=int mwifiex_process_sta_cmdresp(struct mwifiex_private *, u16 cmdresp_no,\ndrivers/net/wireless/marvell/mwifiex/main.h-1138-\t\t\t\tstruct host_cmd_ds_command *resp);\ndrivers/net/wireless/marvell/mwifiex/main.h:1139:int mwifiex_process_sta_rx_packet(struct mwifiex_private *,\ndrivers/net/wireless/marvell/mwifiex/main.h-1140-\t\t\t\t struct sk_buff *skb);\n--\ndrivers/net/wireless/marvell/mwifiex/sta_rx.c=71=int mwifiex_process_rx_packet(struct mwifiex_private *priv,\n--\ndrivers/net/wireless/marvell/mwifiex/sta_rx.c-188- */\ndrivers/net/wireless/marvell/mwifiex/sta_rx.c:189:int mwifiex_process_sta_rx_packet(struct mwifiex_private *priv,\ndrivers/net/wireless/marvell/mwifiex/sta_rx.c-190-\t\t\t\t struct sk_buff *skb)\n"
} |
| 13/2 | 2026/08/25 12:22 | llm | patch-evaluator |
0mModel:gemini-3.1-pro-preview Args: null Results: null Tokens: input: 5927 output: 152 thoughts: 201 Thoughts: **Analyzing the MWIFIEX Management Packet Processing Path** Okay, so I'm honing in on `mwifiex_process_mgmt_packet`. That seems like the central function to be looking at. Just to be thorough, I'll quickly glance at `mwifiex_parse_mgmt_packet` since it's statically linked. But `mwifiex_process_mgmt_packet` still feels like the core. Now, let's think about the configuration requirements. Clearly, we need `MWIFIEX` and `MWIFIEX_USB`. Just to be safe, I'll quickly check the dependencies of `MWIFIEX_USB` to make sure there are no surprises. Alright, `MWIFIEX` itself depends on `CFG80211`. And `MWIFIEX_USB` depends on both `MWIFIEX` and `USB`. So, the critical configurations are `CFG80211`, `USB`, `MWIFIEX`, and `MWIFIEX_USB`. I also have to keep in mind that `MAC80211` is frequently involved with WiFi, but I see that `MWIFIEX` doesn't directly depend on it, only `CFG80211`. I'll keep digging to see if there are any other relevant configurations that I might have missed. |
| 14/2 | 2026/08/25 12:22 | tool | set-results |
0mArgs:{
"EnableConfigs": [
"CFG80211",
"USB",
"MWIFIEX",
"MWIFIEX_USB"
],
"FocusSymbols": [
"mwifiex_process_mgmt_packet"
],
"Reasoning": "The patch adds bounds checking to `mwifiex_parse_mgmt_packet` to prevent out-of-bounds reads when parsing management packets. The driver has a USB interface (`MWIFIEX_USB`) which can be fuzzed in a virtualized environment using USB emulation. The function `mwifiex_process_mgmt_packet` is the non-static caller of the modified static function.",
"WorthFuzzing": true
}Results: {
"EnableConfigs": [
"CFG80211",
"USB",
"MWIFIEX",
"MWIFIEX_USB"
],
"FocusSymbols": [
"mwifiex_process_mgmt_packet"
],
"Reasoning": "The patch adds bounds checking to `mwifiex_parse_mgmt_packet` to prevent out-of-bounds reads when parsing management packets. The driver has a USB interface (`MWIFIEX_USB`) which can be fuzzed in a virtualized environment using USB emulation. The function `mwifiex_process_mgmt_packet` is the non-static caller of the modified static function.",
"WorthFuzzing": true
} |
| 15/1 | 2026/08/25 12:22 | action | If |
0mArgs:{
"WorthFuzzing": true
}Results: null |
| 16/2 | 2026/08/25 12:22 | agent | kmsan-evaluator |
0mModel:best-expensive Args: null Results: {
"KMSANReasoning": "The patch adds bounds checks to prevent out-of-bounds reads when parsing IEEE 802.11 management packets in `mwifiex_parse_mgmt_packet`. Reading past the packet length (`len`) is an out-of-bounds access, which is reliably detected by KASAN. The patch does not introduce or expose any uninitialized memory usage or info-leaks that would require KMSAN.",
"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 ac4e0544d8042ed53eeb3a0087babc6504c8fb60
Author: syz-cluster <triage@syzkaller.com>
Date: Tue Aug 25 12:22:17 2026 +0000
syz-cluster: applied patch under review
diff --git a/drivers/net/wireless/marvell/mwifiex/util.c b/drivers/net/wireless/marvell/mwifiex/util.c
index 7d3631d212236..71305efb77ac5 100644
--- a/drivers/net/wireless/marvell/mwifiex/util.c
+++ b/drivers/net/wireless/marvell/mwifiex/util.c
@@ -317,10 +317,16 @@ mwifiex_parse_mgmt_packet(struct mwifiex_private *priv, u8 *payload, u16 len,
switch (stype) {
case IEEE80211_STYPE_ACTION:
- category = *(payload + sizeof(struct ieee80211_hdr));
+ if (len < sizeof(*ieee_hdr) + 1)
+ return -1;
+
+ category = *(payload + sizeof(*ieee_hdr));
switch (category) {
case WLAN_CATEGORY_PUBLIC:
- action_code = *(payload + sizeof(struct ieee80211_hdr)
+ if (len < sizeof(*ieee_hdr) + 2)
+ return -1;
+
+ action_code = *(payload + sizeof(*ieee_hdr)
+ 1);
if (action_code == WLAN_PUB_ACTION_TDLS_DISCOVER_RES) {
addr2 = ieee_hdr->addr2;
|
| 17/3 | 2026/08/25 12:22 | llm | kmsan-evaluator |
0mModel:gemini-3.1-pro-preview Args: null Results: null Tokens: input: 2155 output: 42 thoughts: 479 Thoughts: **Analyzing the Mitigation for a Potential Out-of-Bounds Read** Okay, so I'm looking at this patch for `mwifiex_parse_mgmt_packet`. It seems pretty straightforward; it's adding bounds checks within the code that's parsing an IEEE 802.11 management packet. The specific change involves checking the length of the packet (`len`) before accessing `category` and `action_code` within the `payload`. Clearly, this is to prevent an out-of-bounds read, and it makes perfect sense. These kinds of bugs are the bread and butter of memory safety issues. Now, my initial thought is that KASAN (Kernel Address Sanitizer) should catch these out-of-bounds reads. KMSAN (Kernel Memory Sanitizer), on the other hand, is generally for uninitialized memory issues. We're talking about a situation where the code is attempting to read beyond the actual allocated size of the packet data in the `payload` buffer, so it's most likely an out-of-bounds read if the packet is shorter than expected. But wait a minute, if the allocated buffer for the packet *is* larger than the actual packet data, then reading past the `len` within the buffer *would* actually be reading uninitialized memory. That's a point. Thinking about it, the length variable `len` refers to the length of the *payload*. In that case, reading beyond len, if the buffer allocated is larger than the actual packet size, could actually be an uninitialized read, depending on the specifics. However, from an operating systems perspective, most of these network protocols will put the packet in an skb (Socket Buffer). This could mean reading past `skb->len`. If the read goes beyond the data buffer in the skb, then it is indeed an out-of-bounds read. If the data is within the bounds of the skb data buffer, but beyond `len`, then we're back in the uninitialized memory territory. Regardless, these issues would usually be caught by KASAN. It's time to take a look at the rest of `mwifiex_parse_mgmt_packet` to confirm. |
| 18/3 | 2026/08/25 12:23 | tool | grepper |
0mArgs:{
"Expression": "mwifiex_parse_mgmt_packet",
"PathPrefix": "drivers/net/wireless/marvell/mwifiex/"
}Results: {
"Output": "drivers/net/wireless/marvell/mwifiex/util.c=308=static int\ndrivers/net/wireless/marvell/mwifiex/util.c:309:mwifiex_parse_mgmt_packet(struct mwifiex_private *priv, u8 *payload, u16 len,\ndrivers/net/wireless/marvell/mwifiex/util.c-310-\t\t\t struct rxpd *rx_pd)\n--\ndrivers/net/wireless/marvell/mwifiex/util.c=405=mwifiex_process_mgmt_packet(struct mwifiex_private *priv,\n--\ndrivers/net/wireless/marvell/mwifiex/util.c-434-\tif (ieee80211_is_mgmt(ieee_hdr-\u003eframe_control)) {\ndrivers/net/wireless/marvell/mwifiex/util.c:435:\t\tif (mwifiex_parse_mgmt_packet(priv, (u8 *)ieee_hdr,\ndrivers/net/wireless/marvell/mwifiex/util.c-436-\t\t\t\t\t pkt_len, rx_pd))\n"
} |
| 19/3 | 2026/08/25 12:23 | llm | kmsan-evaluator |
0mModel:gemini-3.1-pro-preview Args: null Results: null Tokens: input: 3428 output: 112 thoughts: 120 Thoughts: **Analyzing the Code and the Fix** Okay, so I'm looking at this patch, and it looks like a classic out-of-bounds read vulnerability. The core issue revolves around this `ieee_hdr` structure and how the code is accessing the payload. Specifically, the vulnerability arises when the length of the packet, `pkt_len`, is smaller than the size of the header structure, `sizeof(*ieee_hdr)`, *plus* an additional byte. The code attempts to read from `payload + sizeof(*ieee_hdr)`, which, when `pkt_len` is insufficient, steps outside the allocated buffer and causes the read to go out of bounds. My initial thought is that this is a straightforward case. KASAN is the right tool to catch this type of memory access violation. It's designed specifically for detecting out-of-bounds reads and writes. KMSAN, on the other hand, is for uninitialized memory issues. Since this is an out-of-bounds issue, rather than an uninitialized memory problem, the `NeedsKMSAN` flag is correctly set to false. This reinforces my assessment; the fix is appropriate and the debugging tools are correctly selected. |
| 20/3 | 2026/08/25 12:23 | tool | set-results |
0mArgs:{
"KMSANReasoning": "The patch adds bounds checks to prevent out-of-bounds reads when parsing IEEE 802.11 management packets in `mwifiex_parse_mgmt_packet`. Reading past the packet length (`len`) is an out-of-bounds access, which is reliably detected by KASAN. The patch does not introduce or expose any uninitialized memory usage or info-leaks that would require KMSAN.",
"NeedsKMSAN": false
}Results: {
"KMSANReasoning": "The patch adds bounds checks to prevent out-of-bounds reads when parsing IEEE 802.11 management packets in `mwifiex_parse_mgmt_packet`. Reading past the packet length (`len`) is an out-of-bounds access, which is reliably detected by KASAN. The patch does not introduce or expose any uninitialized memory usage or info-leaks that would require KMSAN.",
"NeedsKMSAN": false
} |
| Total Calls | Total Tokens | Avg Tokens | Total Duration (Seconds) | Avg Duration (Seconds) |
|---|
| Total Calls | Total Duration (Seconds) | Avg Duration (Seconds) |
|---|