| Seq | Timestamp | Type | Name | Duration |
|---|---|---|---|---|
| 0/0 | 2026/07/27 00:50 | flow | patch-triage |
0mArgs:null Results: {
"EnableConfigs": [
"X25"
],
"FocusSymbols": [
"x25_start_heartbeat",
"x25_stop_heartbeat",
"x25_start_t2timer",
"x25_start_t21timer",
"x25_start_t22timer",
"x25_start_t23timer",
"x25_stop_timer"
],
"Reasoning": "The patch fixes timer handling and socket refcounting in the X.25 protocol implementation. It replaces mod_timer with sk_reset_timer and adds sock_put to timer callbacks to prevent use-after-free or memory leaks. This is a functional change in network protocol logic that should be fuzzed.",
"WorthFuzzing": true
} |
| 1/1 | 2026/07/27 00:50 | action | read-patch-diff |
0mArgs:null Results: {
"PatchDiff": "commit a74261c443e4af42ca95bf52a8b27d7e625eaea5\nAuthor: syz-cluster \u003ctriage@syzkaller.com\u003e\nDate: Mon Jul 27 00:50:05 2026 +0000\n\n syz-cluster: applied patch under review\n\ndiff --git a/net/x25/af_x25.c b/net/x25/af_x25.c\nindex c31d2af5dd2233..5f2fee4da85304 100644\n--- a/net/x25/af_x25.c\n+++ b/net/x25/af_x25.c\n@@ -363,6 +363,7 @@ static void x25_destroy_timer(struct timer_list *t)\n \tstruct sock *sk = timer_container_of(sk, t, sk_timer);\n \n \tx25_destroy_socket_from_timer(sk);\n+\tsock_put(sk);\n }\n \n /*\n@@ -398,9 +399,8 @@ static void __x25_destroy_socket(struct sock *sk)\n \n \tif (sk_has_allocations(sk)) {\n \t\t/* Defer: outstanding buffers */\n-\t\tsk-\u003esk_timer.expires = jiffies + 10 * HZ;\n \t\tsk-\u003esk_timer.function = x25_destroy_timer;\n-\t\tadd_timer(\u0026sk-\u003esk_timer);\n+\t\tsk_reset_timer(sk, \u0026sk-\u003esk_timer, jiffies + 10 * HZ);\n \t} else {\n \t\t/* drop last reference so sock_put will free */\n \t\t__sock_put(sk);\ndiff --git a/net/x25/x25_timer.c b/net/x25/x25_timer.c\nindex 2ec63a1f4c6d42..7896cd43f1cc1e 100644\n--- a/net/x25/x25_timer.c\n+++ b/net/x25/x25_timer.c\n@@ -36,45 +36,45 @@ void x25_init_timers(struct sock *sk)\n \n void x25_start_heartbeat(struct sock *sk)\n {\n-\tmod_timer(\u0026sk-\u003esk_timer, jiffies + 5 * HZ);\n+\tsk_reset_timer(sk, \u0026sk-\u003esk_timer, jiffies + 5 * HZ);\n }\n \n void x25_stop_heartbeat(struct sock *sk)\n {\n-\ttimer_delete(\u0026sk-\u003esk_timer);\n+\tsk_stop_timer(sk, \u0026sk-\u003esk_timer);\n }\n \n void x25_start_t2timer(struct sock *sk)\n {\n \tstruct x25_sock *x25 = x25_sk(sk);\n \n-\tmod_timer(\u0026x25-\u003etimer, jiffies + x25-\u003et2);\n+\tsk_reset_timer(sk, \u0026x25-\u003etimer, jiffies + x25-\u003et2);\n }\n \n void x25_start_t21timer(struct sock *sk)\n {\n \tstruct x25_sock *x25 = x25_sk(sk);\n \n-\tmod_timer(\u0026x25-\u003etimer, jiffies + x25-\u003et21);\n+\tsk_reset_timer(sk, \u0026x25-\u003etimer, jiffies + x25-\u003et21);\n }\n \n void x25_start_t22timer(struct sock *sk)\n {\n \tstruct x25_sock *x25 = x25_sk(sk);\n \n-\tmod_timer(\u0026x25-\u003etimer, jiffies + x25-\u003et22);\n+\tsk_reset_timer(sk, \u0026x25-\u003etimer, jiffies + x25-\u003et22);\n }\n \n void x25_start_t23timer(struct sock *sk)\n {\n \tstruct x25_sock *x25 = x25_sk(sk);\n \n-\tmod_timer(\u0026x25-\u003etimer, jiffies + x25-\u003et23);\n+\tsk_reset_timer(sk, \u0026x25-\u003etimer, jiffies + x25-\u003et23);\n }\n \n void x25_stop_timer(struct sock *sk)\n {\n-\ttimer_delete(\u0026x25_sk(sk)-\u003etimer);\n+\tsk_stop_timer(sk, \u0026x25_sk(sk)-\u003etimer);\n }\n \n unsigned long x25_display_timer(struct sock *sk)\n@@ -108,7 +108,7 @@ static void x25_heartbeat_expiry(struct timer_list *t)\n \t\t\t sock_flag(sk, SOCK_DEAD))) {\n \t\t\t\tbh_unlock_sock(sk);\n \t\t\t\tx25_destroy_socket_from_timer(sk);\n-\t\t\t\treturn;\n+\t\t\t\tgoto out;\n \t\t\t}\n \t\t\tbreak;\n \n@@ -120,8 +120,14 @@ static void x25_heartbeat_expiry(struct timer_list *t)\n \t\t\tbreak;\n \t}\n restart_heartbeat:\n-\tx25_start_heartbeat(sk);\n+\t/* Do not rearm once __x25_destroy_socket() has unlinked the socket:\n+\t * it is past its cancel point and owns the teardown from there on.\n+\t */\n+\tif (sk_hashed(sk))\n+\t\tx25_start_heartbeat(sk);\n \tbh_unlock_sock(sk);\n+out:\n+\tsock_put(sk);\n }\n \n /*\n@@ -166,4 +172,5 @@ static void x25_timer_expiry(struct timer_list *t)\n \t} else\n \t\tx25_do_timer_expiry(sk);\n \tbh_unlock_sock(sk);\n+\tsock_put(sk);\n }\n"
} |
| 2/1 | 2026/07/27 00:50 | agent | patch-evaluator |
0mModel:best-expensive Args: null Results: {
"EnableConfigs": [
"X25"
],
"FocusSymbols": [
"x25_start_heartbeat",
"x25_stop_heartbeat",
"x25_start_t2timer",
"x25_start_t21timer",
"x25_start_t22timer",
"x25_start_t23timer",
"x25_stop_timer"
],
"Reasoning": "The patch fixes timer handling and socket refcounting in the X.25 protocol implementation. It replaces mod_timer with sk_reset_timer and adds sock_put to timer callbacks to prevent use-after-free or memory leaks. This is a functional change in network protocol logic that should be fuzzed.",
"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 a74261c443e4af42ca95bf52a8b27d7e625eaea5
Author: syz-cluster <triage@syzkaller.com>
Date: Mon Jul 27 00:50:05 2026 +0000
syz-cluster: applied patch under review
diff --git a/net/x25/af_x25.c b/net/x25/af_x25.c
index c31d2af5dd2233..5f2fee4da85304 100644
--- a/net/x25/af_x25.c
+++ b/net/x25/af_x25.c
@@ -363,6 +363,7 @@ static void x25_destroy_timer(struct timer_list *t)
struct sock *sk = timer_container_of(sk, t, sk_timer);
x25_destroy_socket_from_timer(sk);
+ sock_put(sk);
}
/*
@@ -398,9 +399,8 @@ static void __x25_destroy_socket(struct sock *sk)
if (sk_has_allocations(sk)) {
/* Defer: outstanding buffers */
- sk->sk_timer.expires = jiffies + 10 * HZ;
sk->sk_timer.function = x25_destroy_timer;
- add_timer(&sk->sk_timer);
+ sk_reset_timer(sk, &sk->sk_timer, jiffies + 10 * HZ);
} else {
/* drop last reference so sock_put will free */
__sock_put(sk);
diff --git a/net/x25/x25_timer.c b/net/x25/x25_timer.c
index 2ec63a1f4c6d42..7896cd43f1cc1e 100644
--- a/net/x25/x25_timer.c
+++ b/net/x25/x25_timer.c
@@ -36,45 +36,45 @@ void x25_init_timers(struct sock *sk)
void x25_start_heartbeat(struct sock *sk)
{
- mod_timer(&sk->sk_timer, jiffies + 5 * HZ);
+ sk_reset_timer(sk, &sk->sk_timer, jiffies + 5 * HZ);
}
void x25_stop_heartbeat(struct sock *sk)
{
- timer_delete(&sk->sk_timer);
+ sk_stop_timer(sk, &sk->sk_timer);
}
void x25_start_t2timer(struct sock *sk)
{
struct x25_sock *x25 = x25_sk(sk);
- mod_timer(&x25->timer, jiffies + x25->t2);
+ sk_reset_timer(sk, &x25->timer, jiffies + x25->t2);
}
void x25_start_t21timer(struct sock *sk)
{
struct x25_sock *x25 = x25_sk(sk);
- mod_timer(&x25->timer, jiffies + x25->t21);
+ sk_reset_timer(sk, &x25->timer, jiffies + x25->t21);
}
void x25_start_t22timer(struct sock *sk)
{
struct x25_sock *x25 = x25_sk(sk);
- mod_timer(&x25->timer, jiffies + x25->t22);
+ sk_reset_timer(sk, &x25->timer, jiffies + x25->t22);
}
void x25_start_t23timer(struct sock *sk)
{
struct x25_sock *x25 = x25_sk(sk);
- mod_timer(&x25->timer, jiffies + x25->t23);
+ sk_reset_timer(sk, &x25->timer, jiffies + x25->t23);
}
void x25_stop_timer(struct sock *sk)
{
- timer_delete(&x25_sk(sk)->timer);
+ sk_stop_timer(sk, &x25_sk(sk)->timer);
}
unsigned long x25_display_timer(struct sock *sk)
@@ -108,7 +108,7 @@ static void x25_heartbeat_expiry(struct timer_list *t)
sock_flag(sk, SOCK_DEAD))) {
bh_unlock_sock(sk);
x25_destroy_socket_from_timer(sk);
- return;
+ goto out;
}
break;
@@ -120,8 +120,14 @@ static void x25_heartbeat_expiry(struct timer_list *t)
break;
}
restart_heartbeat:
- x25_start_heartbeat(sk);
+ /* Do not rearm once __x25_destroy_socket() has unlinked the socket:
+ * it is past its cancel point and owns the teardown from there on.
+ */
+ if (sk_hashed(sk))
+ x25_start_heartbeat(sk);
bh_unlock_sock(sk);
+out:
+ sock_put(sk);
}
/*
@@ -166,4 +172,5 @@ static void x25_timer_expiry(struct timer_list *t)
} else
x25_do_timer_expiry(sk);
bh_unlock_sock(sk);
+ sock_put(sk);
}
|
| 3/2 | 2026/07/27 00:50 | llm | patch-evaluator |
0mModel:gemini-3.1-pro-preview Args: null Results: null Tokens: input: 3282 output: 32 thoughts: 159 Thoughts: **X.25 Socket Timer Refactoring - My Mental Checklist** Okay, so I've got this patch – looks like it's a critical fix, touching `net/x25/af_x25.c` and `net/x25/x25_timer.c`. Interesting. The core of this seems to be a significant refactoring of the timer handling within the X.25 socket implementation. Replacing `mod_timer` with `sk_reset_timer`, `timer_delete` with `sk_stop_timer`, and adding `sock_put(sk)` in the timer callbacks… that screams refcounting and resource management improvements. This is good; addressing potential timer-related bugs in a protocol like X.25 is important for stability. Now, before I dig deeper into the code changes themselves, I need to get a handle on the bigger picture. I should figure out the relevant configuration option for X.25 to understand if it is enabled. My go-to here is to use `grepper`. I'll run `grepper` and search for something like `X25` within `net/x25/Kconfig` or even the broader `net/Kconfig` files. That should point me to the correct configuration option, or options, to verify this feature. Knowing the config options will put this change into context. That will help me to determine how important this fix is and what the impact of enabling or disabling X.25 might be. |
| 4/2 | 2026/07/27 00:50 | tool | grepper |
0mArgs:{
"Expression": "config X25",
"PathPrefix": "net/x25/Kconfig"
}Results: {
"Output": "net/x25/Kconfig-5-\nnet/x25/Kconfig:6:config X25\nnet/x25/Kconfig-7-\ttristate \"CCITT X.25 Packet Layer\"\n"
} |
| 5/2 | 2026/07/27 00:50 | llm | patch-evaluator |
0mModel:gemini-3.1-pro-preview Args: null Results: null Tokens: input: 3857 output: 42 thoughts: 773 Thoughts: **X.25 Timer Management Analysis** Okay, so I'm looking at this `X25` configuration option, specifically focusing on its timer implementations. Let's see... I've zeroed in on `net/x25/af_x25.c` and `net/x25/x25_timer.c` to identify the key functions. My initial scan has turned up a handful of modified functions, all of which seem intimately tied to X.25 timers: `x25_destroy_timer`, `__x25_destroy_socket`, `x25_start_heartbeat`, `x25_stop_heartbeat`, `x25_start_t2timer`, `x25_start_t21timer`, `x25_start_t22timer`, `x25_start_t23timer`, `x25_stop_timer`, `x25_heartbeat_expiry`, and `x25_timer_expiry`. Essentially, I've got timer callbacks - `x25_destroy_timer`, `x25_heartbeat_expiry`, and `x25_timer_expiry` - and, a socket teardown function, `__x25_destroy_socket`, and then the core timer management functions: `x25_start_heartbeat`, `x25_stop_heartbeat`, and all the `x25_start_tXtimer` and `x25_stop_timer` functions. I need to keep in mind, there is also `x25_destroy_socket_from_timer` which is called. Alright, a more focused list of the modified functions: `__x25_destroy_socket`, `x25_start_heartbeat`, `x25_stop_heartbeat`, `x25_start_t2timer`, `x25_start_t21timer`, `x25_start_t22timer`, `x25_start_t23timer`, and `x25_stop_timer`. Hold on, something's nagging me. Timer callbacks... those are usually executed asynchronously, but they're *static* in this case: `x25_heartbeat_expiry`, `x25_timer_expiry`, and `x25_destroy_timer`. I should confirm that quickly. Ah yes, they are, in fact, declared as static. So, the non-static ones are `x25_start_heartbeat`, `x25_stop_heartbeat`, `x25_start_t2timer`, `x25_start_t21timer`, `x25_start_t22timer`, `x25_start_t23timer`, and `x25_stop_timer`. Wait a minute, `__x25_destroy_socket` is static too! I knew that was fishy. Let me just double-check that in `net/x25/af_x25.c` to make absolutely sure. Yup, confirmed: `static void __x25_destroy_socket(struct sock *sk)`. Time to pivot to `net/x25/x25_timer.c` to round out the picture on the non-static functions... |
| 6/2 | 2026/07/27 00:50 | tool | grepper |
0mArgs:{
"Expression": "void x25_start_heartbeat",
"PathPrefix": "net/x25/x25_timer.c"
}Results: {
"Output": "net/x25/x25_timer.c=27=void x25_init_timers(struct sock *sk)\n--\nnet/x25/x25_timer.c-36-\nnet/x25/x25_timer.c:37:void x25_start_heartbeat(struct sock *sk)\nnet/x25/x25_timer.c-38-{\n"
} |
| 7/2 | 2026/07/27 00:50 | llm | patch-evaluator |
0mModel:gemini-3.1-pro-preview Args: null Results: null Tokens: input: 5521 output: 30 thoughts: 424 Thoughts: **My Analysis of the X.25 Timer and Socket Refcounting Patch** Okay, so I'm looking at this patch and confirming that it deals with non-static functions. Right away, I see the core functions involved: `x25_start_heartbeat`, `x25_stop_heartbeat`, `x25_start_t2timer`, `x25_start_t21timer`, `x25_start_t22timer`, `x25_start_t23timer`, and `x25_stop_timer`. These are the ones where timer management is being modified, so they are critical. I need to quickly scan to see which other entry points trigger these timer functions. Let's see... looking at the code, I see that functions such as `x25_connect`, `x25_release`, `x25_sendmsg`, `x25_recvmsg`, might be relevant. Best to get a full list of modified, non-static functions though. Aha! `x25_start_heartbeat` is called from both `x25_init_timers` and `x25_heartbeat_expiry`. Now, `x25_init_timers` is specifically called from `x25_create`, which is where things get interesting. Since `x25_create` handles socket creation, fuzzing the creation of X.25 sockets and other socket operations would be the perfect way to test these timer functionalities. So, I'll focus my fuzzing efforts on: `x25_start_heartbeat` `x25_stop_heartbeat` `x25_start_t2timer` `x25_start_t21timer` `x25_start_t22timer` `x25_start_t23timer` `x25_stop_timer` The configuration I'm using is `X25`. This patch is all about fixing timer handling and socket refcounting within the X.25 protocol implementation. It's substituting `mod_timer` with `sk_reset_timer` and adding `sock_put` calls in timer callbacks. This will prevent use-after-free conditions and memory leaks. The changes are fundamental to the network protocol's operation, so they're prime targets for fuzzing. I should also double-check quickly to see if `X25` itself depends on anything else. That could open up more attack surfaces. |
| 8/2 | 2026/07/27 00:50 | tool | grepper |
0mError:no matches Args: {
"Expression": "depends on",
"PathPrefix": "net/x25/Kconfig"
}Results: {
"error": "no matches"
} |
| 9/2 | 2026/07/27 00:50 | llm | patch-evaluator |
0mModel:gemini-3.1-pro-preview Args: null Results: null Tokens: input: 6542 output: 34 thoughts: 14 Thoughts: Okay, let's dive into this. Here's my take on those thoughts, as if they're my own: **Analyzing the Kconfig for net/x25** Alright, time to get into the details. I see we're looking at `net/x25/Kconfig`. Right away, my expert mind kicks in – I need to understand the configuration options for the X.25 networking stack within this kernel module. What features can be enabled or disabled? What dependencies exist? Are there any obvious areas for optimization or potential conflicts based on what I already know about X.25? I'm mentally sifting through this file, noting the likely structure. I expect to see `config` statements defining various features, `bool`, `tristate`, `int`, etc., determining the configuration type. There'll be `depends on` clauses linking these options to other kernel features. `help` text providing crucial context. I'm looking for anything unusual or particularly interesting... some advanced or esoteric feature. Any obvious maintainer notes that are important to heed for future work? This Kconfig will dictate how flexible or specific this X.25 implementation is. The goal is to see how the system is currently configured for this type of network, how can it be enhanced for other needs. |
| 10/2 | 2026/07/27 00:50 | tool | read-file |
0mArgs:{
"File": "net/x25/Kconfig",
"FirstLine": 1,
"LineCount": 20
}Results: {
"Contents": " 1:\t# SPDX-License-Identifier: GPL-2.0-only\n 2:\t#\n 3:\t# CCITT X.25 Packet Layer\n 4:\t#\n 5:\t\n 6:\tconfig X25\n 7:\t\ttristate \"CCITT X.25 Packet Layer\"\n 8:\t\thelp\n 9:\t\t X.25 is a set of standardized network protocols, similar in scope to\n 10:\t\t frame relay; the one physical line from your box to the X.25 network\n 11:\t\t entry point can carry several logical point-to-point connections\n 12:\t\t (called \"virtual circuits\") to other computers connected to the X.25\n 13:\t\t network. Governments, banks, and other organizations tend to use it\n 14:\t\t to connect to each other or to form Wide Area Networks (WANs). Many\n 15:\t\t countries have public X.25 networks. X.25 consists of two\n 16:\t\t protocols: the higher level Packet Layer Protocol (PLP) (say Y here\n 17:\t\t if you want that) and the lower level data link layer protocol LAPB\n 18:\t\t (say Y to \"LAPB Data Link Driver\" below if you want that).\n 19:\t\n 20:\t\t Information about X.25 for Linux is contained in the files\n"
} |
| 11/2 | 2026/07/27 00:50 | llm | patch-evaluator |
0mModel:gemini-3.1-pro-preview Args: null Results: null Tokens: input: 7211 output: 35 thoughts: 25 Thoughts: Okay, here's my thought process summarized, geared towards an expert: **Investigating a Potential Network Configuration Dependency** Alright, I need to figure something out, and the situation looks simple enough to start with a dependency check. I'm assuming no obvious external libraries or modules are directly influencing this. The immediate step I'm taking is to delve into the `net/Kconfig` file. Given my experience, that's almost always the first place to look when dealing with network configuration options in this environment. Specifically, I'm trying to determine if the `X25` option is sourced anywhere. This will quickly reveal if it's dependent on other components or if it can be enabled independently. |
| 12/2 | 2026/07/27 00:50 | tool | grepper |
0mArgs:{
"Expression": "source \"net/x25/Kconfig\"",
"PathPrefix": "net/Kconfig"
}Results: {
"Output": "net/Kconfig=263=source \"net/llc/Kconfig\"\nnet/Kconfig:264:source \"net/x25/Kconfig\"\nnet/Kconfig-265-source \"net/lapb/Kconfig\"\n"
} |
| 13/2 | 2026/07/27 00:50 | llm | patch-evaluator |
0mModel:gemini-3.1-pro-preview Args: null Results: null Tokens: input: 7493 output: 182 thoughts: 28 Thoughts: Okay, here's my summary, presented as a direct reflection of my thought process: **Streamlining the Configuration** Alright, that's correct, absolutely. Looking at this, I see it's true. The initial assessment was accurate. It appears that `X25` is indeed the *only* configuration we need to focus on. We can simplify things drastically, which is always a win. Now, let's call the next procedure. I think we will call it `set-results`. |
| 14/2 | 2026/07/27 00:50 | tool | set-results |
0mArgs:{
"EnableConfigs": [
"X25"
],
"FocusSymbols": [
"x25_start_heartbeat",
"x25_stop_heartbeat",
"x25_start_t2timer",
"x25_start_t21timer",
"x25_start_t22timer",
"x25_start_t23timer",
"x25_stop_timer"
],
"Reasoning": "The patch fixes timer handling and socket refcounting in the X.25 protocol implementation. It replaces mod_timer with sk_reset_timer and adds sock_put to timer callbacks to prevent use-after-free or memory leaks. This is a functional change in network protocol logic that should be fuzzed.",
"WorthFuzzing": true
}Results: {
"EnableConfigs": [
"X25"
],
"FocusSymbols": [
"x25_start_heartbeat",
"x25_stop_heartbeat",
"x25_start_t2timer",
"x25_start_t21timer",
"x25_start_t22timer",
"x25_start_t23timer",
"x25_stop_timer"
],
"Reasoning": "The patch fixes timer handling and socket refcounting in the X.25 protocol implementation. It replaces mod_timer with sk_reset_timer and adds sock_put to timer callbacks to prevent use-after-free or memory leaks. This is a functional change in network protocol logic that should be fuzzed.",
"WorthFuzzing": true
} |
| Total Calls | Total Tokens | Avg Tokens | Total Duration (Seconds) | Avg Duration (Seconds) |
|---|
| Total Calls | Total Duration (Seconds) | Avg Duration (Seconds) |
|---|