| Seq | Timestamp | Type | Name | Duration |
|---|---|---|---|---|
| 0/0 | 2026/08/07 07:49 | flow | patch-triage |
0mArgs:null Results: {
"EnableConfigs": null,
"FocusSymbols": [],
"Reasoning": "The patch modifies the Airoha NPU driver, which is a hardware-specific SoC driver. This hardware is not emulated in standard virtualized environments like QEMU, making the code paths unreachable during fuzzing.",
"WorthFuzzing": false
} |
| 1/1 | 2026/08/07 07:49 | action | read-patch-diff |
0mArgs:null Results: {
"PatchDiff": "commit b7dcb47954130908cafbc39102adfa086097b3cf\nAuthor: syz-cluster \u003ctriage@syzkaller.com\u003e\nDate: Fri Aug 7 07:49:42 2026 +0000\n\n syz-cluster: applied patch under review\n\ndiff --git a/drivers/net/ethernet/airoha/airoha_npu.c b/drivers/net/ethernet/airoha/airoha_npu.c\nindex b679bed952de3..74da3c4d06e4d 100644\n--- a/drivers/net/ethernet/airoha/airoha_npu.c\n+++ b/drivers/net/ethernet/airoha/airoha_npu.c\n@@ -23,6 +23,12 @@\n #define NPU_EN7581_FIRMWARE_RV32_MAX_SIZE\t0x200000\n #define NPU_EN7581_FIRMWARE_DATA_MAX_SIZE\t0x10000\n #define NPU_DUMP_SIZE\t\t\t\t512\n+/*\n+ * Mailbox DMA payload size. Covers sizeof(struct ppe_mbox_data) (28) and\n+ * WLAN TLV messages (header + payload); largest in-tree WLAN payload today\n+ * is 16 bytes (INODE_TXRX_REG_ADDR). Keep headroom for future commands.\n+ */\n+#define AIROHA_NPU_MBOX_SIZE\t\t\t256\n \n #define REG_NPU_LOCAL_SRAM\t\t0x0\n \n@@ -160,23 +166,32 @@ struct wlan_mbox_data {\n \tDECLARE_FLEX_ARRAY(u8, d);\n };\n \n-static int airoha_npu_send_msg(struct airoha_npu *npu, int func_id,\n-\t\t\t void *p, int size)\n+static int __airoha_npu_send_msg(struct airoha_npu *npu, int func_id,\n+\t\t\t\t const void *data, int len, void *reply,\n+\t\t\t\t int reply_len)\n {\n-\tu16 core = 0; /* FIXME */\n-\tu32 val, offset = core \u003c\u003c 4;\n-\tdma_addr_t dma_addr;\n+\tstruct airoha_npu_core *c = \u0026npu-\u003ecores[0]; /* FIXME: core */\n+\tu32 val, offset = 0;\n \tint ret;\n \n-\tdma_addr = dma_map_single(npu-\u003edev, p, size, DMA_BIDIRECTIONAL);\n-\tret = dma_mapping_error(npu-\u003edev, dma_addr);\n-\tif (ret)\n-\t\treturn ret;\n+\tif (len \u003e AIROHA_NPU_MBOX_SIZE ||\n+\t (reply \u0026\u0026 (reply_len \u003c 0 || reply_len \u003e len)))\n+\t\treturn -EINVAL;\n \n-\tspin_lock_bh(\u0026npu-\u003ecores[core].lock);\n+\t/*\n+\t * Mailbox payloads are bidirectional (CPU request, NPU response).\n+\t * On EN7581+MT7996, streaming DMA_BIDIRECTIONAL against the\n+\t * caller kzalloc() buffer can leave WLAN_FUNC_GET_WAIT_NPU_VERSION\n+\t * reading as 0.0 despite MBOX success. Reuse a probe-time coherent\n+\t * bounce buffer under the per-core lock (also used from PPE\n+\t * foe_commit under atomic context).\n+\t */\n+\tspin_lock_bh(\u0026c-\u003elock);\n+\n+\tmemcpy(c-\u003ebuf, data, len);\n \n-\tregmap_write(npu-\u003eregmap, REG_CR_MBQ0_CTRL(0) + offset, dma_addr);\n-\tregmap_write(npu-\u003eregmap, REG_CR_MBQ0_CTRL(1) + offset, size);\n+\tregmap_write(npu-\u003eregmap, REG_CR_MBQ0_CTRL(0) + offset, c-\u003eaddr);\n+\tregmap_write(npu-\u003eregmap, REG_CR_MBQ0_CTRL(1) + offset, len);\n \tregmap_read(npu-\u003eregmap, REG_CR_MBQ0_CTRL(2) + offset, \u0026val);\n \tregmap_write(npu-\u003eregmap, REG_CR_MBQ0_CTRL(2) + offset, val + 1);\n \tval = FIELD_PREP(MBOX_MSG_FUNC_ID, func_id) | MBOX_MSG_WAIT_RSP;\n@@ -189,13 +204,21 @@ static int airoha_npu_send_msg(struct airoha_npu *npu, int func_id,\n \tif (!ret \u0026\u0026 FIELD_GET(MBOX_MSG_STATUS, val) != NPU_MBOX_SUCCESS)\n \t\tret = -EINVAL;\n \n-\tspin_unlock_bh(\u0026npu-\u003ecores[core].lock);\n+\t/* Copy the trailing reply_len bytes of the response. */\n+\tif (!ret \u0026\u0026 reply)\n+\t\tmemcpy(reply, c-\u003ebuf + len - reply_len, reply_len);\n \n-\tdma_unmap_single(npu-\u003edev, dma_addr, size, DMA_BIDIRECTIONAL);\n+\tspin_unlock_bh(\u0026c-\u003elock);\n \n \treturn ret;\n }\n \n+static inline int airoha_npu_send_msg(struct airoha_npu *npu, int func_id,\n+\t\t\t\t const void *data, int len)\n+{\n+\treturn __airoha_npu_send_msg(npu, func_id, data, len, NULL, 0);\n+}\n+\n static int airoha_npu_load_firmware(struct device *dev, void __iomem *addr,\n \t\t\t\t const char *fw_name, int fw_max_size)\n {\n@@ -442,8 +465,9 @@ static int airoha_npu_ppe_stats_setup(struct airoha_npu *npu,\n \tppe_data-\u003efunc_id = PPE_FUNC_SET_WAIT_FLOW_STATS_SETUP;\n \tppe_data-\u003estats_info.foe_stats_addr = foe_stats_addr;\n \n-\terr = airoha_npu_send_msg(npu, NPU_FUNC_PPE, ppe_data,\n-\t\t\t\t sizeof(*ppe_data));\n+\terr = __airoha_npu_send_msg(npu, NPU_FUNC_PPE, ppe_data,\n+\t\t\t\t sizeof(*ppe_data), ppe_data,\n+\t\t\t\t sizeof(*ppe_data));\n \tif (err)\n \t\tgoto out;\n \n@@ -497,9 +521,8 @@ static int airoha_npu_wlan_msg_get(struct airoha_npu *npu, int ifindex,\n \twlan_data-\u003efunc_type = NPU_OP_GET;\n \twlan_data-\u003efunc_id = func_id;\n \n-\terr = airoha_npu_send_msg(npu, NPU_FUNC_WIFI, wlan_data, len);\n-\tif (!err)\n-\t\tmemcpy(data, wlan_data-\u003ed, data_len);\n+\terr = __airoha_npu_send_msg(npu, NPU_FUNC_WIFI, wlan_data, len,\n+\t\t\t\t data, data_len);\n \tkfree(wlan_data);\n \n \treturn err;\n@@ -770,6 +793,15 @@ static int airoha_npu_probe(struct platform_device *pdev)\n \tif (err)\n \t\treturn err;\n \n+\tfor (i = 0; i \u003c ARRAY_SIZE(npu-\u003ecores); i++) {\n+\t\tstruct airoha_npu_core *core = \u0026npu-\u003ecores[i];\n+\n+\t\tcore-\u003ebuf = dmam_alloc_coherent(dev, AIROHA_NPU_MBOX_SIZE,\n+\t\t\t\t\t\t\u0026core-\u003eaddr, GFP_KERNEL);\n+\t\tif (!core-\u003ebuf)\n+\t\t\treturn -ENOMEM;\n+\t}\n+\n \terr = airoha_npu_run_firmware(dev, base, \u0026res);\n \tif (err)\n \t\treturn dev_err_probe(dev, err, \"failed to run npu firmware\\n\");\ndiff --git a/include/linux/soc/airoha/airoha_offload.h b/include/linux/soc/airoha/airoha_offload.h\nindex 7589fccfeef6d..16a988ad7467c 100644\n--- a/include/linux/soc/airoha/airoha_offload.h\n+++ b/include/linux/soc/airoha/airoha_offload.h\n@@ -173,6 +173,9 @@ struct airoha_npu {\n \t\t/* protect concurrent npu memory accesses */\n \t\tspinlock_t lock;\n \t\tstruct work_struct wdt_work;\n+\t\t/* Coherent bounce buffer for mailbox cmd/rsp */\n+\t\tvoid *buf;\n+\t\tdma_addr_t addr;\n \t} cores[NPU_NUM_CORES];\n \n \tint irqs[NPU_NUM_IRQ];\n"
} |
| 2/1 | 2026/08/07 07:49 | agent | patch-evaluator |
0mModel:best-expensive Args: null Results: {
"EnableConfigs": null,
"FocusSymbols": [],
"Reasoning": "The patch modifies the Airoha NPU driver, which is a hardware-specific SoC driver. This hardware is not emulated in standard virtualized environments like QEMU, making the code paths unreachable during fuzzing.",
"WorthFuzzing": false
}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 b7dcb47954130908cafbc39102adfa086097b3cf
Author: syz-cluster <triage@syzkaller.com>
Date: Fri Aug 7 07:49:42 2026 +0000
syz-cluster: applied patch under review
diff --git a/drivers/net/ethernet/airoha/airoha_npu.c b/drivers/net/ethernet/airoha/airoha_npu.c
index b679bed952de3..74da3c4d06e4d 100644
--- a/drivers/net/ethernet/airoha/airoha_npu.c
+++ b/drivers/net/ethernet/airoha/airoha_npu.c
@@ -23,6 +23,12 @@
#define NPU_EN7581_FIRMWARE_RV32_MAX_SIZE 0x200000
#define NPU_EN7581_FIRMWARE_DATA_MAX_SIZE 0x10000
#define NPU_DUMP_SIZE 512
+/*
+ * Mailbox DMA payload size. Covers sizeof(struct ppe_mbox_data) (28) and
+ * WLAN TLV messages (header + payload); largest in-tree WLAN payload today
+ * is 16 bytes (INODE_TXRX_REG_ADDR). Keep headroom for future commands.
+ */
+#define AIROHA_NPU_MBOX_SIZE 256
#define REG_NPU_LOCAL_SRAM 0x0
@@ -160,23 +166,32 @@ struct wlan_mbox_data {
DECLARE_FLEX_ARRAY(u8, d);
};
-static int airoha_npu_send_msg(struct airoha_npu *npu, int func_id,
- void *p, int size)
+static int __airoha_npu_send_msg(struct airoha_npu *npu, int func_id,
+ const void *data, int len, void *reply,
+ int reply_len)
{
- u16 core = 0; /* FIXME */
- u32 val, offset = core << 4;
- dma_addr_t dma_addr;
+ struct airoha_npu_core *c = &npu->cores[0]; /* FIXME: core */
+ u32 val, offset = 0;
int ret;
- dma_addr = dma_map_single(npu->dev, p, size, DMA_BIDIRECTIONAL);
- ret = dma_mapping_error(npu->dev, dma_addr);
- if (ret)
- return ret;
+ if (len > AIROHA_NPU_MBOX_SIZE ||
+ (reply && (reply_len < 0 || reply_len > len)))
+ return -EINVAL;
- spin_lock_bh(&npu->cores[core].lock);
+ /*
+ * Mailbox payloads are bidirectional (CPU request, NPU response).
+ * On EN7581+MT7996, streaming DMA_BIDIRECTIONAL against the
+ * caller kzalloc() buffer can leave WLAN_FUNC_GET_WAIT_NPU_VERSION
+ * reading as 0.0 despite MBOX success. Reuse a probe-time coherent
+ * bounce buffer under the per-core lock (also used from PPE
+ * foe_commit under atomic context).
+ */
+ spin_lock_bh(&c->lock);
+
+ memcpy(c->buf, data, len);
- regmap_write(npu->regmap, REG_CR_MBQ0_CTRL(0) + offset, dma_addr);
- regmap_write(npu->regmap, REG_CR_MBQ0_CTRL(1) + offset, size);
+ regmap_write(npu->regmap, REG_CR_MBQ0_CTRL(0) + offset, c->addr);
+ regmap_write(npu->regmap, REG_CR_MBQ0_CTRL(1) + offset, len);
regmap_read(npu->regmap, REG_CR_MBQ0_CTRL(2) + offset, &val);
regmap_write(npu->regmap, REG_CR_MBQ0_CTRL(2) + offset, val + 1);
val = FIELD_PREP(MBOX_MSG_FUNC_ID, func_id) | MBOX_MSG_WAIT_RSP;
@@ -189,13 +204,21 @@ static int airoha_npu_send_msg(struct airoha_npu *npu, int func_id,
if (!ret && FIELD_GET(MBOX_MSG_STATUS, val) != NPU_MBOX_SUCCESS)
ret = -EINVAL;
- spin_unlock_bh(&npu->cores[core].lock);
+ /* Copy the trailing reply_len bytes of the response. */
+ if (!ret && reply)
+ memcpy(reply, c->buf + len - reply_len, reply_len);
- dma_unmap_single(npu->dev, dma_addr, size, DMA_BIDIRECTIONAL);
+ spin_unlock_bh(&c->lock);
return ret;
}
+static inline int airoha_npu_send_msg(struct airoha_npu *npu, int func_id,
+ const void *data, int len)
+{
+ return __airoha_npu_send_msg(npu, func_id, data, len, NULL, 0);
+}
+
static int airoha_npu_load_firmware(struct device *dev, void __iomem *addr,
const char *fw_name, int fw_max_size)
{
@@ -442,8 +465,9 @@ static int airoha_npu_ppe_stats_setup(struct airoha_npu *npu,
ppe_data->func_id = PPE_FUNC_SET_WAIT_FLOW_STATS_SETUP;
ppe_data->stats_info.foe_stats_addr = foe_stats_addr;
- err = airoha_npu_send_msg(npu, NPU_FUNC_PPE, ppe_data,
- sizeof(*ppe_data));
+ err = __airoha_npu_send_msg(npu, NPU_FUNC_PPE, ppe_data,
+ sizeof(*ppe_data), ppe_data,
+ sizeof(*ppe_data));
if (err)
goto out;
@@ -497,9 +521,8 @@ static int airoha_npu_wlan_msg_get(struct airoha_npu *npu, int ifindex,
wlan_data->func_type = NPU_OP_GET;
wlan_data->func_id = func_id;
- err = airoha_npu_send_msg(npu, NPU_FUNC_WIFI, wlan_data, len);
- if (!err)
- memcpy(data, wlan_data->d, data_len);
+ err = __airoha_npu_send_msg(npu, NPU_FUNC_WIFI, wlan_data, len,
+ data, data_len);
kfree(wlan_data);
return err;
@@ -770,6 +793,15 @@ static int airoha_npu_probe(struct platform_device *pdev)
if (err)
return err;
+ for (i = 0; i < ARRAY_SIZE(npu->cores); i++) {
+ struct airoha_npu_core *core = &npu->cores[i];
+
+ core->buf = dmam_alloc_coherent(dev, AIROHA_NPU_MBOX_SIZE,
+ &core->addr, GFP_KERNEL);
+ if (!core->buf)
+ return -ENOMEM;
+ }
+
err = airoha_npu_run_firmware(dev, base, &res);
if (err)
return dev_err_probe(dev, err, "failed to run npu firmware\n");
diff --git a/include/linux/soc/airoha/airoha_offload.h b/include/linux/soc/airoha/airoha_offload.h
index 7589fccfeef6d..16a988ad7467c 100644
--- a/include/linux/soc/airoha/airoha_offload.h
+++ b/include/linux/soc/airoha/airoha_offload.h
@@ -173,6 +173,9 @@ struct airoha_npu {
/* protect concurrent npu memory accesses */
spinlock_t lock;
struct work_struct wdt_work;
+ /* Coherent bounce buffer for mailbox cmd/rsp */
+ void *buf;
+ dma_addr_t addr;
} cores[NPU_NUM_CORES];
int irqs[NPU_NUM_IRQ];
|
| 3/2 | 2026/08/07 07:49 | llm | patch-evaluator |
0mModel:gemini-3.1-pro-preview Args: null Results: null Tokens: input: 4100 output: 40 thoughts: 278 Thoughts: **Analyzing the Potential Impact of a Kernel Patch** Okay, so I need to figure out if this patch introduces changes that warrant fuzzing. The patch touches `drivers/net/ethernet/airoha/airoha_npu.c`. That’s where things get interesting, it's modifying how mailbox messages are sent to the Network Processing Unit (NPU). Essentially, it's moving from the standard `dma_map_single` / `dma_unmap_single` approach for each message to using a pre-allocated coherent DMA buffer. That's a significant shift in memory management. They've introduced `__airoha_npu_send_msg`, which now takes a `reply` buffer and its length. And the coherent buffer itself is allocated during the `airoha_npu_probe` function. Now the question is, how reachable is this code in my testing environments? Could this be activated in virtualized environments, like Google Compute Engine or QEMU? Let's see... the driver is within the networking ethernet drivers, so I need to understand its nature. Ah, it's an ethernet driver for Airoha SoCs. Wait, Airoha is a MediaTek subsidiary, right? They make networking SoCs. This likely means it's targeting physical hardware, not something commonly emulated in standard QEMU. Let's dig deeper. Yes, it's for the Airoha EN7581 SoC - a hardware device. I need to consult the `Kconfig` or similar files under `drivers/net/ethernet/airoha/` to determine the exact hardware supported. |
| 4/2 | 2026/08/07 07:49 | tool | grepper |
0mArgs:{
"Expression": "config NET_VENDOR_AIROHA",
"PathPrefix": "drivers/net/ethernet/airoha/Kconfig"
}Results: {
"Output": "drivers/net/ethernet/airoha/Kconfig-1-# SPDX-License-Identifier: GPL-2.0-only\ndrivers/net/ethernet/airoha/Kconfig:2:config NET_VENDOR_AIROHA\ndrivers/net/ethernet/airoha/Kconfig-3-\tbool \"Airoha devices\"\n"
} |
| 5/2 | 2026/08/07 07:49 | llm | patch-evaluator |
0mModel:gemini-3.1-pro-preview Args: null Results: null Tokens: input: 4855 output: 44 thoughts: 23 Thoughts: Here's my thought process, as it went: **Examining the Airoha Ethernet Driver Configuration** Okay, so I need to find the specific configuration options for the Airoha Ethernet driver. My immediate thought is to check the `drivers/net/ethernet/airoha/Kconfig` file. That's the standard location in a typical kernel source tree for these types of driver configurations. Kconfig files define the build options, dependencies, and help text that users see when configuring the kernel, so this is definitely the place to start. I'm going to look in that file to see exactly what parameters I need to consider for this Airoha-based ethernet interface. |
| 6/2 | 2026/08/07 07:49 | tool | grepper |
0mError:no matches Args: {
"Expression": "config AIROHA_EN7581_ETH",
"PathPrefix": "drivers/net/ethernet/airoha/Kconfig"
}Results: {
"error": "no matches"
} |
| 7/2 | 2026/08/07 07:49 | llm | patch-evaluator |
0mModel:gemini-3.1-pro-preview Args: null Results: null Tokens: input: 5080 output: 39 thoughts: 10 Thoughts: Here's my attempt at summarizing the thought process, tailored for an expert audience: **Analyzing the Configuration Landscape** Okay, so the immediate approach here is pretty clear: I need to dive straight into the Kconfig file. No need for any preliminary fluff or extraneous investigation. My expertise is such that I can likely glean a significant amount of information just by quickly parsing the structure and content of this configuration file. I'm looking for the core elements, the dependencies, and the overall logic that drives the build and configuration system. This is where the truth lies, the source of the build-time knowledge. |
| 8/2 | 2026/08/07 07:49 | tool | read-file |
0mArgs:{
"File": "drivers/net/ethernet/airoha/Kconfig",
"FirstLine": 1,
"LineCount": 100
}Results: {
"Contents": " 1:\t# SPDX-License-Identifier: GPL-2.0-only\n 2:\tconfig NET_VENDOR_AIROHA\n 3:\t\tbool \"Airoha devices\"\n 4:\t\tdepends on ARCH_AIROHA || COMPILE_TEST\n 5:\t\thelp\n 6:\t\t If you have a Airoha SoC with ethernet, say Y.\n 7:\t\n 8:\tif NET_VENDOR_AIROHA\n 9:\t\n 10:\tconfig NET_AIROHA_NPU\n 11:\t\ttristate \"Airoha NPU support\"\n 12:\t\tselect WANT_DEV_COREDUMP\n 13:\t\tselect REGMAP_MMIO\n 14:\t\thelp\n 15:\t\t This driver supports Airoha Network Processor (NPU) available\n 16:\t\t on the Airoha Soc family.\n 17:\t\n 18:\tconfig NET_AIROHA\n 19:\t\ttristate \"Airoha SoC Gigabit Ethernet support\"\n 20:\t\tdepends on NET_DSA || !NET_DSA\n 21:\t\tselect NET_AIROHA_NPU\n 22:\t\tselect PAGE_POOL\n 23:\t\thelp\n 24:\t\t This driver supports the gigabit ethernet MACs in the\n 25:\t\t Airoha SoC family.\n 26:\t\n 27:\tconfig NET_AIROHA_FLOW_STATS\n 28:\t\tdefault y\n 29:\t\tbool \"Airoha flow stats\"\n 30:\t\tdepends on NET_AIROHA \u0026\u0026 NET_AIROHA_NPU\n 31:\t\thelp\n 32:\t\t Enable Airoha flowtable statistic counters.\n 33:\t\n 34:\tendif #NET_VENDOR_AIROHA\n"
} |
| 9/2 | 2026/08/07 07:49 | llm | patch-evaluator |
0mModel:gemini-3.1-pro-preview Args: null Results: null Tokens: input: 5704 output: 44 thoughts: 174 Thoughts: **Analyzing the WorthFuzzing Criteria** Okay, let's break this down. This patch involves a driver for an Airoha SoC Gigabit Ethernet component. My initial thought is to figure out if the hardware this driver interfaces with is emulated within QEMU. Nope, it's an SoC-specific component, specifically the Network Processor Unit (NPU). The prompt's criterion gives me a pretty clear no-go on "vendor-specific PCIe switch, SmartNIC, or GPU drivers" that demand physical PCIe cards not emulated in QEMU. Hmm, but hold on – this is an *SoC* driver, not a PCIe card driver per se. However, it *does* still rely on the underlying Airoha SoC hardware, which isn't emulated in a standard QEMU setup. It's essentially the same constraint, just a different bus. The question then becomes: can this hardware even be probed or accessed within a virtualized environment at all, even without being fully emulated? I need to dig into the driver's probing mechanisms to get a solid answer. |
| 10/2 | 2026/08/07 07:50 | tool | grepper |
0mArgs:{
"Expression": "airoha_npu_probe",
"PathPrefix": "drivers/net/ethernet/airoha/airoha_npu.c"
}Results: {
"Output": "drivers/net/ethernet/airoha/airoha_npu.c=708=static const struct regmap_config regmap_config = {\n--\ndrivers/net/ethernet/airoha/airoha_npu.c-715-\ndrivers/net/ethernet/airoha/airoha_npu.c:716:static int airoha_npu_probe(struct platform_device *pdev)\ndrivers/net/ethernet/airoha/airoha_npu.c-717-{\n--\ndrivers/net/ethernet/airoha/airoha_npu.c=845=static struct platform_driver airoha_npu_driver = {\ndrivers/net/ethernet/airoha/airoha_npu.c:846:\t.probe = airoha_npu_probe,\ndrivers/net/ethernet/airoha/airoha_npu.c-847-\t.remove = airoha_npu_remove,\n"
} |
| 11/2 | 2026/08/07 07:50 | llm | patch-evaluator |
0mModel:gemini-3.1-pro-preview Args: null Results: null Tokens: input: 6404 output: 76 thoughts: 360 Thoughts: **Analyzing the Fuzzing Potential of This Patch** Okay, so this looks like a platform driver, which immediately makes me think Device Tree. Unless there's a software interface to instantiate it, it's going to be tricky to get at in standard QEMU – especially since syzkaller doesn't use those specific machine types. Wait, can syzkaller inject platform devices, maybe using `syz_dev_create`? Hmm, no, not easily. It's really hard to instantiate arbitrary platform devices unless they're specifically supported or generic. This driver also seems to be interacting directly with hardware registers using things like `regmap_write` and `regmap_read`, and it's expecting certain hardware behaviors, like that `MBOX_MSG_STATUS` thing. If the hardware isn't present, it's almost certainly going to fail quickly during the probe or timeout somewhere. The prompt specifically mentions "code paths that are impossible to reach in virtualized environments like GCE or QEMU," even with software-emulated hardware. That's a huge clue. This is an Airoha NPU driver, which screams hardware-specific SoC driver. Definitely not reachable in standard QEMU. Let me double-check for any software emulation of Airoha NPUs... Nope, nothing. So, given all this, it's pretty clear: this patch isn't worth fuzzing. I'm going to mark it as `WorthFuzzing=false`. The rationale is that it's a hardware-specific SoC driver (Airoha NPU) that can't be reached in standard virtualized environments like QEMU. |
| 12/2 | 2026/08/07 07:50 | tool | set-results |
0mArgs:{
"EnableConfigs": [],
"FocusSymbols": [],
"Reasoning": "The patch modifies the Airoha NPU driver, which is a hardware-specific SoC driver. This hardware is not emulated in standard virtualized environments like QEMU, making the code paths unreachable during fuzzing.",
"WorthFuzzing": false
}Results: {
"EnableConfigs": null,
"FocusSymbols": [],
"Reasoning": "The patch modifies the Airoha NPU driver, which is a hardware-specific SoC driver. This hardware is not emulated in standard virtualized environments like QEMU, making the code paths unreachable during fuzzing.",
"WorthFuzzing": false
} |
| Total Calls | Total Tokens | Avg Tokens | Total Duration (Seconds) | Avg Duration (Seconds) |
|---|
| Total Calls | Total Duration (Seconds) | Avg Duration (Seconds) |
|---|