| Seq | Timestamp | Type | Name | Duration |
|---|---|---|---|---|
| 0/0 | 2026/07/20 12:33 | flow | patch-triage |
0mArgs:null Results: {
"EnableConfigs": [
"TLS"
],
"FocusSymbols": [
"tls_tx_records"
],
"Reasoning": "The patch modifies the error handling logic in the software TLS implementation (tls_tx_records) to avoid aborting the connection on restartable errors like -ERESTARTSYS. This is a functional change in the core TLS logic that should be fuzzed.",
"WorthFuzzing": true
} |
| 1/1 | 2026/07/20 12:33 | action | read-patch-diff |
0mArgs:null Results: {
"PatchDiff": "commit 00671dfb39c941ec908cb705b45e2ffb111b8924\nAuthor: syz-cluster \u003ctriage@syzkaller.com\u003e\nDate: Mon Jul 20 12:33:29 2026 +0000\n\n syz-cluster: applied patch under review\n\ndiff --git a/net/tls/tls_sw.c b/net/tls/tls_sw.c\nindex d4afc90fd7966e..3c9e94069e826b 100644\n--- a/net/tls/tls_sw.c\n+++ b/net/tls/tls_sw.c\n@@ -405,6 +405,24 @@ static void tls_free_open_rec(struct sock *sk)\n \t}\n }\n \n+static bool tls_is_non_restartable_err(int err)\n+{\n+\tif (err \u003e= 0)\n+\t\treturn false;\n+\n+\tswitch (err) {\n+\tcase -EAGAIN:\n+\tcase -EINTR:\n+\tcase -ERESTARTSYS:\n+\tcase -ERESTARTNOINTR:\n+\tcase -ERESTARTNOHAND:\n+\tcase -ERESTART_RESTARTBLOCK:\n+\t\treturn false;\n+\tdefault:\n+\t\treturn true;\n+\t}\n+}\n+\n int tls_tx_records(struct sock *sk, int flags)\n {\n \tstruct tls_context *tls_ctx = tls_get_ctx(sk);\n@@ -458,7 +476,7 @@ int tls_tx_records(struct sock *sk, int flags)\n \t}\n \n tx_err:\n-\tif (rc \u003c 0 \u0026\u0026 rc != -EAGAIN)\n+\tif (tls_is_non_restartable_err(rc))\n \t\ttls_err_abort(sk, rc);\n \n \treturn rc;\n"
} |
| 2/1 | 2026/07/20 12:33 | agent | patch-evaluator |
0mModel:gemini-3.1-pro-preview Args: null Results: {
"EnableConfigs": [
"TLS"
],
"FocusSymbols": [
"tls_tx_records"
],
"Reasoning": "The patch modifies the error handling logic in the software TLS implementation (tls_tx_records) to avoid aborting the connection on restartable errors like -ERESTARTSYS. This is a functional change in the core TLS 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). 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. 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. Do not list too generic configs (we already have them enabled). Only list those that specifically cover the modified code. 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 00671dfb39c941ec908cb705b45e2ffb111b8924
Author: syz-cluster <triage@syzkaller.com>
Date: Mon Jul 20 12:33:29 2026 +0000
syz-cluster: applied patch under review
diff --git a/net/tls/tls_sw.c b/net/tls/tls_sw.c
index d4afc90fd7966e..3c9e94069e826b 100644
--- a/net/tls/tls_sw.c
+++ b/net/tls/tls_sw.c
@@ -405,6 +405,24 @@ static void tls_free_open_rec(struct sock *sk)
}
}
+static bool tls_is_non_restartable_err(int err)
+{
+ if (err >= 0)
+ return false;
+
+ switch (err) {
+ case -EAGAIN:
+ case -EINTR:
+ case -ERESTARTSYS:
+ case -ERESTARTNOINTR:
+ case -ERESTARTNOHAND:
+ case -ERESTART_RESTARTBLOCK:
+ return false;
+ default:
+ return true;
+ }
+}
+
int tls_tx_records(struct sock *sk, int flags)
{
struct tls_context *tls_ctx = tls_get_ctx(sk);
@@ -458,7 +476,7 @@ int tls_tx_records(struct sock *sk, int flags)
}
tx_err:
- if (rc < 0 && rc != -EAGAIN)
+ if (tls_is_non_restartable_err(rc))
tls_err_abort(sk, rc);
return rc;
|
| 3/2 | 2026/07/20 12:33 | llm | patch-evaluator |
0mModel:gemini-3.1-pro-preview Args: null Results: null Tokens: input: 2021 output: 28 thoughts: 123 Thoughts: **Analyzing a TLS Patch** Okay, so there's a patch floating around, specifically within `net/tls/tls_sw.c`. The core of it seems to be adding a new function, `tls_is_non_restartable_err`. And from what I understand, it's being integrated into `tls_tx_records`. The intention, I gather, is to perform a pre-emptive check using this new function before invoking `tls_err_abort`. This suggests a refinement in error handling within the TLS subsystem, a functional change, not just a cosmetic one. My first thought is to dive straight into `net/tls/tls_sw.c` and take a look at the code, particularly `tls_tx_records`, and get a handle on the changes. Where is this function being used? What kind of errors are now considered non-restartable? What impact does this have on the overall flow? I also need to understand the configuration side of things. Given this is TLS, my immediate thought is to check `net/tls/Kconfig`. I'm going to look for `CONFIG_TLS` to determine if there are other relevant configurations, dependencies, or flags associated with this change. It's important to understand under what circumstances this code path is enabled. |
| 4/2 | 2026/07/20 12:33 | tool | grepper |
0mArgs:{
"Expression": "config TLS",
"PathPrefix": "net/tls/Kconfig"
}Results: {
"Output": "net/tls/Kconfig-4-#\nnet/tls/Kconfig:5:config TLS\nnet/tls/Kconfig-6-\ttristate \"Transport Layer Security support\"\n--\nnet/tls/Kconfig-18-\nnet/tls/Kconfig:19:config TLS_DEVICE\nnet/tls/Kconfig-20-\tbool \"Transport Layer Security HW offload\"\n"
} |
| 5/2 | 2026/07/20 12:33 | llm | patch-evaluator |
0mModel:gemini-3.1-pro-preview Args: null Results: null Tokens: input: 2548 output: 29 thoughts: 109 Thoughts: **Analyzing the TLS Transmission Function** Okay, so the current configuration is set to `TLS`, and the function I'm looking at is `tls_tx_records`. My initial thought is to make sure I'm not overlooking any other critical functions in this area. `tls_tx_records` seems like a good starting point, a useful focus symbol. Now, the next logical step is to determine if `tls_tx_records` is a hot-path function. Given its role in transmitting TLS records, it's *likely* to be somewhat performance-sensitive, but being TLS-specific may limit its impact relative to a core network function, but its importance can not be underestimated. Therefore, understanding the context is critical. To that end, I need to pinpoint everywhere `tls_tx_records` is being called. That's where I need to start my investigation. |
| 6/2 | 2026/07/20 12:33 | tool | grepper |
0mArgs:{
"Expression": "tls_tx_records",
"PathPrefix": "net/tls/"
}Results: {
"Output": "net/tls/tls.h=173=void tls_device_splice_eof(struct socket *sock);\nnet/tls/tls.h:174:int tls_tx_records(struct sock *sk, int flags);\nnet/tls/tls.h-175-\n--\nnet/tls/tls_sw.c=408=static bool tls_is_non_restartable_err(int err)\n--\nnet/tls/tls_sw.c-425-\nnet/tls/tls_sw.c:426:int tls_tx_records(struct sock *sk, int flags)\nnet/tls/tls_sw.c-427-{\n--\nnet/tls/tls_sw.c=635=static int tls_push_record(struct sock *sk, int flags,\n--\nnet/tls/tls_sw.c-715-\nnet/tls/tls_sw.c:716:\treturn tls_tx_records(sk, flags);\nnet/tls/tls_sw.c-717-}\n--\nnet/tls/tls_sw.c=784=static int tls_sw_sendmsg_locked(struct sock *sk, struct msghdr *msg,\n--\nnet/tls/tls_sw.c-911-\t\t\t\tcancel_delayed_work(\u0026ctx-\u003etx_work.work);\nnet/tls/tls_sw.c:912:\t\t\t\ttls_tx_records(sk, msg-\u003emsg_flags);\nnet/tls/tls_sw.c-913-\t\t\t}\n--\nnet/tls/tls_sw.c-965-\t\t\t\tcancel_delayed_work(\u0026ctx-\u003etx_work.work);\nnet/tls/tls_sw.c:966:\t\t\t\ttls_tx_records(sk, msg-\u003emsg_flags);\nnet/tls/tls_sw.c-967-\t\t\t}\n--\nnet/tls/tls_sw.c-1003-\t\tcancel_delayed_work(\u0026ctx-\u003etx_work.work);\nnet/tls/tls_sw.c:1004:\t\ttls_tx_records(sk, msg-\u003emsg_flags);\nnet/tls/tls_sw.c-1005-\t}\n--\nnet/tls/tls_sw.c=1035=void tls_sw_splice_eof(struct socket *sock)\n--\nnet/tls/tls_sw.c-1084-\t\tcancel_delayed_work(\u0026ctx-\u003etx_work.work);\nnet/tls/tls_sw.c:1085:\t\ttls_tx_records(sk, 0);\nnet/tls/tls_sw.c-1086-\t}\n--\nnet/tls/tls_sw.c=2279=void tls_sw_release_resources_tx(struct sock *sk)\n--\nnet/tls/tls_sw.c-2287-\nnet/tls/tls_sw.c:2288:\ttls_tx_records(sk, -1);\nnet/tls/tls_sw.c-2289-\n--\nnet/tls/tls_sw.c=2368=static void tx_work_handler(struct work_struct *work)\n--\nnet/tls/tls_sw.c-2388-\t\tlock_sock(sk);\nnet/tls/tls_sw.c:2389:\t\ttls_tx_records(sk, -1);\nnet/tls/tls_sw.c-2390-\t\trelease_sock(sk);\n"
} |
| 7/2 | 2026/07/20 12:33 | llm | patch-evaluator |
0mModel:gemini-3.1-pro-preview Args: null Results: null Tokens: input: 3733 output: 94 thoughts: 164 Thoughts: **Analyzing a TLS Transaction Bug Fix** Okay, so I'm looking at a fix related to `tls_tx_records`. That function is crucial; I see it's called from several core components: `tls_sw_sendmsg_locked`, `tls_push_record`, `tls_sw_splice_eof`, `tls_sw_release_resources_tx`, and `tx_work_handler`. The patch addresses a critical bug where `tls_tx_records` was bailing out and killing the connection on restartable errors, specifically things like `-ERESTARTSYS`. Immediately, my spidey senses are tingling - this smells like a fuzzing opportunity. Any vulnerability here has the potential to crash or disrupt the TLS communication, a prime target for exploitation. Let's zoom in on `tls_tx_records` and make sure it is the focus. Now, as far as configuration goes, it looks like `TLS` is the relevant config item to have enabled. I do need to double-check that though, because there is `TLS_DEVICE` as well which I know is for hardware offload. But given that this is in `tls_sw.c`, I'm confident `TLS` is sufficient. Alright, time to lock in these findings. I'm ready to call set-results. |
| 8/2 | 2026/07/20 12:33 | tool | set-results |
0mArgs:{
"EnableConfigs": [
"TLS"
],
"FocusSymbols": [
"tls_tx_records"
],
"Reasoning": "The patch modifies the error handling logic in the software TLS implementation (tls_tx_records) to avoid aborting the connection on restartable errors like -ERESTARTSYS. This is a functional change in the core TLS logic that should be fuzzed.",
"WorthFuzzing": true
}Results: {
"EnableConfigs": [
"TLS"
],
"FocusSymbols": [
"tls_tx_records"
],
"Reasoning": "The patch modifies the error handling logic in the software TLS implementation (tls_tx_records) to avoid aborting the connection on restartable errors like -ERESTARTSYS. This is a functional change in the core TLS 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) |
|---|