AI Trajectory


Trajectory: (Expand/Collapse All)
Seq Timestamp Type Name Duration
0/0 2026/07/31 20:26 flow patch-triage
1m Args:
null

Results:
{
  "EnableConfigs": [
    "IP_SCTP"
  ],
  "FocusSymbols": [
    "sctp_getsockopt_local_auth_chunks",
    "sctp_getsockopt"
  ],
  "Reasoning": "The patch fixes an out-of-bounds read in `sctp_getsockopt_local_auth_chunks` by clamping `num_chunks` to `SCTP_AUTH_MAX_CHUNKS`. This is a functional change in the SCTP socket options handling and is reachable from userspace via the `getsockopt` syscall. It is worth fuzzing to ensure the bounds check correctly prevents out-of-bounds access and doesn't introduce regressions.",
  "WorthFuzzing": true
}

1/1 2026/07/31 20:26 action read-patch-diff
0m Args:
null

Results:
{
  "PatchDiff": "commit aa602e2896636fbeecb53f78fc3d80b6bf249b39\nAuthor: syz-cluster \u003ctriage@syzkaller.com\u003e\nDate:   Fri Jul 31 20:26:52 2026 +0000\n\n    syz-cluster: applied patch under review\n\ndiff --git a/net/sctp/socket.c b/net/sctp/socket.c\nindex c7b9e325ec1cd..b7d2dcbb3c7b7 100644\n--- a/net/sctp/socket.c\n+++ b/net/sctp/socket.c\n@@ -7109,6 +7109,12 @@ static int sctp_getsockopt_local_auth_chunks(struct sock *sk, int len,\n \t\tgoto num;\n \n \tnum_chunks = ntohs(ch-\u003eparam_hdr.length) - sizeof(struct sctp_paramhdr);\n+\t/* asoc-\u003ec.auth_chunks[] holds at most SCTP_AUTH_MAX_CHUNKS bytes but its\n+\t * length is restored from the state cookie and is not bounded here;\n+\t * clamp so an oversized length cannot read past the array.\n+\t */\n+\tif (num_chunks \u003e SCTP_AUTH_MAX_CHUNKS)\n+\t\tnum_chunks = SCTP_AUTH_MAX_CHUNKS;\n \tif (len \u003c sizeof(struct sctp_authchunks) + num_chunks)\n \t\treturn -EINVAL;\n \n"
}

2/1 2026/07/31 20:26 agent patch-evaluator
1m Model:
best-expensive

Args:
null

Results:
{
  "EnableConfigs": [
    "IP_SCTP"
  ],
  "FocusSymbols": [
    "sctp_getsockopt_local_auth_chunks",
    "sctp_getsockopt"
  ],
  "Reasoning": "The patch fixes an out-of-bounds read in `sctp_getsockopt_local_auth_chunks` by clamping `num_chunks` to `SCTP_AUTH_MAX_CHUNKS`. This is a functional change in the SCTP socket options handling and is reachable from userspace via the `getsockopt` syscall. It is worth fuzzing to ensure the bounds check correctly prevents out-of-bounds access and doesn't introduce regressions.",
  "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 aa602e2896636fbeecb53f78fc3d80b6bf249b39
Author: syz-cluster <triage@syzkaller.com>
Date:   Fri Jul 31 20:26:52 2026 +0000

    syz-cluster: applied patch under review

diff --git a/net/sctp/socket.c b/net/sctp/socket.c
index c7b9e325ec1cd..b7d2dcbb3c7b7 100644
--- a/net/sctp/socket.c
+++ b/net/sctp/socket.c
@@ -7109,6 +7109,12 @@ static int sctp_getsockopt_local_auth_chunks(struct sock *sk, int len,
 		goto num;
 
 	num_chunks = ntohs(ch->param_hdr.length) - sizeof(struct sctp_paramhdr);
+	/* asoc->c.auth_chunks[] holds at most SCTP_AUTH_MAX_CHUNKS bytes but its
+	 * length is restored from the state cookie and is not bounded here;
+	 * clamp so an oversized length cannot read past the array.
+	 */
+	if (num_chunks > SCTP_AUTH_MAX_CHUNKS)
+		num_chunks = SCTP_AUTH_MAX_CHUNKS;
 	if (len < sizeof(struct sctp_authchunks) + num_chunks)
 		return -EINVAL;
 

3/2 2026/07/31 20:26 llm patch-evaluator
0m Model:
gemini-3.1-pro-preview

Args:
null

Results:
null

Tokens:
							input: 2142
							output: 42
							thoughts: 256
						

Thoughts:
**Analyzing a Patch to `net/sctp/socket.c`**

Okay, so I'm looking at this patch for `net/sctp/socket.c`, specifically focusing on `sctp_getsockopt_local_auth_chunks`. It seems they've added a bounds check to `num_chunks` against `SCTP_AUTH_MAX_CHUNKS`. Excellent, this is a clear functional fix, addressing a potential out-of-bounds read vulnerability. My immediate thought is, "This is definitely worth some fuzzing."

Now, let's dig into the details of `sctp_getsockopt_local_auth_chunks`. As a getsockopt handler for SCTP, it needs scrutiny. I'll mentally add it to my list of `FocusSymbols` for this area. Hold on a second...it's *static*? Right, I need to confirm that. Let me quickly check the declaration in `net/sctp/socket.c`. Ah, yes, `static int sctp_getsockopt_local_auth_chunks(struct sock *sk, int len, ...)` confirms it.

Since it's static, I need to check where it's called within `net/sctp/socket.c` itself. Knowing the call sites of static functions is essential for understanding the context and potential attack surface. Let's see how and where it's being used.



4/2 2026/07/31 20:26 tool grepper
0m Args:
{
  "Expression": "sctp_getsockopt_local_auth_chunks",
  "PathPrefix": "net/sctp/socket.c"
}

Results:
{
  "Output": "net/sctp/socket.c=7032=static int sctp_getsockopt_peer_auth_chunks(struct sock *sk, int len,\n--\nnet/sctp/socket.c-7075-\nnet/sctp/socket.c:7076:static int sctp_getsockopt_local_auth_chunks(struct sock *sk, int len,\nnet/sctp/socket.c-7077-\t\t\t\t    char __user *optval, int __user *optlen)\n--\nnet/sctp/socket.c=8137=static int sctp_getsockopt(struct sock *sk, int level, int optname,\n--\nnet/sctp/socket.c-8272-\tcase SCTP_LOCAL_AUTH_CHUNKS:\nnet/sctp/socket.c:8273:\t\tretval = sctp_getsockopt_local_auth_chunks(sk, len, optval,\nnet/sctp/socket.c-8274-\t\t\t\t\t\t\toptlen);\n"
}

5/2 2026/07/31 20:26 llm patch-evaluator
0m Model:
gemini-3.1-pro-preview

Args:
null

Results:
null

Tokens:
							input: 3026
							output: 36
							thoughts: 52
						

Thoughts:
Okay, let's see what's going on here.

**Analyzing the `sctp_getsockopt` Function Call**

Right, so I'm dealing with a function call originating from `sctp_getsockopt`. That makes sense; it's the central point for handling `getsockopt` calls related to SCTP sockets. Now, I need to understand this function. Let's start with a quick check. Is this a static function? Knowing its scope, and if it's visible outside the file it's declared in, can significantly impact how I need to analyze its behavior and how it interacts with other parts of the SCTP implementation. I'll need to know whether the function name, `sctp_getsockopt`, is directly used in other parts of the code. That gives me clues about how tightly coupled or modular this function is. Knowing whether the function is static or not will clarify that.



6/2 2026/07/31 20:27 tool grepper
0m Args:
{
  "Expression": "sctp_getsockopt",
  "PathPrefix": "net/sctp/socket.c"
}

Results:
{
  "Output": "net/sctp/socket.c=1381=struct compat_sctp_getaddrs_old {\n--\nnet/sctp/socket.c-1387-\nnet/sctp/socket.c:1388:static int sctp_getsockopt_connectx3(struct sock *sk, int len,\nnet/sctp/socket.c-1389-\t\t\t\t     char __user *optval,\n--\nnet/sctp/socket.c=5477=EXPORT_SYMBOL_GPL(sctp_transport_traverse_process);\n--\nnet/sctp/socket.c-5485- */\nnet/sctp/socket.c:5486:static int sctp_getsockopt_sctp_status(struct sock *sk, int len,\nnet/sctp/socket.c-5487-\t\t\t\t       char __user *optval,\n--\nnet/sctp/socket.c-5565- */\nnet/sctp/socket.c:5566:static int sctp_getsockopt_peer_addr_info(struct sock *sk, int len,\nnet/sctp/socket.c-5567-\t\t\t\t\t  char __user *optval,\n--\nnet/sctp/socket.c-5628- */\nnet/sctp/socket.c:5629:static int sctp_getsockopt_disable_fragments(struct sock *sk, int len,\nnet/sctp/socket.c-5630-\t\t\t\t\tchar __user *optval, int __user *optlen)\n--\nnet/sctp/socket.c-5650- */\nnet/sctp/socket.c:5651:static int sctp_getsockopt_events(struct sock *sk, int len, char __user *optval,\nnet/sctp/socket.c-5652-\t\t\t\t  int __user *optlen)\n--\nnet/sctp/socket.c-5685- */\nnet/sctp/socket.c:5686:static int sctp_getsockopt_autoclose(struct sock *sk, int len, char __user *optval, int __user *optlen)\nnet/sctp/socket.c-5687-{\n--\nnet/sctp/socket.c=5702=static int sctp_do_peeloff(struct sock *sk, sctp_assoc_t id,\n--\nnet/sctp/socket.c-5745-\nnet/sctp/socket.c:5746:static int sctp_getsockopt_peeloff_common(struct sock *sk, sctp_peeloff_arg_t *peeloff,\nnet/sctp/socket.c-5747-\t\t\t\t\t  struct file **newfile, unsigned flags)\n--\nnet/sctp/socket.c-5781-\nnet/sctp/socket.c:5782:static int sctp_getsockopt_peeloff(struct sock *sk, int len, char __user *optval, int __user *optlen)\nnet/sctp/socket.c-5783-{\n--\nnet/sctp/socket.c-5793-\nnet/sctp/socket.c:5794:\tretval = sctp_getsockopt_peeloff_common(sk, \u0026peeloff, \u0026newfile, 0);\nnet/sctp/socket.c-5795-\tif (retval \u003c 0)\n--\nnet/sctp/socket.c-5814-\nnet/sctp/socket.c:5815:static int sctp_getsockopt_peeloff_flags(struct sock *sk, int len,\nnet/sctp/socket.c-5816-\t\t\t\t\t char __user *optval, int __user *optlen)\n--\nnet/sctp/socket.c-5827-\nnet/sctp/socket.c:5828:\tretval = sctp_getsockopt_peeloff_common(sk, \u0026peeloff.p_arg,\nnet/sctp/socket.c-5829-\t\t\t\t\t\t\u0026newfile, peeloff.flags);\n--\nnet/sctp/socket.c-5981- */\nnet/sctp/socket.c:5982:static int sctp_getsockopt_peer_addr_params(struct sock *sk, int len,\nnet/sctp/socket.c-5983-\t\t\t\t\t    char __user *optval, int __user *optlen)\n--\nnet/sctp/socket.c-6124- */\nnet/sctp/socket.c:6125:static int sctp_getsockopt_delayed_ack(struct sock *sk, int len,\nnet/sctp/socket.c-6126-\t\t\t\t\t    char __user *optval,\n--\nnet/sctp/socket.c-6198- */\nnet/sctp/socket.c:6199:static int sctp_getsockopt_initmsg(struct sock *sk, int len, char __user *optval, int __user *optlen)\nnet/sctp/socket.c-6200-{\n--\nnet/sctp/socket.c-6211-\nnet/sctp/socket.c:6212:static int sctp_getsockopt_peer_addrs(struct sock *sk, int len,\nnet/sctp/socket.c-6213-\t\t\t\t      char __user *optval, int __user *optlen)\n--\nnet/sctp/socket.c=6263=static int sctp_copy_laddrs(struct sock *sk, __u16 port, void *to,\n--\nnet/sctp/socket.c-6307-\nnet/sctp/socket.c:6308:static int sctp_getsockopt_local_addrs(struct sock *sk, int len,\nnet/sctp/socket.c-6309-\t\t\t\t       char __user *optval, int __user *optlen)\n--\nnet/sctp/socket.c-6415- */\nnet/sctp/socket.c:6416:static int sctp_getsockopt_primary_addr(struct sock *sk, int len,\nnet/sctp/socket.c-6417-\t\t\t\t\tchar __user *optval, int __user *optlen)\n--\nnet/sctp/socket.c-6457- */\nnet/sctp/socket.c:6458:static int sctp_getsockopt_adaptation_layer(struct sock *sk, int len,\nnet/sctp/socket.c-6459-\t\t\t\t  char __user *optval, int __user *optlen)\n--\nnet/sctp/socket.c-6496- */\nnet/sctp/socket.c:6497:static int sctp_getsockopt_default_send_param(struct sock *sk,\nnet/sctp/socket.c-6498-\t\t\t\t\tint len, char __user *optval,\n--\nnet/sctp/socket.c-6542- */\nnet/sctp/socket.c:6543:static int sctp_getsockopt_default_sndinfo(struct sock *sk, int len,\nnet/sctp/socket.c-6544-\t\t\t\t\t   char __user *optval,\n--\nnet/sctp/socket.c-6593-\nnet/sctp/socket.c:6594:static int sctp_getsockopt_nodelay(struct sock *sk, int len,\nnet/sctp/socket.c-6595-\t\t\t\t   char __user *optval, int __user *optlen)\n--\nnet/sctp/socket.c-6622- */\nnet/sctp/socket.c:6623:static int sctp_getsockopt_rtoinfo(struct sock *sk, int len,\nnet/sctp/socket.c-6624-\t\t\t\tchar __user *optval,\n--\nnet/sctp/socket.c-6676- */\nnet/sctp/socket.c:6677:static int sctp_getsockopt_associnfo(struct sock *sk, int len,\nnet/sctp/socket.c-6678-\t\t\t\t     char __user *optval,\n--\nnet/sctp/socket.c-6745- */\nnet/sctp/socket.c:6746:static int sctp_getsockopt_mappedv4(struct sock *sk, int len,\nnet/sctp/socket.c-6747-\t\t\t\t    char __user *optval, int __user *optlen)\n--\nnet/sctp/socket.c-6768- */\nnet/sctp/socket.c:6769:static int sctp_getsockopt_context(struct sock *sk, int len,\nnet/sctp/socket.c-6770-\t\t\t\t   char __user *optval, int __user *optlen)\n--\nnet/sctp/socket.c-6825- */\nnet/sctp/socket.c:6826:static int sctp_getsockopt_maxseg(struct sock *sk, int len,\nnet/sctp/socket.c-6827-\t\t\t\t  char __user *optval, int __user *optlen)\n--\nnet/sctp/socket.c-6872- */\nnet/sctp/socket.c:6873:static int sctp_getsockopt_fragment_interleave(struct sock *sk, int len,\nnet/sctp/socket.c-6874-\t\t\t\t\t       char __user *optval, int __user *optlen)\n--\nnet/sctp/socket.c-6895- */\nnet/sctp/socket.c:6896:static int sctp_getsockopt_partial_delivery_point(struct sock *sk, int len,\nnet/sctp/socket.c-6897-\t\t\t\t\t\t  char __user *optval,\n--\nnet/sctp/socket.c-6919- */\nnet/sctp/socket.c:6920:static int sctp_getsockopt_maxburst(struct sock *sk, int len,\nnet/sctp/socket.c-6921-\t\t\t\t    char __user *optval,\n--\nnet/sctp/socket.c-6959-\nnet/sctp/socket.c:6960:static int sctp_getsockopt_hmac_ident(struct sock *sk, int len,\nnet/sctp/socket.c-6961-\t\t\t\t    char __user *optval, int __user *optlen)\n--\nnet/sctp/socket.c-6995-\nnet/sctp/socket.c:6996:static int sctp_getsockopt_active_key(struct sock *sk, int len,\nnet/sctp/socket.c-6997-\t\t\t\t    char __user *optval, int __user *optlen)\n--\nnet/sctp/socket.c-7031-\nnet/sctp/socket.c:7032:static int sctp_getsockopt_peer_auth_chunks(struct sock *sk, int len,\nnet/sctp/socket.c-7033-\t\t\t\t    char __user *optval, int __user *optlen)\n--\nnet/sctp/socket.c-7075-\nnet/sctp/socket.c:7076:static int sctp_getsockopt_local_auth_chunks(struct sock *sk, int len,\nnet/sctp/socket.c-7077-\t\t\t\t    char __user *optval, int __user *optlen)\n--\nnet/sctp/socket.c-7137- */\nnet/sctp/socket.c:7138:static int sctp_getsockopt_assoc_number(struct sock *sk, int len,\nnet/sctp/socket.c-7139-\t\t\t\t    char __user *optval, int __user *optlen)\n--\nnet/sctp/socket.c-7168- */\nnet/sctp/socket.c:7169:static int sctp_getsockopt_auto_asconf(struct sock *sk, int len,\nnet/sctp/socket.c-7170-\t\t\t\t   char __user *optval, int __user *optlen)\n--\nnet/sctp/socket.c-7193- */\nnet/sctp/socket.c:7194:static int sctp_getsockopt_assoc_ids(struct sock *sk, int len,\nnet/sctp/socket.c-7195-\t\t\t\t    char __user *optval, int __user *optlen)\n--\nnet/sctp/socket.c-7243- */\nnet/sctp/socket.c:7244:static int sctp_getsockopt_paddr_thresholds(struct sock *sk,\nnet/sctp/socket.c-7245-\t\t\t\t\t    char __user *optval, int len,\n--\nnet/sctp/socket.c-7302- */\nnet/sctp/socket.c:7303:static int sctp_getsockopt_assoc_stats(struct sock *sk, int len,\nnet/sctp/socket.c-7304-\t\t\t\t       char __user *optval,\n--\nnet/sctp/socket.c-7360-\nnet/sctp/socket.c:7361:static int sctp_getsockopt_recvrcvinfo(struct sock *sk,\tint len,\nnet/sctp/socket.c-7362-\t\t\t\t       char __user *optval,\n--\nnet/sctp/socket.c-7380-\nnet/sctp/socket.c:7381:static int sctp_getsockopt_recvnxtinfo(struct sock *sk,\tint len,\nnet/sctp/socket.c-7382-\t\t\t\t       char __user *optval,\n--\nnet/sctp/socket.c-7400-\nnet/sctp/socket.c:7401:static int sctp_getsockopt_pr_supported(struct sock *sk, int len,\nnet/sctp/socket.c-7402-\t\t\t\t\tchar __user *optval,\n--\nnet/sctp/socket.c-7439-\nnet/sctp/socket.c:7440:static int sctp_getsockopt_default_prinfo(struct sock *sk, int len,\nnet/sctp/socket.c-7441-\t\t\t\t\t  char __user *optval,\n--\nnet/sctp/socket.c-7485-\nnet/sctp/socket.c:7486:static int sctp_getsockopt_pr_assocstatus(struct sock *sk, int len,\nnet/sctp/socket.c-7487-\t\t\t\t\t  char __user *optval,\n--\nnet/sctp/socket.c-7544-\nnet/sctp/socket.c:7545:static int sctp_getsockopt_pr_streamstatus(struct sock *sk, int len,\nnet/sctp/socket.c-7546-\t\t\t\t\t   char __user *optval,\n--\nnet/sctp/socket.c-7608-\nnet/sctp/socket.c:7609:static int sctp_getsockopt_reconfig_supported(struct sock *sk, int len,\nnet/sctp/socket.c-7610-\t\t\t\t\t      char __user *optval,\n--\nnet/sctp/socket.c-7647-\nnet/sctp/socket.c:7648:static int sctp_getsockopt_enable_strreset(struct sock *sk, int len,\nnet/sctp/socket.c-7649-\t\t\t\t\t   char __user *optval,\n--\nnet/sctp/socket.c-7686-\nnet/sctp/socket.c:7687:static int sctp_getsockopt_scheduler(struct sock *sk, int len,\nnet/sctp/socket.c-7688-\t\t\t\t     char __user *optval,\n--\nnet/sctp/socket.c-7725-\nnet/sctp/socket.c:7726:static int sctp_getsockopt_scheduler_value(struct sock *sk, int len,\nnet/sctp/socket.c-7727-\t\t\t\t\t   char __user *optval,\n--\nnet/sctp/socket.c-7767-\nnet/sctp/socket.c:7768:static int sctp_getsockopt_interleaving_supported(struct sock *sk, int len,\nnet/sctp/socket.c-7769-\t\t\t\t\t\t  char __user *optval,\n--\nnet/sctp/socket.c-7806-\nnet/sctp/socket.c:7807:static int sctp_getsockopt_reuse_port(struct sock *sk, int len,\nnet/sctp/socket.c-7808-\t\t\t\t      char __user *optval,\n--\nnet/sctp/socket.c-7826-\nnet/sctp/socket.c:7827:static int sctp_getsockopt_event(struct sock *sk, int len, char __user *optval,\nnet/sctp/socket.c-7828-\t\t\t\t int __user *optlen)\n--\nnet/sctp/socket.c-7861-\nnet/sctp/socket.c:7862:static int sctp_getsockopt_asconf_supported(struct sock *sk, int len,\nnet/sctp/socket.c-7863-\t\t\t\t\t    char __user *optval,\n--\nnet/sctp/socket.c-7900-\nnet/sctp/socket.c:7901:static int sctp_getsockopt_auth_supported(struct sock *sk, int len,\nnet/sctp/socket.c-7902-\t\t\t\t\t  char __user *optval,\n--\nnet/sctp/socket.c-7939-\nnet/sctp/socket.c:7940:static int sctp_getsockopt_ecn_supported(struct sock *sk, int len,\nnet/sctp/socket.c-7941-\t\t\t\t\t char __user *optval,\n--\nnet/sctp/socket.c-7978-\nnet/sctp/socket.c:7979:static int sctp_getsockopt_pf_expose(struct sock *sk, int len,\nnet/sctp/socket.c-7980-\t\t\t\t     char __user *optval,\n--\nnet/sctp/socket.c-8017-\nnet/sctp/socket.c:8018:static int sctp_getsockopt_encap_port(struct sock *sk, int len,\nnet/sctp/socket.c-8019-\t\t\t\t      char __user *optval, int __user *optlen)\n--\nnet/sctp/socket.c-8076-\nnet/sctp/socket.c:8077:static int sctp_getsockopt_probe_interval(struct sock *sk, int len,\nnet/sctp/socket.c-8078-\t\t\t\t\t  char __user *optval,\n--\nnet/sctp/socket.c-8136-\nnet/sctp/socket.c:8137:static int sctp_getsockopt(struct sock *sk, int level, int optname,\nnet/sctp/socket.c-8138-\t\t\t   char __user *optval, int __user *optlen)\n--\nnet/sctp/socket.c-8167-\tcase SCTP_STATUS:\nnet/sctp/socket.c:8168:\t\tretval = sctp_getsockopt_sctp_status(sk, len, optval, optlen);\nnet/sctp/socket.c-8169-\t\tbreak;\nnet/sctp/socket.c-8170-\tcase SCTP_DISABLE_FRAGMENTS:\nnet/sctp/socket.c:8171:\t\tretval = sctp_getsockopt_disable_fragments(sk, len, optval,\nnet/sctp/socket.c-8172-\t\t\t\t\t\t\t   optlen);\n--\nnet/sctp/socket.c-8174-\tcase SCTP_EVENTS:\nnet/sctp/socket.c:8175:\t\tretval = sctp_getsockopt_events(sk, len, optval, optlen);\nnet/sctp/socket.c-8176-\t\tbreak;\nnet/sctp/socket.c-8177-\tcase SCTP_AUTOCLOSE:\nnet/sctp/socket.c:8178:\t\tretval = sctp_getsockopt_autoclose(sk, len, optval, optlen);\nnet/sctp/socket.c-8179-\t\tbreak;\nnet/sctp/socket.c-8180-\tcase SCTP_SOCKOPT_PEELOFF:\nnet/sctp/socket.c:8181:\t\tretval = sctp_getsockopt_peeloff(sk, len, optval, optlen);\nnet/sctp/socket.c-8182-\t\tbreak;\nnet/sctp/socket.c-8183-\tcase SCTP_SOCKOPT_PEELOFF_FLAGS:\nnet/sctp/socket.c:8184:\t\tretval = sctp_getsockopt_peeloff_flags(sk, len, optval, optlen);\nnet/sctp/socket.c-8185-\t\tbreak;\nnet/sctp/socket.c-8186-\tcase SCTP_PEER_ADDR_PARAMS:\nnet/sctp/socket.c:8187:\t\tretval = sctp_getsockopt_peer_addr_params(sk, len, optval,\nnet/sctp/socket.c-8188-\t\t\t\t\t\t\t  optlen);\n--\nnet/sctp/socket.c-8190-\tcase SCTP_DELAYED_SACK:\nnet/sctp/socket.c:8191:\t\tretval = sctp_getsockopt_delayed_ack(sk, len, optval,\nnet/sctp/socket.c-8192-\t\t\t\t\t\t\t  optlen);\n--\nnet/sctp/socket.c-8194-\tcase SCTP_INITMSG:\nnet/sctp/socket.c:8195:\t\tretval = sctp_getsockopt_initmsg(sk, len, optval, optlen);\nnet/sctp/socket.c-8196-\t\tbreak;\nnet/sctp/socket.c-8197-\tcase SCTP_GET_PEER_ADDRS:\nnet/sctp/socket.c:8198:\t\tretval = sctp_getsockopt_peer_addrs(sk, len, optval,\nnet/sctp/socket.c-8199-\t\t\t\t\t\t    optlen);\n--\nnet/sctp/socket.c-8201-\tcase SCTP_GET_LOCAL_ADDRS:\nnet/sctp/socket.c:8202:\t\tretval = sctp_getsockopt_local_addrs(sk, len, optval,\nnet/sctp/socket.c-8203-\t\t\t\t\t\t     optlen);\n--\nnet/sctp/socket.c-8205-\tcase SCTP_SOCKOPT_CONNECTX3:\nnet/sctp/socket.c:8206:\t\tretval = sctp_getsockopt_connectx3(sk, len, optval, optlen);\nnet/sctp/socket.c-8207-\t\tbreak;\nnet/sctp/socket.c-8208-\tcase SCTP_DEFAULT_SEND_PARAM:\nnet/sctp/socket.c:8209:\t\tretval = sctp_getsockopt_default_send_param(sk, len,\nnet/sctp/socket.c-8210-\t\t\t\t\t\t\t    optval, optlen);\n--\nnet/sctp/socket.c-8212-\tcase SCTP_DEFAULT_SNDINFO:\nnet/sctp/socket.c:8213:\t\tretval = sctp_getsockopt_default_sndinfo(sk, len,\nnet/sctp/socket.c-8214-\t\t\t\t\t\t\t optval, optlen);\n--\nnet/sctp/socket.c-8216-\tcase SCTP_PRIMARY_ADDR:\nnet/sctp/socket.c:8217:\t\tretval = sctp_getsockopt_primary_addr(sk, len, optval, optlen);\nnet/sctp/socket.c-8218-\t\tbreak;\nnet/sctp/socket.c-8219-\tcase SCTP_NODELAY:\nnet/sctp/socket.c:8220:\t\tretval = sctp_getsockopt_nodelay(sk, len, optval, optlen);\nnet/sctp/socket.c-8221-\t\tbreak;\nnet/sctp/socket.c-8222-\tcase SCTP_RTOINFO:\nnet/sctp/socket.c:8223:\t\tretval = sctp_getsockopt_rtoinfo(sk, len, optval, optlen);\nnet/sctp/socket.c-8224-\t\tbreak;\nnet/sctp/socket.c-8225-\tcase SCTP_ASSOCINFO:\nnet/sctp/socket.c:8226:\t\tretval = sctp_getsockopt_associnfo(sk, len, optval, optlen);\nnet/sctp/socket.c-8227-\t\tbreak;\nnet/sctp/socket.c-8228-\tcase SCTP_I_WANT_MAPPED_V4_ADDR:\nnet/sctp/socket.c:8229:\t\tretval = sctp_getsockopt_mappedv4(sk, len, optval, optlen);\nnet/sctp/socket.c-8230-\t\tbreak;\nnet/sctp/socket.c-8231-\tcase SCTP_MAXSEG:\nnet/sctp/socket.c:8232:\t\tretval = sctp_getsockopt_maxseg(sk, len, optval, optlen);\nnet/sctp/socket.c-8233-\t\tbreak;\nnet/sctp/socket.c-8234-\tcase SCTP_GET_PEER_ADDR_INFO:\nnet/sctp/socket.c:8235:\t\tretval = sctp_getsockopt_peer_addr_info(sk, len, optval,\nnet/sctp/socket.c-8236-\t\t\t\t\t\t\toptlen);\n--\nnet/sctp/socket.c-8238-\tcase SCTP_ADAPTATION_LAYER:\nnet/sctp/socket.c:8239:\t\tretval = sctp_getsockopt_adaptation_layer(sk, len, optval,\nnet/sctp/socket.c-8240-\t\t\t\t\t\t\toptlen);\n--\nnet/sctp/socket.c-8242-\tcase SCTP_CONTEXT:\nnet/sctp/socket.c:8243:\t\tretval = sctp_getsockopt_context(sk, len, optval, optlen);\nnet/sctp/socket.c-8244-\t\tbreak;\nnet/sctp/socket.c-8245-\tcase SCTP_FRAGMENT_INTERLEAVE:\nnet/sctp/socket.c:8246:\t\tretval = sctp_getsockopt_fragment_interleave(sk, len, optval,\nnet/sctp/socket.c-8247-\t\t\t\t\t\t\t     optlen);\n--\nnet/sctp/socket.c-8249-\tcase SCTP_PARTIAL_DELIVERY_POINT:\nnet/sctp/socket.c:8250:\t\tretval = sctp_getsockopt_partial_delivery_point(sk, len, optval,\nnet/sctp/socket.c-8251-\t\t\t\t\t\t\t\toptlen);\n--\nnet/sctp/socket.c-8253-\tcase SCTP_MAX_BURST:\nnet/sctp/socket.c:8254:\t\tretval = sctp_getsockopt_maxburst(sk, len, optval, optlen);\nnet/sctp/socket.c-8255-\t\tbreak;\n--\nnet/sctp/socket.c-8262-\tcase SCTP_HMAC_IDENT:\nnet/sctp/socket.c:8263:\t\tretval = sctp_getsockopt_hmac_ident(sk, len, optval, optlen);\nnet/sctp/socket.c-8264-\t\tbreak;\nnet/sctp/socket.c-8265-\tcase SCTP_AUTH_ACTIVE_KEY:\nnet/sctp/socket.c:8266:\t\tretval = sctp_getsockopt_active_key(sk, len, optval, optlen);\nnet/sctp/socket.c-8267-\t\tbreak;\nnet/sctp/socket.c-8268-\tcase SCTP_PEER_AUTH_CHUNKS:\nnet/sctp/socket.c:8269:\t\tretval = sctp_getsockopt_peer_auth_chunks(sk, len, optval,\nnet/sctp/socket.c-8270-\t\t\t\t\t\t\toptlen);\n--\nnet/sctp/socket.c-8272-\tcase SCTP_LOCAL_AUTH_CHUNKS:\nnet/sctp/socket.c:8273:\t\tretval = sctp_getsockopt_local_auth_chunks(sk, len, optval,\nnet/sctp/socket.c-8274-\t\t\t\t\t\t\toptlen);\n--\nnet/sctp/socket.c-8276-\tcase SCTP_GET_ASSOC_NUMBER:\nnet/sctp/socket.c:8277:\t\tretval = sctp_getsockopt_assoc_number(sk, len, optval, optlen);\nnet/sctp/socket.c-8278-\t\tbreak;\nnet/sctp/socket.c-8279-\tcase SCTP_GET_ASSOC_ID_LIST:\nnet/sctp/socket.c:8280:\t\tretval = sctp_getsockopt_assoc_ids(sk, len, optval, optlen);\nnet/sctp/socket.c-8281-\t\tbreak;\nnet/sctp/socket.c-8282-\tcase SCTP_AUTO_ASCONF:\nnet/sctp/socket.c:8283:\t\tretval = sctp_getsockopt_auto_asconf(sk, len, optval, optlen);\nnet/sctp/socket.c-8284-\t\tbreak;\nnet/sctp/socket.c-8285-\tcase SCTP_PEER_ADDR_THLDS:\nnet/sctp/socket.c:8286:\t\tretval = sctp_getsockopt_paddr_thresholds(sk, optval, len,\nnet/sctp/socket.c-8287-\t\t\t\t\t\t\t  optlen, false);\n--\nnet/sctp/socket.c-8289-\tcase SCTP_PEER_ADDR_THLDS_V2:\nnet/sctp/socket.c:8290:\t\tretval = sctp_getsockopt_paddr_thresholds(sk, optval, len,\nnet/sctp/socket.c-8291-\t\t\t\t\t\t\t  optlen, true);\n--\nnet/sctp/socket.c-8293-\tcase SCTP_GET_ASSOC_STATS:\nnet/sctp/socket.c:8294:\t\tretval = sctp_getsockopt_assoc_stats(sk, len, optval, optlen);\nnet/sctp/socket.c-8295-\t\tbreak;\nnet/sctp/socket.c-8296-\tcase SCTP_RECVRCVINFO:\nnet/sctp/socket.c:8297:\t\tretval = sctp_getsockopt_recvrcvinfo(sk, len, optval, optlen);\nnet/sctp/socket.c-8298-\t\tbreak;\nnet/sctp/socket.c-8299-\tcase SCTP_RECVNXTINFO:\nnet/sctp/socket.c:8300:\t\tretval = sctp_getsockopt_recvnxtinfo(sk, len, optval, optlen);\nnet/sctp/socket.c-8301-\t\tbreak;\nnet/sctp/socket.c-8302-\tcase SCTP_PR_SUPPORTED:\nnet/sctp/socket.c:8303:\t\tretval = sctp_getsockopt_pr_supported(sk, len, optval, optlen);\nnet/sctp/socket.c-8304-\t\tbreak;\nnet/sctp/socket.c-8305-\tcase SCTP_DEFAULT_PRINFO:\nnet/sctp/socket.c:8306:\t\tretval = sctp_getsockopt_default_prinfo(sk, len, optval,\nnet/sctp/socket.c-8307-\t\t\t\t\t\t\toptlen);\n--\nnet/sctp/socket.c-8309-\tcase SCTP_PR_ASSOC_STATUS:\nnet/sctp/socket.c:8310:\t\tretval = sctp_getsockopt_pr_assocstatus(sk, len, optval,\nnet/sctp/socket.c-8311-\t\t\t\t\t\t\toptlen);\n--\nnet/sctp/socket.c-8313-\tcase SCTP_PR_STREAM_STATUS:\nnet/sctp/socket.c:8314:\t\tretval = sctp_getsockopt_pr_streamstatus(sk, len, optval,\nnet/sctp/socket.c-8315-\t\t\t\t\t\t\t optlen);\n--\nnet/sctp/socket.c-8317-\tcase SCTP_RECONFIG_SUPPORTED:\nnet/sctp/socket.c:8318:\t\tretval = sctp_getsockopt_reconfig_supported(sk, len, optval,\nnet/sctp/socket.c-8319-\t\t\t\t\t\t\t    optlen);\n--\nnet/sctp/socket.c-8321-\tcase SCTP_ENABLE_STREAM_RESET:\nnet/sctp/socket.c:8322:\t\tretval = sctp_getsockopt_enable_strreset(sk, len, optval,\nnet/sctp/socket.c-8323-\t\t\t\t\t\t\t optlen);\n--\nnet/sctp/socket.c-8325-\tcase SCTP_STREAM_SCHEDULER:\nnet/sctp/socket.c:8326:\t\tretval = sctp_getsockopt_scheduler(sk, len, optval,\nnet/sctp/socket.c-8327-\t\t\t\t\t\t   optlen);\n--\nnet/sctp/socket.c-8329-\tcase SCTP_STREAM_SCHEDULER_VALUE:\nnet/sctp/socket.c:8330:\t\tretval = sctp_getsockopt_scheduler_value(sk, len, optval,\nnet/sctp/socket.c-8331-\t\t\t\t\t\t\t optlen);\n--\nnet/sctp/socket.c-8333-\tcase SCTP_INTERLEAVING_SUPPORTED:\nnet/sctp/socket.c:8334:\t\tretval = sctp_getsockopt_interleaving_supported(sk, len, optval,\nnet/sctp/socket.c-8335-\t\t\t\t\t\t\t\toptlen);\n--\nnet/sctp/socket.c-8337-\tcase SCTP_REUSE_PORT:\nnet/sctp/socket.c:8338:\t\tretval = sctp_getsockopt_reuse_port(sk, len, optval, optlen);\nnet/sctp/socket.c-8339-\t\tbreak;\nnet/sctp/socket.c-8340-\tcase SCTP_EVENT:\nnet/sctp/socket.c:8341:\t\tretval = sctp_getsockopt_event(sk, len, optval, optlen);\nnet/sctp/socket.c-8342-\t\tbreak;\nnet/sctp/socket.c-8343-\tcase SCTP_ASCONF_SUPPORTED:\nnet/sctp/socket.c:8344:\t\tretval = sctp_getsockopt_asconf_supported(sk, len, optval,\nnet/sctp/socket.c-8345-\t\t\t\t\t\t\t  optlen);\n--\nnet/sctp/socket.c-8347-\tcase SCTP_AUTH_SUPPORTED:\nnet/sctp/socket.c:8348:\t\tretval = sctp_getsockopt_auth_supported(sk, len, optval,\nnet/sctp/socket.c-8349-\t\t\t\t\t\t\toptlen);\n--\nnet/sctp/socket.c-8351-\tcase SCTP_ECN_SUPPORTED:\nnet/sctp/socket.c:8352:\t\tretval = sctp_getsockopt_ecn_supported(sk, len, optval, optlen);\nnet/sctp/socket.c-8353-\t\tbreak;\nnet/sctp/socket.c-8354-\tcase SCTP_EXPOSE_POTENTIALLY_FAILED_STATE:\nnet/sctp/socket.c:8355:\t\tretval = sctp_getsockopt_pf_expose(sk, len, optval, optlen);\nnet/sctp/socket.c-8356-\t\tbreak;\nnet/sctp/socket.c-8357-\tcase SCTP_REMOTE_UDP_ENCAPS_PORT:\nnet/sctp/socket.c:8358:\t\tretval = sctp_getsockopt_encap_port(sk, len, optval, optlen);\nnet/sctp/socket.c-8359-\t\tbreak;\nnet/sctp/socket.c-8360-\tcase SCTP_PLPMTUD_PROBE_INTERVAL:\nnet/sctp/socket.c:8361:\t\tretval = sctp_getsockopt_probe_interval(sk, len, optval, optlen);\nnet/sctp/socket.c-8362-\t\tbreak;\n--\nnet/sctp/socket.c=9660=struct proto sctp_prot = {\n--\nnet/sctp/socket.c-9670-\t.setsockopt  =\tsctp_setsockopt,\nnet/sctp/socket.c:9671:\t.getsockopt  =\tsctp_getsockopt,\nnet/sctp/socket.c-9672-\t.bpf_bypass_getsockopt\t= sctp_bpf_bypass_getsockopt,\n--\nnet/sctp/socket.c=9715=struct proto sctpv6_prot = {\n--\nnet/sctp/socket.c-9725-\t.setsockopt\t= sctp_setsockopt,\nnet/sctp/socket.c:9726:\t.getsockopt\t= sctp_getsockopt,\nnet/sctp/socket.c-9727-\t.bpf_bypass_getsockopt\t= sctp_bpf_bypass_getsockopt,\n"
}

7/2 2026/07/31 20:27 llm patch-evaluator
0m Model:
gemini-3.1-pro-preview

Args:
null

Results:
null

Tokens:
							input: 13541
							output: 33
							thoughts: 296
						

Thoughts:
**Analyzing the `sctp_getsockopt` Function**

Okay, so I'm looking at `sctp_getsockopt`. It's defined as a `static` function, which initially makes me think it might not be a globally accessible symbol. But then, it's being assigned to `sctp_prot.getsockopt` and `sctpv6_prot.getsockopt`. That's interesting, because that suggests it *is* part of the protocol's interface, even if not directly exposed in the symbol table.

So, since it's `static`, it won't be in the symbol table as a global symbol. I need to make sure this is exported or if there's a wrapper. Nope. It's assigned to `struct proto sctp_prot`, right? Alright.

The standard syscall path for `getsockopt` will eventually call `sk->sk_prot->getsockopt`. That means `sctp_getsockopt` *is* reachable indirectly.

The question is, should I add `sctp_getsockopt` to `FocusSymbols`? Normally, I might be hesitant with a static function because of potential inlining, but in this case, its address is actually being taken, because it's assigned to a function pointer. Therefore, inlining is out of the question. However, `sctp_getsockopt` is a large function...

Wait a second, it being static doesn't mean it's inlined here, since its address is taken. Alright. Good to know. But is there any other non-static function? Let me check `net/sctp/socket.c` to see if there are any exported or global functions that are related to this.



8/2 2026/07/31 20:27 tool grepper
0m Args:
{
  "Expression": "sctp_getsockopt",
  "PathPrefix": "net/sctp/"
}

Results:
{
  "Output": "net/sctp/socket.c=1381=struct compat_sctp_getaddrs_old {\n--\nnet/sctp/socket.c-1387-\nnet/sctp/socket.c:1388:static int sctp_getsockopt_connectx3(struct sock *sk, int len,\nnet/sctp/socket.c-1389-\t\t\t\t     char __user *optval,\n--\nnet/sctp/socket.c=5477=EXPORT_SYMBOL_GPL(sctp_transport_traverse_process);\n--\nnet/sctp/socket.c-5485- */\nnet/sctp/socket.c:5486:static int sctp_getsockopt_sctp_status(struct sock *sk, int len,\nnet/sctp/socket.c-5487-\t\t\t\t       char __user *optval,\n--\nnet/sctp/socket.c-5565- */\nnet/sctp/socket.c:5566:static int sctp_getsockopt_peer_addr_info(struct sock *sk, int len,\nnet/sctp/socket.c-5567-\t\t\t\t\t  char __user *optval,\n--\nnet/sctp/socket.c-5628- */\nnet/sctp/socket.c:5629:static int sctp_getsockopt_disable_fragments(struct sock *sk, int len,\nnet/sctp/socket.c-5630-\t\t\t\t\tchar __user *optval, int __user *optlen)\n--\nnet/sctp/socket.c-5650- */\nnet/sctp/socket.c:5651:static int sctp_getsockopt_events(struct sock *sk, int len, char __user *optval,\nnet/sctp/socket.c-5652-\t\t\t\t  int __user *optlen)\n--\nnet/sctp/socket.c-5685- */\nnet/sctp/socket.c:5686:static int sctp_getsockopt_autoclose(struct sock *sk, int len, char __user *optval, int __user *optlen)\nnet/sctp/socket.c-5687-{\n--\nnet/sctp/socket.c=5702=static int sctp_do_peeloff(struct sock *sk, sctp_assoc_t id,\n--\nnet/sctp/socket.c-5745-\nnet/sctp/socket.c:5746:static int sctp_getsockopt_peeloff_common(struct sock *sk, sctp_peeloff_arg_t *peeloff,\nnet/sctp/socket.c-5747-\t\t\t\t\t  struct file **newfile, unsigned flags)\n--\nnet/sctp/socket.c-5781-\nnet/sctp/socket.c:5782:static int sctp_getsockopt_peeloff(struct sock *sk, int len, char __user *optval, int __user *optlen)\nnet/sctp/socket.c-5783-{\n--\nnet/sctp/socket.c-5793-\nnet/sctp/socket.c:5794:\tretval = sctp_getsockopt_peeloff_common(sk, \u0026peeloff, \u0026newfile, 0);\nnet/sctp/socket.c-5795-\tif (retval \u003c 0)\n--\nnet/sctp/socket.c-5814-\nnet/sctp/socket.c:5815:static int sctp_getsockopt_peeloff_flags(struct sock *sk, int len,\nnet/sctp/socket.c-5816-\t\t\t\t\t char __user *optval, int __user *optlen)\n--\nnet/sctp/socket.c-5827-\nnet/sctp/socket.c:5828:\tretval = sctp_getsockopt_peeloff_common(sk, \u0026peeloff.p_arg,\nnet/sctp/socket.c-5829-\t\t\t\t\t\t\u0026newfile, peeloff.flags);\n--\nnet/sctp/socket.c-5981- */\nnet/sctp/socket.c:5982:static int sctp_getsockopt_peer_addr_params(struct sock *sk, int len,\nnet/sctp/socket.c-5983-\t\t\t\t\t    char __user *optval, int __user *optlen)\n--\nnet/sctp/socket.c-6124- */\nnet/sctp/socket.c:6125:static int sctp_getsockopt_delayed_ack(struct sock *sk, int len,\nnet/sctp/socket.c-6126-\t\t\t\t\t    char __user *optval,\n--\nnet/sctp/socket.c-6198- */\nnet/sctp/socket.c:6199:static int sctp_getsockopt_initmsg(struct sock *sk, int len, char __user *optval, int __user *optlen)\nnet/sctp/socket.c-6200-{\n--\nnet/sctp/socket.c-6211-\nnet/sctp/socket.c:6212:static int sctp_getsockopt_peer_addrs(struct sock *sk, int len,\nnet/sctp/socket.c-6213-\t\t\t\t      char __user *optval, int __user *optlen)\n--\nnet/sctp/socket.c=6263=static int sctp_copy_laddrs(struct sock *sk, __u16 port, void *to,\n--\nnet/sctp/socket.c-6307-\nnet/sctp/socket.c:6308:static int sctp_getsockopt_local_addrs(struct sock *sk, int len,\nnet/sctp/socket.c-6309-\t\t\t\t       char __user *optval, int __user *optlen)\n--\nnet/sctp/socket.c-6415- */\nnet/sctp/socket.c:6416:static int sctp_getsockopt_primary_addr(struct sock *sk, int len,\nnet/sctp/socket.c-6417-\t\t\t\t\tchar __user *optval, int __user *optlen)\n--\nnet/sctp/socket.c-6457- */\nnet/sctp/socket.c:6458:static int sctp_getsockopt_adaptation_layer(struct sock *sk, int len,\nnet/sctp/socket.c-6459-\t\t\t\t  char __user *optval, int __user *optlen)\n--\nnet/sctp/socket.c-6496- */\nnet/sctp/socket.c:6497:static int sctp_getsockopt_default_send_param(struct sock *sk,\nnet/sctp/socket.c-6498-\t\t\t\t\tint len, char __user *optval,\n--\nnet/sctp/socket.c-6542- */\nnet/sctp/socket.c:6543:static int sctp_getsockopt_default_sndinfo(struct sock *sk, int len,\nnet/sctp/socket.c-6544-\t\t\t\t\t   char __user *optval,\n--\nnet/sctp/socket.c-6593-\nnet/sctp/socket.c:6594:static int sctp_getsockopt_nodelay(struct sock *sk, int len,\nnet/sctp/socket.c-6595-\t\t\t\t   char __user *optval, int __user *optlen)\n--\nnet/sctp/socket.c-6622- */\nnet/sctp/socket.c:6623:static int sctp_getsockopt_rtoinfo(struct sock *sk, int len,\nnet/sctp/socket.c-6624-\t\t\t\tchar __user *optval,\n--\nnet/sctp/socket.c-6676- */\nnet/sctp/socket.c:6677:static int sctp_getsockopt_associnfo(struct sock *sk, int len,\nnet/sctp/socket.c-6678-\t\t\t\t     char __user *optval,\n--\nnet/sctp/socket.c-6745- */\nnet/sctp/socket.c:6746:static int sctp_getsockopt_mappedv4(struct sock *sk, int len,\nnet/sctp/socket.c-6747-\t\t\t\t    char __user *optval, int __user *optlen)\n--\nnet/sctp/socket.c-6768- */\nnet/sctp/socket.c:6769:static int sctp_getsockopt_context(struct sock *sk, int len,\nnet/sctp/socket.c-6770-\t\t\t\t   char __user *optval, int __user *optlen)\n--\nnet/sctp/socket.c-6825- */\nnet/sctp/socket.c:6826:static int sctp_getsockopt_maxseg(struct sock *sk, int len,\nnet/sctp/socket.c-6827-\t\t\t\t  char __user *optval, int __user *optlen)\n--\nnet/sctp/socket.c-6872- */\nnet/sctp/socket.c:6873:static int sctp_getsockopt_fragment_interleave(struct sock *sk, int len,\nnet/sctp/socket.c-6874-\t\t\t\t\t       char __user *optval, int __user *optlen)\n--\nnet/sctp/socket.c-6895- */\nnet/sctp/socket.c:6896:static int sctp_getsockopt_partial_delivery_point(struct sock *sk, int len,\nnet/sctp/socket.c-6897-\t\t\t\t\t\t  char __user *optval,\n--\nnet/sctp/socket.c-6919- */\nnet/sctp/socket.c:6920:static int sctp_getsockopt_maxburst(struct sock *sk, int len,\nnet/sctp/socket.c-6921-\t\t\t\t    char __user *optval,\n--\nnet/sctp/socket.c-6959-\nnet/sctp/socket.c:6960:static int sctp_getsockopt_hmac_ident(struct sock *sk, int len,\nnet/sctp/socket.c-6961-\t\t\t\t    char __user *optval, int __user *optlen)\n--\nnet/sctp/socket.c-6995-\nnet/sctp/socket.c:6996:static int sctp_getsockopt_active_key(struct sock *sk, int len,\nnet/sctp/socket.c-6997-\t\t\t\t    char __user *optval, int __user *optlen)\n--\nnet/sctp/socket.c-7031-\nnet/sctp/socket.c:7032:static int sctp_getsockopt_peer_auth_chunks(struct sock *sk, int len,\nnet/sctp/socket.c-7033-\t\t\t\t    char __user *optval, int __user *optlen)\n--\nnet/sctp/socket.c-7075-\nnet/sctp/socket.c:7076:static int sctp_getsockopt_local_auth_chunks(struct sock *sk, int len,\nnet/sctp/socket.c-7077-\t\t\t\t    char __user *optval, int __user *optlen)\n--\nnet/sctp/socket.c-7137- */\nnet/sctp/socket.c:7138:static int sctp_getsockopt_assoc_number(struct sock *sk, int len,\nnet/sctp/socket.c-7139-\t\t\t\t    char __user *optval, int __user *optlen)\n--\nnet/sctp/socket.c-7168- */\nnet/sctp/socket.c:7169:static int sctp_getsockopt_auto_asconf(struct sock *sk, int len,\nnet/sctp/socket.c-7170-\t\t\t\t   char __user *optval, int __user *optlen)\n--\nnet/sctp/socket.c-7193- */\nnet/sctp/socket.c:7194:static int sctp_getsockopt_assoc_ids(struct sock *sk, int len,\nnet/sctp/socket.c-7195-\t\t\t\t    char __user *optval, int __user *optlen)\n--\nnet/sctp/socket.c-7243- */\nnet/sctp/socket.c:7244:static int sctp_getsockopt_paddr_thresholds(struct sock *sk,\nnet/sctp/socket.c-7245-\t\t\t\t\t    char __user *optval, int len,\n--\nnet/sctp/socket.c-7302- */\nnet/sctp/socket.c:7303:static int sctp_getsockopt_assoc_stats(struct sock *sk, int len,\nnet/sctp/socket.c-7304-\t\t\t\t       char __user *optval,\n--\nnet/sctp/socket.c-7360-\nnet/sctp/socket.c:7361:static int sctp_getsockopt_recvrcvinfo(struct sock *sk,\tint len,\nnet/sctp/socket.c-7362-\t\t\t\t       char __user *optval,\n--\nnet/sctp/socket.c-7380-\nnet/sctp/socket.c:7381:static int sctp_getsockopt_recvnxtinfo(struct sock *sk,\tint len,\nnet/sctp/socket.c-7382-\t\t\t\t       char __user *optval,\n--\nnet/sctp/socket.c-7400-\nnet/sctp/socket.c:7401:static int sctp_getsockopt_pr_supported(struct sock *sk, int len,\nnet/sctp/socket.c-7402-\t\t\t\t\tchar __user *optval,\n--\nnet/sctp/socket.c-7439-\nnet/sctp/socket.c:7440:static int sctp_getsockopt_default_prinfo(struct sock *sk, int len,\nnet/sctp/socket.c-7441-\t\t\t\t\t  char __user *optval,\n--\nnet/sctp/socket.c-7485-\nnet/sctp/socket.c:7486:static int sctp_getsockopt_pr_assocstatus(struct sock *sk, int len,\nnet/sctp/socket.c-7487-\t\t\t\t\t  char __user *optval,\n--\nnet/sctp/socket.c-7544-\nnet/sctp/socket.c:7545:static int sctp_getsockopt_pr_streamstatus(struct sock *sk, int len,\nnet/sctp/socket.c-7546-\t\t\t\t\t   char __user *optval,\n--\nnet/sctp/socket.c-7608-\nnet/sctp/socket.c:7609:static int sctp_getsockopt_reconfig_supported(struct sock *sk, int len,\nnet/sctp/socket.c-7610-\t\t\t\t\t      char __user *optval,\n--\nnet/sctp/socket.c-7647-\nnet/sctp/socket.c:7648:static int sctp_getsockopt_enable_strreset(struct sock *sk, int len,\nnet/sctp/socket.c-7649-\t\t\t\t\t   char __user *optval,\n--\nnet/sctp/socket.c-7686-\nnet/sctp/socket.c:7687:static int sctp_getsockopt_scheduler(struct sock *sk, int len,\nnet/sctp/socket.c-7688-\t\t\t\t     char __user *optval,\n--\nnet/sctp/socket.c-7725-\nnet/sctp/socket.c:7726:static int sctp_getsockopt_scheduler_value(struct sock *sk, int len,\nnet/sctp/socket.c-7727-\t\t\t\t\t   char __user *optval,\n--\nnet/sctp/socket.c-7767-\nnet/sctp/socket.c:7768:static int sctp_getsockopt_interleaving_supported(struct sock *sk, int len,\nnet/sctp/socket.c-7769-\t\t\t\t\t\t  char __user *optval,\n--\nnet/sctp/socket.c-7806-\nnet/sctp/socket.c:7807:static int sctp_getsockopt_reuse_port(struct sock *sk, int len,\nnet/sctp/socket.c-7808-\t\t\t\t      char __user *optval,\n--\nnet/sctp/socket.c-7826-\nnet/sctp/socket.c:7827:static int sctp_getsockopt_event(struct sock *sk, int len, char __user *optval,\nnet/sctp/socket.c-7828-\t\t\t\t int __user *optlen)\n--\nnet/sctp/socket.c-7861-\nnet/sctp/socket.c:7862:static int sctp_getsockopt_asconf_supported(struct sock *sk, int len,\nnet/sctp/socket.c-7863-\t\t\t\t\t    char __user *optval,\n--\nnet/sctp/socket.c-7900-\nnet/sctp/socket.c:7901:static int sctp_getsockopt_auth_supported(struct sock *sk, int len,\nnet/sctp/socket.c-7902-\t\t\t\t\t  char __user *optval,\n--\nnet/sctp/socket.c-7939-\nnet/sctp/socket.c:7940:static int sctp_getsockopt_ecn_supported(struct sock *sk, int len,\nnet/sctp/socket.c-7941-\t\t\t\t\t char __user *optval,\n--\nnet/sctp/socket.c-7978-\nnet/sctp/socket.c:7979:static int sctp_getsockopt_pf_expose(struct sock *sk, int len,\nnet/sctp/socket.c-7980-\t\t\t\t     char __user *optval,\n--\nnet/sctp/socket.c-8017-\nnet/sctp/socket.c:8018:static int sctp_getsockopt_encap_port(struct sock *sk, int len,\nnet/sctp/socket.c-8019-\t\t\t\t      char __user *optval, int __user *optlen)\n--\nnet/sctp/socket.c-8076-\nnet/sctp/socket.c:8077:static int sctp_getsockopt_probe_interval(struct sock *sk, int len,\nnet/sctp/socket.c-8078-\t\t\t\t\t  char __user *optval,\n--\nnet/sctp/socket.c-8136-\nnet/sctp/socket.c:8137:static int sctp_getsockopt(struct sock *sk, int level, int optname,\nnet/sctp/socket.c-8138-\t\t\t   char __user *optval, int __user *optlen)\n--\nnet/sctp/socket.c-8167-\tcase SCTP_STATUS:\nnet/sctp/socket.c:8168:\t\tretval = sctp_getsockopt_sctp_status(sk, len, optval, optlen);\nnet/sctp/socket.c-8169-\t\tbreak;\nnet/sctp/socket.c-8170-\tcase SCTP_DISABLE_FRAGMENTS:\nnet/sctp/socket.c:8171:\t\tretval = sctp_getsockopt_disable_fragments(sk, len, optval,\nnet/sctp/socket.c-8172-\t\t\t\t\t\t\t   optlen);\n--\nnet/sctp/socket.c-8174-\tcase SCTP_EVENTS:\nnet/sctp/socket.c:8175:\t\tretval = sctp_getsockopt_events(sk, len, optval, optlen);\nnet/sctp/socket.c-8176-\t\tbreak;\nnet/sctp/socket.c-8177-\tcase SCTP_AUTOCLOSE:\nnet/sctp/socket.c:8178:\t\tretval = sctp_getsockopt_autoclose(sk, len, optval, optlen);\nnet/sctp/socket.c-8179-\t\tbreak;\nnet/sctp/socket.c-8180-\tcase SCTP_SOCKOPT_PEELOFF:\nnet/sctp/socket.c:8181:\t\tretval = sctp_getsockopt_peeloff(sk, len, optval, optlen);\nnet/sctp/socket.c-8182-\t\tbreak;\nnet/sctp/socket.c-8183-\tcase SCTP_SOCKOPT_PEELOFF_FLAGS:\nnet/sctp/socket.c:8184:\t\tretval = sctp_getsockopt_peeloff_flags(sk, len, optval, optlen);\nnet/sctp/socket.c-8185-\t\tbreak;\nnet/sctp/socket.c-8186-\tcase SCTP_PEER_ADDR_PARAMS:\nnet/sctp/socket.c:8187:\t\tretval = sctp_getsockopt_peer_addr_params(sk, len, optval,\nnet/sctp/socket.c-8188-\t\t\t\t\t\t\t  optlen);\n--\nnet/sctp/socket.c-8190-\tcase SCTP_DELAYED_SACK:\nnet/sctp/socket.c:8191:\t\tretval = sctp_getsockopt_delayed_ack(sk, len, optval,\nnet/sctp/socket.c-8192-\t\t\t\t\t\t\t  optlen);\n--\nnet/sctp/socket.c-8194-\tcase SCTP_INITMSG:\nnet/sctp/socket.c:8195:\t\tretval = sctp_getsockopt_initmsg(sk, len, optval, optlen);\nnet/sctp/socket.c-8196-\t\tbreak;\nnet/sctp/socket.c-8197-\tcase SCTP_GET_PEER_ADDRS:\nnet/sctp/socket.c:8198:\t\tretval = sctp_getsockopt_peer_addrs(sk, len, optval,\nnet/sctp/socket.c-8199-\t\t\t\t\t\t    optlen);\n--\nnet/sctp/socket.c-8201-\tcase SCTP_GET_LOCAL_ADDRS:\nnet/sctp/socket.c:8202:\t\tretval = sctp_getsockopt_local_addrs(sk, len, optval,\nnet/sctp/socket.c-8203-\t\t\t\t\t\t     optlen);\n--\nnet/sctp/socket.c-8205-\tcase SCTP_SOCKOPT_CONNECTX3:\nnet/sctp/socket.c:8206:\t\tretval = sctp_getsockopt_connectx3(sk, len, optval, optlen);\nnet/sctp/socket.c-8207-\t\tbreak;\nnet/sctp/socket.c-8208-\tcase SCTP_DEFAULT_SEND_PARAM:\nnet/sctp/socket.c:8209:\t\tretval = sctp_getsockopt_default_send_param(sk, len,\nnet/sctp/socket.c-8210-\t\t\t\t\t\t\t    optval, optlen);\n--\nnet/sctp/socket.c-8212-\tcase SCTP_DEFAULT_SNDINFO:\nnet/sctp/socket.c:8213:\t\tretval = sctp_getsockopt_default_sndinfo(sk, len,\nnet/sctp/socket.c-8214-\t\t\t\t\t\t\t optval, optlen);\n--\nnet/sctp/socket.c-8216-\tcase SCTP_PRIMARY_ADDR:\nnet/sctp/socket.c:8217:\t\tretval = sctp_getsockopt_primary_addr(sk, len, optval, optlen);\nnet/sctp/socket.c-8218-\t\tbreak;\nnet/sctp/socket.c-8219-\tcase SCTP_NODELAY:\nnet/sctp/socket.c:8220:\t\tretval = sctp_getsockopt_nodelay(sk, len, optval, optlen);\nnet/sctp/socket.c-8221-\t\tbreak;\nnet/sctp/socket.c-8222-\tcase SCTP_RTOINFO:\nnet/sctp/socket.c:8223:\t\tretval = sctp_getsockopt_rtoinfo(sk, len, optval, optlen);\nnet/sctp/socket.c-8224-\t\tbreak;\nnet/sctp/socket.c-8225-\tcase SCTP_ASSOCINFO:\nnet/sctp/socket.c:8226:\t\tretval = sctp_getsockopt_associnfo(sk, len, optval, optlen);\nnet/sctp/socket.c-8227-\t\tbreak;\nnet/sctp/socket.c-8228-\tcase SCTP_I_WANT_MAPPED_V4_ADDR:\nnet/sctp/socket.c:8229:\t\tretval = sctp_getsockopt_mappedv4(sk, len, optval, optlen);\nnet/sctp/socket.c-8230-\t\tbreak;\nnet/sctp/socket.c-8231-\tcase SCTP_MAXSEG:\nnet/sctp/socket.c:8232:\t\tretval = sctp_getsockopt_maxseg(sk, len, optval, optlen);\nnet/sctp/socket.c-8233-\t\tbreak;\nnet/sctp/socket.c-8234-\tcase SCTP_GET_PEER_ADDR_INFO:\nnet/sctp/socket.c:8235:\t\tretval = sctp_getsockopt_peer_addr_info(sk, len, optval,\nnet/sctp/socket.c-8236-\t\t\t\t\t\t\toptlen);\n--\nnet/sctp/socket.c-8238-\tcase SCTP_ADAPTATION_LAYER:\nnet/sctp/socket.c:8239:\t\tretval = sctp_getsockopt_adaptation_layer(sk, len, optval,\nnet/sctp/socket.c-8240-\t\t\t\t\t\t\toptlen);\n--\nnet/sctp/socket.c-8242-\tcase SCTP_CONTEXT:\nnet/sctp/socket.c:8243:\t\tretval = sctp_getsockopt_context(sk, len, optval, optlen);\nnet/sctp/socket.c-8244-\t\tbreak;\nnet/sctp/socket.c-8245-\tcase SCTP_FRAGMENT_INTERLEAVE:\nnet/sctp/socket.c:8246:\t\tretval = sctp_getsockopt_fragment_interleave(sk, len, optval,\nnet/sctp/socket.c-8247-\t\t\t\t\t\t\t     optlen);\n--\nnet/sctp/socket.c-8249-\tcase SCTP_PARTIAL_DELIVERY_POINT:\nnet/sctp/socket.c:8250:\t\tretval = sctp_getsockopt_partial_delivery_point(sk, len, optval,\nnet/sctp/socket.c-8251-\t\t\t\t\t\t\t\toptlen);\n--\nnet/sctp/socket.c-8253-\tcase SCTP_MAX_BURST:\nnet/sctp/socket.c:8254:\t\tretval = sctp_getsockopt_maxburst(sk, len, optval, optlen);\nnet/sctp/socket.c-8255-\t\tbreak;\n--\nnet/sctp/socket.c-8262-\tcase SCTP_HMAC_IDENT:\nnet/sctp/socket.c:8263:\t\tretval = sctp_getsockopt_hmac_ident(sk, len, optval, optlen);\nnet/sctp/socket.c-8264-\t\tbreak;\nnet/sctp/socket.c-8265-\tcase SCTP_AUTH_ACTIVE_KEY:\nnet/sctp/socket.c:8266:\t\tretval = sctp_getsockopt_active_key(sk, len, optval, optlen);\nnet/sctp/socket.c-8267-\t\tbreak;\nnet/sctp/socket.c-8268-\tcase SCTP_PEER_AUTH_CHUNKS:\nnet/sctp/socket.c:8269:\t\tretval = sctp_getsockopt_peer_auth_chunks(sk, len, optval,\nnet/sctp/socket.c-8270-\t\t\t\t\t\t\toptlen);\n--\nnet/sctp/socket.c-8272-\tcase SCTP_LOCAL_AUTH_CHUNKS:\nnet/sctp/socket.c:8273:\t\tretval = sctp_getsockopt_local_auth_chunks(sk, len, optval,\nnet/sctp/socket.c-8274-\t\t\t\t\t\t\toptlen);\n--\nnet/sctp/socket.c-8276-\tcase SCTP_GET_ASSOC_NUMBER:\nnet/sctp/socket.c:8277:\t\tretval = sctp_getsockopt_assoc_number(sk, len, optval, optlen);\nnet/sctp/socket.c-8278-\t\tbreak;\nnet/sctp/socket.c-8279-\tcase SCTP_GET_ASSOC_ID_LIST:\nnet/sctp/socket.c:8280:\t\tretval = sctp_getsockopt_assoc_ids(sk, len, optval, optlen);\nnet/sctp/socket.c-8281-\t\tbreak;\nnet/sctp/socket.c-8282-\tcase SCTP_AUTO_ASCONF:\nnet/sctp/socket.c:8283:\t\tretval = sctp_getsockopt_auto_asconf(sk, len, optval, optlen);\nnet/sctp/socket.c-8284-\t\tbreak;\nnet/sctp/socket.c-8285-\tcase SCTP_PEER_ADDR_THLDS:\nnet/sctp/socket.c:8286:\t\tretval = sctp_getsockopt_paddr_thresholds(sk, optval, len,\nnet/sctp/socket.c-8287-\t\t\t\t\t\t\t  optlen, false);\n--\nnet/sctp/socket.c-8289-\tcase SCTP_PEER_ADDR_THLDS_V2:\nnet/sctp/socket.c:8290:\t\tretval = sctp_getsockopt_paddr_thresholds(sk, optval, len,\nnet/sctp/socket.c-8291-\t\t\t\t\t\t\t  optlen, true);\n--\nnet/sctp/socket.c-8293-\tcase SCTP_GET_ASSOC_STATS:\nnet/sctp/socket.c:8294:\t\tretval = sctp_getsockopt_assoc_stats(sk, len, optval, optlen);\nnet/sctp/socket.c-8295-\t\tbreak;\nnet/sctp/socket.c-8296-\tcase SCTP_RECVRCVINFO:\nnet/sctp/socket.c:8297:\t\tretval = sctp_getsockopt_recvrcvinfo(sk, len, optval, optlen);\nnet/sctp/socket.c-8298-\t\tbreak;\nnet/sctp/socket.c-8299-\tcase SCTP_RECVNXTINFO:\nnet/sctp/socket.c:8300:\t\tretval = sctp_getsockopt_recvnxtinfo(sk, len, optval, optlen);\nnet/sctp/socket.c-8301-\t\tbreak;\nnet/sctp/socket.c-8302-\tcase SCTP_PR_SUPPORTED:\nnet/sctp/socket.c:8303:\t\tretval = sctp_getsockopt_pr_supported(sk, len, optval, optlen);\nnet/sctp/socket.c-8304-\t\tbreak;\nnet/sctp/socket.c-8305-\tcase SCTP_DEFAULT_PRINFO:\nnet/sctp/socket.c:8306:\t\tretval = sctp_getsockopt_default_prinfo(sk, len, optval,\nnet/sctp/socket.c-8307-\t\t\t\t\t\t\toptlen);\n--\nnet/sctp/socket.c-8309-\tcase SCTP_PR_ASSOC_STATUS:\nnet/sctp/socket.c:8310:\t\tretval = sctp_getsockopt_pr_assocstatus(sk, len, optval,\nnet/sctp/socket.c-8311-\t\t\t\t\t\t\toptlen);\n--\nnet/sctp/socket.c-8313-\tcase SCTP_PR_STREAM_STATUS:\nnet/sctp/socket.c:8314:\t\tretval = sctp_getsockopt_pr_streamstatus(sk, len, optval,\nnet/sctp/socket.c-8315-\t\t\t\t\t\t\t optlen);\n--\nnet/sctp/socket.c-8317-\tcase SCTP_RECONFIG_SUPPORTED:\nnet/sctp/socket.c:8318:\t\tretval = sctp_getsockopt_reconfig_supported(sk, len, optval,\nnet/sctp/socket.c-8319-\t\t\t\t\t\t\t    optlen);\n--\nnet/sctp/socket.c-8321-\tcase SCTP_ENABLE_STREAM_RESET:\nnet/sctp/socket.c:8322:\t\tretval = sctp_getsockopt_enable_strreset(sk, len, optval,\nnet/sctp/socket.c-8323-\t\t\t\t\t\t\t optlen);\n--\nnet/sctp/socket.c-8325-\tcase SCTP_STREAM_SCHEDULER:\nnet/sctp/socket.c:8326:\t\tretval = sctp_getsockopt_scheduler(sk, len, optval,\nnet/sctp/socket.c-8327-\t\t\t\t\t\t   optlen);\n--\nnet/sctp/socket.c-8329-\tcase SCTP_STREAM_SCHEDULER_VALUE:\nnet/sctp/socket.c:8330:\t\tretval = sctp_getsockopt_scheduler_value(sk, len, optval,\nnet/sctp/socket.c-8331-\t\t\t\t\t\t\t optlen);\n--\nnet/sctp/socket.c-8333-\tcase SCTP_INTERLEAVING_SUPPORTED:\nnet/sctp/socket.c:8334:\t\tretval = sctp_getsockopt_interleaving_supported(sk, len, optval,\nnet/sctp/socket.c-8335-\t\t\t\t\t\t\t\toptlen);\n--\nnet/sctp/socket.c-8337-\tcase SCTP_REUSE_PORT:\nnet/sctp/socket.c:8338:\t\tretval = sctp_getsockopt_reuse_port(sk, len, optval, optlen);\nnet/sctp/socket.c-8339-\t\tbreak;\nnet/sctp/socket.c-8340-\tcase SCTP_EVENT:\nnet/sctp/socket.c:8341:\t\tretval = sctp_getsockopt_event(sk, len, optval, optlen);\nnet/sctp/socket.c-8342-\t\tbreak;\nnet/sctp/socket.c-8343-\tcase SCTP_ASCONF_SUPPORTED:\nnet/sctp/socket.c:8344:\t\tretval = sctp_getsockopt_asconf_supported(sk, len, optval,\nnet/sctp/socket.c-8345-\t\t\t\t\t\t\t  optlen);\n--\nnet/sctp/socket.c-8347-\tcase SCTP_AUTH_SUPPORTED:\nnet/sctp/socket.c:8348:\t\tretval = sctp_getsockopt_auth_supported(sk, len, optval,\nnet/sctp/socket.c-8349-\t\t\t\t\t\t\toptlen);\n--\nnet/sctp/socket.c-8351-\tcase SCTP_ECN_SUPPORTED:\nnet/sctp/socket.c:8352:\t\tretval = sctp_getsockopt_ecn_supported(sk, len, optval, optlen);\nnet/sctp/socket.c-8353-\t\tbreak;\nnet/sctp/socket.c-8354-\tcase SCTP_EXPOSE_POTENTIALLY_FAILED_STATE:\nnet/sctp/socket.c:8355:\t\tretval = sctp_getsockopt_pf_expose(sk, len, optval, optlen);\nnet/sctp/socket.c-8356-\t\tbreak;\nnet/sctp/socket.c-8357-\tcase SCTP_REMOTE_UDP_ENCAPS_PORT:\nnet/sctp/socket.c:8358:\t\tretval = sctp_getsockopt_encap_port(sk, len, optval, optlen);\nnet/sctp/socket.c-8359-\t\tbreak;\nnet/sctp/socket.c-8360-\tcase SCTP_PLPMTUD_PROBE_INTERVAL:\nnet/sctp/socket.c:8361:\t\tretval = sctp_getsockopt_probe_interval(sk, len, optval, optlen);\nnet/sctp/socket.c-8362-\t\tbreak;\n--\nnet/sctp/socket.c=9660=struct proto sctp_prot = {\n--\nnet/sctp/socket.c-9670-\t.setsockopt  =\tsctp_setsockopt,\nnet/sctp/socket.c:9671:\t.getsockopt  =\tsctp_getsockopt,\nnet/sctp/socket.c-9672-\t.bpf_bypass_getsockopt\t= sctp_bpf_bypass_getsockopt,\n--\nnet/sctp/socket.c=9715=struct proto sctpv6_prot = {\n--\nnet/sctp/socket.c-9725-\t.setsockopt\t= sctp_setsockopt,\nnet/sctp/socket.c:9726:\t.getsockopt\t= sctp_getsockopt,\nnet/sctp/socket.c-9727-\t.bpf_bypass_getsockopt\t= sctp_bpf_bypass_getsockopt,\n"
}

9/2 2026/07/31 20:27 llm patch-evaluator
0m Model:
gemini-3.1-pro-preview

Args:
null

Results:
null

Tokens:
							input: 24479
							output: 37
							thoughts: 196
						

Thoughts:
**Examining the sctp_getsockopt Function**

Okay, let's see what we can leverage here. I need to figure out if there are alternative functions in this area we can use, so first, I'm noting that `sctp_getsockopt` is static, but assigned to `sctp_prot.getsockopt`. That's a key detail. Now, I have to check if there are any non-static functions that actually *call* `sctp_getsockopt`. No, it is called through a function pointer. Interesting. What about `sctp_getsockopt_local_auth_chunks`? That's also static.

Are there *any* exported functions that might be suitable? Hold on... maybe `sctp_getsockopt` is actually fine, even being static. It's a sizable function, so inlining is probably not happening. But wait... since `sctp_getsockopt` is assigned to a function pointer, it's *definitely* not inlined. Good! Let's just be thorough and verify there aren't any other non-static functions of interest in `net/sctp/socket.c`.



10/2 2026/07/31 20:27 tool grepper
0m Args:
{
  "Expression": "^int sctp_.*\\(",
  "PathPrefix": "net/sctp/socket.c"
}

Results:
{
  "Output": "net/sctp/socket.c=758=static int sctp_send_asconf_del_ip(struct sock\t\t*sk,\n--\nnet/sctp/socket.c-909-/* set addr events to assocs in the endpoint.  ep and addr_wq must be locked */\nnet/sctp/socket.c:910:int sctp_asconf_mgmt(struct sctp_sock *sp, struct sctp_sockaddr_entry *addrw)\nnet/sctp/socket.c-911-{\n--\nnet/sctp/socket.c=4815=static int sctp_connect(struct sock *sk, struct sockaddr *addr,\n--\nnet/sctp/socket.c-4833-\nnet/sctp/socket.c:4834:int sctp_inet_connect(struct socket *sock, struct sockaddr_unsized *uaddr,\nnet/sctp/socket.c-4835-\t\t      int addr_len, int flags)\n--\nnet/sctp/socket.c=5208=static void sctp_shutdown(struct sock *sk, int how)\n--\nnet/sctp/socket.c-5226-\nnet/sctp/socket.c:5227:int sctp_get_sctp_info(struct sock *sk, struct sctp_association *asoc,\nnet/sctp/socket.c-5228-\t\t       struct sctp_info *info)\n--\nnet/sctp/socket.c=5354=struct sctp_transport *sctp_transport_get_idx(struct net *net,\n--\nnet/sctp/socket.c-5371-\nnet/sctp/socket.c:5372:int sctp_for_each_endpoint(int (*cb)(struct sctp_endpoint *, void *),\nnet/sctp/socket.c-5373-\t\t\t   struct net *net, int *pos, void *p) {\n--\nnet/sctp/socket.c=5407=EXPORT_SYMBOL_GPL(sctp_for_each_endpoint);\nnet/sctp/socket.c-5408-\nnet/sctp/socket.c:5409:int sctp_transport_lookup_process(sctp_callback_t cb, struct net *net,\nnet/sctp/socket.c-5410-\t\t\t\t  const union sctp_addr *laddr,\n--\nnet/sctp/socket.c=5436=EXPORT_SYMBOL_GPL(sctp_transport_lookup_process);\nnet/sctp/socket.c-5437-\nnet/sctp/socket.c:5438:int sctp_transport_traverse_process(sctp_callback_t cb, sctp_callback_t cb_done,\nnet/sctp/socket.c-5439-\t\t\t\t    struct net *net, int *pos, void *p)\n--\nnet/sctp/socket.c=8601=static int sctp_listen_start(struct sock *sk, int backlog)\n--\nnet/sctp/socket.c-8655- */\nnet/sctp/socket.c:8656:int sctp_inet_listen(struct socket *sock, int backlog)\nnet/sctp/socket.c-8657-{\n"
}

11/2 2026/07/31 20:27 llm patch-evaluator
0m Model:
gemini-3.1-pro-preview

Args:
null

Results:
null

Tokens:
							input: 25850
							output: 42
							thoughts: 181
						

Thoughts:
**Analyzing SCTP Getsockopt Implementations**

Okay, so I'm looking at how `getsockopt` is handled for SCTP. The core entry point, `sctp_getsockopt`, is declared static, which initially raised a flag. However, it's the function that's ultimately assigned to `sctp_prot.getsockopt`. Let's step back and consider if there are any other `getsockopt` functions in play here.

Right, so even though `sctp_getsockopt` and `sctp_getsockopt_local_auth_chunks` are static, Syzkaller *should* be able to target them, provided they haven't been inlined by the compiler. We know `sctp_getsockopt` is definitely *not* inlined. The other function, `sctp_getsockopt_local_auth_chunks`, is potentially problematic. It's plausible that the compiler chose to inline it, but it's also large enough that it might have been left as a standalone function. So, the next logical step is to confirm whether `sctp_getsockopt_local_auth_chunks` actually got inlined. That's the key question.



12/2 2026/07/31 20:27 tool grepper
0m Args:
{
  "Expression": "sctp_getsockopt_local_auth_chunks",
  "PathPrefix": "net/sctp/socket.c"
}

Results:
{
  "Output": "net/sctp/socket.c=7032=static int sctp_getsockopt_peer_auth_chunks(struct sock *sk, int len,\n--\nnet/sctp/socket.c-7075-\nnet/sctp/socket.c:7076:static int sctp_getsockopt_local_auth_chunks(struct sock *sk, int len,\nnet/sctp/socket.c-7077-\t\t\t\t    char __user *optval, int __user *optlen)\n--\nnet/sctp/socket.c=8137=static int sctp_getsockopt(struct sock *sk, int level, int optname,\n--\nnet/sctp/socket.c-8272-\tcase SCTP_LOCAL_AUTH_CHUNKS:\nnet/sctp/socket.c:8273:\t\tretval = sctp_getsockopt_local_auth_chunks(sk, len, optval,\nnet/sctp/socket.c-8274-\t\t\t\t\t\t\toptlen);\n"
}

13/2 2026/07/31 20:27 llm patch-evaluator
0m Model:
gemini-3.1-pro-preview

Args:
null

Results:
null

Tokens:
							input: 26615
							output: 38
							thoughts: 22
						

Thoughts:
Okay, here's my thought process laid out, assuming I'm already deep into this code and understand the context:

**Analyzing the Function `sctp_getsockopt_local_auth_chunks`**

Right, let's take a quick look at the size of `sctp_getsockopt_local_auth_chunks`. I need to figure out what kind of memory footprint this function has, especially as it relates to the overall performance and resource usage of the SCTP implementation. Understanding its size directly contributes to my ability to optimize this part of the code and avoid potential buffer overflows or inefficient memory allocation. Is it a small lookup table? A complex data structure? It's important to understand the scale of it. It is also important in debugging, as understanding the amount of resources a function uses can point towards unexpected bottlenecks. It is time to determine its size.



14/2 2026/07/31 20:27 tool read-file
0m Args:
{
  "File": "net/sctp/socket.c",
  "FirstLine": 7076,
  "LineCount": 50
}

Results:
{
  "Contents": "7076:\tstatic int sctp_getsockopt_local_auth_chunks(struct sock *sk, int len,\n7077:\t\t\t\t\t    char __user *optval, int __user *optlen)\n7078:\t{\n7079:\t\tstruct sctp_endpoint *ep = sctp_sk(sk)-\u003eep;\n7080:\t\tstruct sctp_authchunks __user *p = (void __user *)optval;\n7081:\t\tstruct sctp_authchunks val;\n7082:\t\tstruct sctp_association *asoc;\n7083:\t\tstruct sctp_chunks_param *ch;\n7084:\t\tu32    num_chunks = 0;\n7085:\t\tchar __user *to;\n7086:\t\n7087:\t\tif (len \u003c sizeof(struct sctp_authchunks))\n7088:\t\t\treturn -EINVAL;\n7089:\t\n7090:\t\tif (copy_from_user(\u0026val, optval, sizeof(val)))\n7091:\t\t\treturn -EFAULT;\n7092:\t\n7093:\t\tto = p-\u003egauth_chunks;\n7094:\t\tasoc = sctp_id2assoc(sk, val.gauth_assoc_id);\n7095:\t\tif (!asoc \u0026\u0026 val.gauth_assoc_id != SCTP_FUTURE_ASSOC \u0026\u0026\n7096:\t\t    sctp_style(sk, UDP))\n7097:\t\t\treturn -EINVAL;\n7098:\t\n7099:\t\tif (asoc) {\n7100:\t\t\tif (!asoc-\u003epeer.auth_capable)\n7101:\t\t\t\treturn -EACCES;\n7102:\t\t\tch = (struct sctp_chunks_param *)asoc-\u003ec.auth_chunks;\n7103:\t\t} else {\n7104:\t\t\tif (!ep-\u003eauth_enable)\n7105:\t\t\t\treturn -EACCES;\n7106:\t\t\tch = ep-\u003eauth_chunk_list;\n7107:\t\t}\n7108:\t\tif (!ch)\n7109:\t\t\tgoto num;\n7110:\t\n7111:\t\tnum_chunks = ntohs(ch-\u003eparam_hdr.length) - sizeof(struct sctp_paramhdr);\n7112:\t\t/* asoc-\u003ec.auth_chunks[] holds at most SCTP_AUTH_MAX_CHUNKS bytes but its\n7113:\t\t * length is restored from the state cookie and is not bounded here;\n7114:\t\t * clamp so an oversized length cannot read past the array.\n7115:\t\t */\n7116:\t\tif (num_chunks \u003e SCTP_AUTH_MAX_CHUNKS)\n7117:\t\t\tnum_chunks = SCTP_AUTH_MAX_CHUNKS;\n7118:\t\tif (len \u003c sizeof(struct sctp_authchunks) + num_chunks)\n7119:\t\t\treturn -EINVAL;\n7120:\t\n7121:\t\tif (copy_to_user(to, ch-\u003echunks, num_chunks))\n7122:\t\t\treturn -EFAULT;\n7123:\tnum:\n7124:\t\tlen = sizeof(struct sctp_authchunks) + num_chunks;\n7125:\t\tif (put_user(len, optlen))\n"
}

15/2 2026/07/31 20:27 llm patch-evaluator
0m Model:
gemini-3.1-pro-preview

Args:
null

Results:
null

Tokens:
							input: 27725
							output: 34
							thoughts: 125
						

Thoughts:
**Analyzing Function Inlining and Symbol Resolution**

Okay, so I'm looking at this function, `sctp_getsockopt_local_auth_chunks`, and it's a fair size. My initial thought was that it *might* get inlined directly into `sctp_getsockopt`, which, I recall, is a rather substantial function. But then I remembered something crucial about compiler behavior with large switch statements, which `sctp_getsockopt` is. Compilers are generally reluctant to inline functions called within giant switch statements. They're trying to keep the stack frame size manageable and optimized.

Therefore, `sctp_getsockopt_local_auth_chunks` is almost certainly going to remain a distinct symbol, not getting directly merged. To be thorough and ensure this code path is covered during analysis, I should also explicitly include `sctp_getsockopt` in `FocusSymbols`.

Now, before I move on, let me quickly make sure I'm taking the configuration into account. I need to remember to include `IP_SCTP` in the list of relevant configurations.



16/2 2026/07/31 20:27 tool grepper
0m Args:
{
  "Expression": "config IP_SCTP",
  "PathPrefix": "net/sctp/Kconfig"
}

Results:
{
  "Output": "net/sctp/Kconfig-5-\nnet/sctp/Kconfig:6:menuconfig IP_SCTP\nnet/sctp/Kconfig-7-\ttristate \"The SCTP Protocol\"\n"
}

17/2 2026/07/31 20:27 llm patch-evaluator
0m Model:
gemini-3.1-pro-preview

Args:
null

Results:
null

Tokens:
							input: 28189
							output: 33
							thoughts: 51
						

Thoughts:
**Analyzing the Configuration and Code Changes**

Okay, so I'm looking at this configuration, and it seems `IP_SCTP` is the key piece here. I need to make sure I'm not missing anything else related to the SCTP configuration. Let me quickly scan for other relevant options, just to be thorough. It looks like the patch I'm examining directly touches `net/sctp/socket.c`, which is the core of the SCTP socket implementation. Now, a thought: Is `SCTP_AUTH` a configuration parameter? That would be useful information.



18/2 2026/07/31 20:27 tool grepper
0m Error:
no matches

Args:
{
  "Expression": "config SCTP_AUTH",
  "PathPrefix": "net/sctp/Kconfig"
}

Results:
{
  "error": "no matches"
}

19/2 2026/07/31 20:27 llm patch-evaluator
0m Model:
gemini-3.1-pro-preview

Args:
null

Results:
null

Tokens:
							input: 28413
							output: 34
							thoughts: 30
						

Thoughts:
Okay, here's my take on those thoughts, framed as an expert's internal monologue:

**SCTP Authentication Conundrum**

Alright, no `SCTP_AUTH` configuration option present. That's a bit odd, isn't it? My initial assumption was that it would be enabled in some way, but clearly, I need to dig deeper. Time to consult the `net/sctp/Kconfig` file. That's the definitive source for kernel module configuration options related to SCTP. It should illuminate any other related configs, dependencies, or maybe even reveal why `SCTP_AUTH` is absent in the first place. This could lead to a straightforward solution, or it might force me down a rabbit hole depending on what is found. Let's see what the Kconfig has to say!



20/2 2026/07/31 20:27 tool read-file
0m Args:
{
  "File": "net/sctp/Kconfig",
  "FirstLine": 1,
  "LineCount": 50
}

Results:
{
  "Contents": "   1:\t# SPDX-License-Identifier: GPL-2.0-only\n   2:\t#\n   3:\t# SCTP configuration\n   4:\t#\n   5:\t\n   6:\tmenuconfig IP_SCTP\n   7:\t\ttristate \"The SCTP Protocol\"\n   8:\t\tdepends on INET\n   9:\t\tselect CRYPTO_LIB_SHA1\n  10:\t\tselect CRYPTO_LIB_SHA256\n  11:\t\tselect CRYPTO_LIB_UTILS\n  12:\t\tselect NET_CRC32C\n  13:\t\tselect NET_UDP_TUNNEL\n  14:\t\thelp\n  15:\t\t  Stream Control Transmission Protocol\n  16:\t\n  17:\t\t  From RFC 2960 \u003chttp://www.ietf.org/rfc/rfc2960.txt\u003e.\n  18:\t\n  19:\t\t  \"SCTP is a reliable transport protocol operating on top of a\n  20:\t\t  connectionless packet network such as IP.  It offers the following\n  21:\t\t  services to its users:\n  22:\t\n  23:\t\t  -- acknowledged error-free non-duplicated transfer of user data,\n  24:\t\t  -- data fragmentation to conform to discovered path MTU size,\n  25:\t\t  -- sequenced delivery of user messages within multiple streams,\n  26:\t\t  with an option for order-of-arrival delivery of individual user\n  27:\t\t  messages,\n  28:\t\t  -- optional bundling of multiple user messages into a single SCTP\n  29:\t\t  packet, and\n  30:\t\t  -- network-level fault tolerance through supporting of multi-\n  31:\t\t  homing at either or both ends of an association.\"\n  32:\t\n  33:\t\t  To compile this protocol support as a module, choose M here: the\n  34:\t\t  module will be called sctp. Debug messages are handled by the\n  35:\t\t  kernel's dynamic debugging framework.\n  36:\t\n  37:\t\t  If in doubt, say N.\n  38:\t\n  39:\tif IP_SCTP\n  40:\t\n  41:\tconfig SCTP_DBG_OBJCNT\n  42:\t\tbool \"SCTP: Debug object counts\"\n  43:\t\tdepends on PROC_FS\n  44:\t\thelp\n  45:\t\t  If you say Y, this will enable debugging support for counting the\n  46:\t\t  type of objects that are currently allocated.  This is useful for\n  47:\t\t  identifying memory leaks. This debug information can be viewed by\n  48:\t\t  'cat /proc/net/sctp/sctp_dbg_objcnt'\n  49:\t\n  50:\t\t  If unsure, say N\n"
}

21/2 2026/07/31 20:27 llm patch-evaluator
0m Model:
gemini-3.1-pro-preview

Args:
null

Results:
null

Tokens:
							input: 29345
							output: 39
							thoughts: 277
						

Thoughts:
**My SCTP Option Analysis**

Okay, so I'm thinking, based on this, `IP_SCTP` seems like the only necessary option we need to consider. I should double check if `sctp_getsockopt_local_auth_chunks` is static, which it appears to be. Hmmm, is there another function that could be utilized? Okay, `sctp_getsockopt` is also static. Wait, but `sctp_getsockopt` is assigned to `sctp_prot.getsockopt`. What about `sctp_setsockopt`? Oh, that's static as well.

Is there a function that's exported? No, the standard approach is definitely to interact with SCTP socket options via the `getsockopt` system call, which then calls `sctp_getsockopt`. Since `sctp_getsockopt` isn't inlined, it'll show up in the symbol table. Wait a second, even static functions are listed in kallsyms, they just have local binding! So Syzkaller should be able to fuzz them if they're in kallsyms and not inlined. Great, so both `sctp_getsockopt` and `sctp_getsockopt_local_auth_chunks` should be fine to work with.

Now, let's just quickly check if `sctp_getsockopt_local_auth_chunks` is called anywhere else, just to be sure.



22/2 2026/07/31 20:28 tool grepper
0m Args:
{
  "Expression": "sctp_getsockopt_local_auth_chunks",
  "PathPrefix": "net/sctp/"
}

Results:
{
  "Output": "net/sctp/socket.c=7032=static int sctp_getsockopt_peer_auth_chunks(struct sock *sk, int len,\n--\nnet/sctp/socket.c-7075-\nnet/sctp/socket.c:7076:static int sctp_getsockopt_local_auth_chunks(struct sock *sk, int len,\nnet/sctp/socket.c-7077-\t\t\t\t    char __user *optval, int __user *optlen)\n--\nnet/sctp/socket.c=8137=static int sctp_getsockopt(struct sock *sk, int level, int optname,\n--\nnet/sctp/socket.c-8272-\tcase SCTP_LOCAL_AUTH_CHUNKS:\nnet/sctp/socket.c:8273:\t\tretval = sctp_getsockopt_local_auth_chunks(sk, len, optval,\nnet/sctp/socket.c-8274-\t\t\t\t\t\t\toptlen);\n"
}

23/2 2026/07/31 20:28 llm patch-evaluator
0m Model:
gemini-3.1-pro-preview

Args:
null

Results:
null

Tokens:
							input: 30264
							output: 162
							thoughts: 258
						

Thoughts:
**My Assessment of the SCTP Socket Option Vulnerability**

Okay, so the investigation centers around `sctp_getsockopt`. My initial scan shows that `sctp_getsockopt_local_auth_chunks` is the only function modified. That confirms my initial hunch.

The core of the issue is an out-of-bounds read within `sctp_getsockopt_local_auth_chunks`. The patch clamps `num_chunks` to `SCTP_AUTH_MAX_CHUNKS` which is a critical functional change. This is directly relevant because `getsockopt` is a userspace syscall path to this code. It's a prime target for fuzzing. We need to verify that this bounds check *actually* prevents the out-of-bounds read and doesn't introduce any new regressions.

I've verified the function name again, `sctp_getsockopt`, making sure I didn't misinterpret anything along the way. Specifically, `static int sctp_getsockopt(struct sock *sk, int level, int optname, char __user *optval, int __user *optlen)`.

Now, I'm ready to move forward and set the appropriate results for the next stage of the analysis. The critical functions here are `sctp_getsockopt_local_auth_chunks` and, of course, the entry point which is `sctp_getsockopt`. The configuration needed will be `IP_SCTP`, as indicated.



24/2 2026/07/31 20:28 tool set-results
0m Args:
{
  "EnableConfigs": [
    "IP_SCTP"
  ],
  "FocusSymbols": [
    "sctp_getsockopt_local_auth_chunks",
    "sctp_getsockopt"
  ],
  "Reasoning": "The patch fixes an out-of-bounds read in `sctp_getsockopt_local_auth_chunks` by clamping `num_chunks` to `SCTP_AUTH_MAX_CHUNKS`. This is a functional change in the SCTP socket options handling and is reachable from userspace via the `getsockopt` syscall. It is worth fuzzing to ensure the bounds check correctly prevents out-of-bounds access and doesn't introduce regressions.",
  "WorthFuzzing": true
}

Results:
{
  "EnableConfigs": [
    "IP_SCTP"
  ],
  "FocusSymbols": [
    "sctp_getsockopt_local_auth_chunks",
    "sctp_getsockopt"
  ],
  "Reasoning": "The patch fixes an out-of-bounds read in `sctp_getsockopt_local_auth_chunks` by clamping `num_chunks` to `SCTP_AUTH_MAX_CHUNKS`. This is a functional change in the SCTP socket options handling and is reachable from userspace via the `getsockopt` syscall. It is worth fuzzing to ensure the bounds check correctly prevents out-of-bounds access and doesn't introduce regressions.",
  "WorthFuzzing": true
}

LLM Calls Summary:
Total Calls Total Tokens Avg Tokens Total Duration (Seconds) Avg Duration (Seconds)
Tool Calls Summary:
Total Calls Total Duration (Seconds) Avg Duration (Seconds)