| Seq | Timestamp | Type | Name | Duration |
|---|---|---|---|---|
| 0/0 | 2026/09/21 19:35 | flow | patch-triage |
2mArgs:null Results: {
"EnableConfigs": [
"TIPC",
"INET"
],
"FocusSymbols": [
"tipc_nl_compat_name_table_dump_header",
"tipc_nl_compat_name_table_dump",
"tipc_nl_compat_net_set",
"tipc_nl_compat_recv"
],
"KMSANReasoning": "The patch modifies net/tipc/netlink_compat.c in two distinct ways:\n\n1. In tipc_nl_compat_net_set(), it adds a missing length check (TLV_GET_DATA_LEN(msg-\u003ereq) \u003c (int)sizeof(__be32)) before dereferencing msg-\u003ereq. Prior to this, an input TLV with fewer than 4 bytes of payload could result in an out-of-bounds read. Out-of-bounds read detection is strictly the purview of KASAN, not KMSAN.\n\n2. In tipc_nl_compat_name_table_dump_header() and tipc_nl_compat_name_table_dump(), it masks out the TIPC_NTQ_ALLTYPES flag from ntq-\u003edepth. This fixes control flow logic so that depths 1 to 4 are honored even if TIPC_NTQ_ALLTYPES is specified in the request. The dumped headers and publication strings are formatted from static string literals and parsed netlink attributes into the reply buffer.\n\nNeither change introduces, exposes, or accesses uninitialized stack, heap, or page memory, nor do they leak uninitialized padding bytes to userspace. Therefore, standard KASAN testing is sufficient and a dedicated KMSAN fuzzing session is not warranted.",
"NeedsKMSAN": false,
"Reasoning": "The patch fixes input validation and bitmasking in TIPC's generic netlink compatibility interface (net/tipc/netlink_compat.c). Specifically, it masks TIPC_NTQ_ALLTYPES from depth in tipc_nl_compat_name_table_dump_header() and tipc_nl_compat_name_table_dump(), and introduces a missing payload length check in tipc_nl_compat_net_set() before reading the TLV data. This code is reachable from userspace via Generic Netlink without special hardware and warrants fuzzing.",
"WorthFuzzing": true
} |
| 1/1 | 2026/09/21 19:35 | action | read-patch-diff |
0mArgs:null Results: {
"PatchDiff": "commit 94a60acf35eb30088ba9321768020c88d3f2ed1c\nAuthor: syz-cluster \u003ctriage@syzkaller.com\u003e\nDate: Mon Sep 21 19:35:10 2026 +0000\n\n syz-cluster: applied patch under review\n\ndiff --git a/net/tipc/netlink_compat.c b/net/tipc/netlink_compat.c\nindex d9a4f94ea2d43..9b2d93704e23d 100644\n--- a/net/tipc/netlink_compat.c\n+++ b/net/tipc/netlink_compat.c\n@@ -881,7 +881,7 @@ static int tipc_nl_compat_name_table_dump_header(struct tipc_nl_compat_msg *msg)\n \tif (TLV_GET_DATA_LEN(msg-\u003ereq) \u003c (int)sizeof(struct tipc_name_table_query))\n \t\treturn -EINVAL;\n \n-\tdepth = ntohl(ntq-\u003edepth);\n+\tdepth = ntohl(ntq-\u003edepth) \u0026 ~TIPC_NTQ_ALLTYPES;\n \n \tif (depth \u003e 4)\n \t\tdepth = 4;\n@@ -932,6 +932,7 @@ static int tipc_nl_compat_name_table_dump(struct tipc_nl_compat_msg *msg,\n \tif (!(depth \u0026 TIPC_NTQ_ALLTYPES) \u0026\u0026\n \t (type != nla_get_u32(publ[TIPC_NLA_PUBL_TYPE])))\n \t\treturn 0;\n+\tdepth \u0026= ~TIPC_NTQ_ALLTYPES;\n \tif (lowbound \u0026\u0026 (lowbound \u003e nla_get_u32(publ[TIPC_NLA_PUBL_UPPER])))\n \t\treturn 0;\n \tif (upbound \u0026\u0026 (upbound \u003c nla_get_u32(publ[TIPC_NLA_PUBL_LOWER])))\n@@ -1139,6 +1140,9 @@ static int tipc_nl_compat_net_set(struct tipc_nl_compat_cmd_doit *cmd,\n \tu32 val;\n \tstruct nlattr *net;\n \n+\tif (TLV_GET_DATA_LEN(msg-\u003ereq) \u003c (int)sizeof(__be32))\n+\t\treturn -EINVAL;\n+\n \tval = ntohl(*(__be32 *)TLV_DATA(msg-\u003ereq));\n \n \tnet = nla_nest_start_noflag(skb, TIPC_NLA_NET);\n"
} |
| 2/1 | 2026/09/21 19:35 | agent | patch-evaluator |
0mModel:core Args: null Results: {
"EnableConfigs": [
"TIPC",
"INET"
],
"FocusSymbols": [
"tipc_nl_compat_name_table_dump_header",
"tipc_nl_compat_name_table_dump",
"tipc_nl_compat_net_set",
"tipc_nl_compat_recv"
],
"Reasoning": "The patch fixes input validation and bitmasking in TIPC's generic netlink compatibility interface (net/tipc/netlink_compat.c). Specifically, it masks TIPC_NTQ_ALLTYPES from depth in tipc_nl_compat_name_table_dump_header() and tipc_nl_compat_name_table_dump(), and introduces a missing payload length check in tipc_nl_compat_net_set() before reading the TLV data. This code is reachable from userspace via Generic Netlink without special hardware and warrants fuzzing.",
"WorthFuzzing": true
}Instruction: You are an expert Linux kernel maintainer and security engineer.
Your job is to review a provided patch series and evaluate whether it warrants fuzzing with syzkaller.
IMPORTANT: The changes have ALREADY been applied and committed as the HEAD commit in
your workspace. Do NOT rely on internal assumptions. You must actively use your code access
tools to inspect the actual source code, callers, and surrounding context.
================================================================================
1. CORE TRIAGE PHILOSOPHY
================================================================================
The goal of patch fuzzing is to discover crashes, regressions, exposed latent bugs,
and newly triggered assertions introduced by the patch series.
- REACHABILITY IS THE PRIMARY GATE:
Fuzzing can only discover bugs in code that can actually execute in standard virtualized
environments (GCE or QEMU, utilizing software-emulated devices like USB gadgets, netdev, tun/tap).
If the modified code is structurally unreachable (see Section 2), it MUST NOT be fuzzed,
regardless of whether it adds assertions or complex logic.
- DO NOT BLINDLY TRUST "NO FUNCTIONAL CHANGE" (NFCI) OR "REFACTORING" CLAIMS:
Patch authors routinely label changes as "cleanups", "refactorings", or state
"No functional change intended". Do NOT take these claims at face value.
Code refactorings that rearrange logic, introduce helper functions, or alter state management
in core subsystems frequently introduce subtle semantic shifts or uncover latent kernel bugs.
If reachable executable code is modified or refactored, it MUST be fuzzed.
- NEW OR MODIFIED ASSERTIONS IN REACHABLE CODE MUST BE FUZZED:
When a patch introduces or modifies runtime checks or assertions (e.g., WARN_ON*, VM_WARN_ON*,
BUG_ON*, lockdep_assert*) in reachable code paths, it enforces new or stricter invariants.
Even if the author believes the invariant always holds, fuzzing is essential to verify whether
an unusual sequence of operations can violate it.
================================================================================
2. WHEN TO RETURN WorthFuzzing=false (NEGATIVE CRITERIA)
================================================================================
Return WorthFuzzing=false ONLY IF all modified code falls strictly into one or more of these categories:
- Non-kernel and non-executable changes:
* Modifications to Documentation/, comments, or spelling fixes.
* User-space directories, self-tests, samples, or scripts (e.g., tools/, samples/, scripts/, usr/)
that do not affect the compiled kernel image (vmlinux) or kernel modules.
* Purely decorative logging (e.g., message strings in pr_err, printk, dev_info) or tracepoints
that do not alter control flow or data structures.
* Build system or Kconfig changes that do not alter compiled C logic.
- Structurally unreachable hardware:
* Vendor-specific PCIe switches, SmartNICs, or GPU drivers (e.g., mlxsw, pds_core, qed,
ionic, amdgpu) requiring physical ASIC/PCIe cards not emulated in standard QEMU.
- Unreachable execution paths:
* Driver teardown callbacks (.remove, .shutdown, pci_unregister_driver) executed only during
physical PCI hot-unplug or manual sysfs driver unbinding.
* Code paths exclusive to architectures other than the target architecture.
================================================================================
3. WHEN TO RETURN WorthFuzzing=true (POSITIVE CRITERIA)
================================================================================
Return WorthFuzzing=true whenever the patch touches reachable executable code, including:
- Core Subsystems:
* Any logic modifications in memory management (mm/), synchronization/locking (kernel/locking/),
BPF, scheduler, core networking, VFS, or syscall handling.
- Refactorings and Code Cleanups:
* Any restructuring of reachable data structures, helper abstractions, or algorithm flows.
- Runtime Assertions and Defensive Checks:
* Any introduction or alteration of assertions (WARN_ON*, VM_WARN_ON*, BUG_ON*, etc.) in reachable paths.
- Reachable Drivers and Protocols:
* Drivers accessible via virtual buses (virtio, USB gadget, loopback, netlink, binder, sockets, etc.).
================================================================================
4. EXTRACTING FocusSymbols (PREVENTING DILUTION)
================================================================================
When WorthFuzzing=true, you must extract specific kernel functions into FocusSymbols to guide the fuzzer:
- AVOID UBIQUITOUS LIFECYCLE HOT-PATHS:
Do NOT list generic, ubiquitous functions called by almost every program in the corpus
(including, but not limited to: general memory allocators and deallocators, page fault
and trap handlers, or core synchronization primitives; this is not an exhaustive list).
Listing ubiquitous functions causes the fuzzer to classify thousands of unrelated tests as "focused",
which severely dilutes fuzzing effort away from the actual changes.
- TARGET SPECIFIC FEATURE LOGIC AND ENTRYPOINTS:
List functions that specifically implement the logic being added or altered, or direct API entrypoints
for the subsystem feature under review.
- HANDLING STATIC INLINE FUNCTIONS IN HEADERS (.h):
Compiler-inlined static functions (such as static inlines in mm/*.h or include/linux/*.h) lack
distinct symbol addresses in vmlinux and cannot be targeted directly by symbol coverage filters.
If the changes are primarily in static inline helpers, identify non-static, feature-specific caller
functions in .c files that exercise them (avoiding ubiquitous lifecycle wrappers).
================================================================================
5. IDENTIFYING EnableConfigs
================================================================================
Identify any specific CONFIG_ options required to properly compile and reach the modified code:
- Inspect Kconfig files and #ifdef guards; do not make assumptions.
- Check "depends on" lines in Kconfig to include any non-standard parent subsystem configs needed.
- Strip any '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: Target architecture: amd64
For your convenience, here is the diff of the changes:
commit 94a60acf35eb30088ba9321768020c88d3f2ed1c
Author: syz-cluster <triage@syzkaller.com>
Date: Mon Sep 21 19:35:10 2026 +0000
syz-cluster: applied patch under review
diff --git a/net/tipc/netlink_compat.c b/net/tipc/netlink_compat.c
index d9a4f94ea2d43..9b2d93704e23d 100644
--- a/net/tipc/netlink_compat.c
+++ b/net/tipc/netlink_compat.c
@@ -881,7 +881,7 @@ static int tipc_nl_compat_name_table_dump_header(struct tipc_nl_compat_msg *msg)
if (TLV_GET_DATA_LEN(msg->req) < (int)sizeof(struct tipc_name_table_query))
return -EINVAL;
- depth = ntohl(ntq->depth);
+ depth = ntohl(ntq->depth) & ~TIPC_NTQ_ALLTYPES;
if (depth > 4)
depth = 4;
@@ -932,6 +932,7 @@ static int tipc_nl_compat_name_table_dump(struct tipc_nl_compat_msg *msg,
if (!(depth & TIPC_NTQ_ALLTYPES) &&
(type != nla_get_u32(publ[TIPC_NLA_PUBL_TYPE])))
return 0;
+ depth &= ~TIPC_NTQ_ALLTYPES;
if (lowbound && (lowbound > nla_get_u32(publ[TIPC_NLA_PUBL_UPPER])))
return 0;
if (upbound && (upbound < nla_get_u32(publ[TIPC_NLA_PUBL_LOWER])))
@@ -1139,6 +1140,9 @@ static int tipc_nl_compat_net_set(struct tipc_nl_compat_cmd_doit *cmd,
u32 val;
struct nlattr *net;
+ if (TLV_GET_DATA_LEN(msg->req) < (int)sizeof(__be32))
+ return -EINVAL;
+
val = ntohl(*(__be32 *)TLV_DATA(msg->req));
net = nla_nest_start_noflag(skb, TIPC_NLA_NET);
|
| 3/2 | 2026/09/21 19:35 | llm | patch-evaluator |
0mModel:gemini-3.8-flash Args: null Results: null Tokens: input: 3237 output: 79 thoughts: 619 Thoughts: **Syzkaller Fuzzing Evaluation - Safe to Proceed** Okay, so I've got a request to evaluate a patch series in `net/tipc/netlink_compat.c` for potential syzkaller fuzzing. My initial analysis screams "standard maintenance," which is good. This isn't some malicious payload generation or exploit attempt; we're talking about defensive fuzzing triage – benign, essentially zero risk. So, the green light is on to dive in. Now, let's look at the actual patch itself. The changes are focused on `net/tipc/netlink_compat.c`. Specifically, I see some bitwise operations (`& ~TIPC_NTQ_ALLTYPES`) on a `depth` variable within the `tipc_nl_compat_name_table_dump_header` function and the `tipc_nl_compat_name_table_dump` function, along with a length check within `tipc_nl_compat_net_set` function. This seems to be related to handling network parameters through netlink compatibility. The changes look like sanitization and boundary checks. This is the kind of stuff that *warrants* fuzzing! This is something that syzkaller would be appropriate to test, as it's a good place to start hunting for potential issues, like integer overflows or out-of-bounds reads/writes, related to the changed bit masking. |
| 4/2 | 2026/09/21 19:35 | tool | read-file |
0mArgs:{
"File": "net/tipc/netlink_compat.c",
"FirstLine": 870,
"LineCount": 80
}Results: {
"Contents": " 870:\t\tint i;\n 871:\t\tu32 depth;\n 872:\t\tstruct tipc_name_table_query *ntq;\n 873:\t\tstatic const char * const header[] = {\n 874:\t\t\t\"Type \",\n 875:\t\t\t\"Lower Upper \",\n 876:\t\t\t\"Port Identity \",\n 877:\t\t\t\"Publication Scope\"\n 878:\t\t};\n 879:\t\n 880:\t\tntq = (struct tipc_name_table_query *)TLV_DATA(msg-\u003ereq);\n 881:\t\tif (TLV_GET_DATA_LEN(msg-\u003ereq) \u003c (int)sizeof(struct tipc_name_table_query))\n 882:\t\t\treturn -EINVAL;\n 883:\t\n 884:\t\tdepth = ntohl(ntq-\u003edepth) \u0026 ~TIPC_NTQ_ALLTYPES;\n 885:\t\n 886:\t\tif (depth \u003e 4)\n 887:\t\t\tdepth = 4;\n 888:\t\tfor (i = 0; i \u003c depth; i++)\n 889:\t\t\ttipc_tlv_sprintf(msg-\u003erep, header[i]);\n 890:\t\ttipc_tlv_sprintf(msg-\u003erep, \"\\n\");\n 891:\t\n 892:\t\treturn 0;\n 893:\t}\n 894:\t\n 895:\tstatic int tipc_nl_compat_name_table_dump(struct tipc_nl_compat_msg *msg,\n 896:\t\t\t\t\t\t struct nlattr **attrs)\n 897:\t{\n 898:\t\tchar port_str[27];\n 899:\t\tstruct tipc_name_table_query *ntq;\n 900:\t\tstruct nlattr *nt[TIPC_NLA_NAME_TABLE_MAX + 1];\n 901:\t\tstruct nlattr *publ[TIPC_NLA_PUBL_MAX + 1];\n 902:\t\tu32 node, depth, type, lowbound, upbound;\n 903:\t\tstatic const char * const scope_str[] = {\"\", \" zone\", \" cluster\",\n 904:\t\t\t\t\t\t\t \" node\"};\n 905:\t\tint err;\n 906:\t\n 907:\t\tif (!attrs[TIPC_NLA_NAME_TABLE])\n 908:\t\t\treturn -EINVAL;\n 909:\t\n 910:\t\terr = nla_parse_nested_deprecated(nt, TIPC_NLA_NAME_TABLE_MAX,\n 911:\t\t\t\t\t\t attrs[TIPC_NLA_NAME_TABLE], NULL,\n 912:\t\t\t\t\t\t NULL);\n 913:\t\tif (err)\n 914:\t\t\treturn err;\n 915:\t\n 916:\t\tif (!nt[TIPC_NLA_NAME_TABLE_PUBL])\n 917:\t\t\treturn -EINVAL;\n 918:\t\n 919:\t\terr = nla_parse_nested_deprecated(publ, TIPC_NLA_PUBL_MAX,\n 920:\t\t\t\t\t\t nt[TIPC_NLA_NAME_TABLE_PUBL], NULL,\n 921:\t\t\t\t\t\t NULL);\n 922:\t\tif (err)\n 923:\t\t\treturn err;\n 924:\t\n 925:\t\tntq = (struct tipc_name_table_query *)TLV_DATA(msg-\u003ereq);\n 926:\t\n 927:\t\tdepth = ntohl(ntq-\u003edepth);\n 928:\t\ttype = ntohl(ntq-\u003etype);\n 929:\t\tlowbound = ntohl(ntq-\u003elowbound);\n 930:\t\tupbound = ntohl(ntq-\u003eupbound);\n 931:\t\n 932:\t\tif (!(depth \u0026 TIPC_NTQ_ALLTYPES) \u0026\u0026\n 933:\t\t (type != nla_get_u32(publ[TIPC_NLA_PUBL_TYPE])))\n 934:\t\t\treturn 0;\n 935:\t\tdepth \u0026= ~TIPC_NTQ_ALLTYPES;\n 936:\t\tif (lowbound \u0026\u0026 (lowbound \u003e nla_get_u32(publ[TIPC_NLA_PUBL_UPPER])))\n 937:\t\t\treturn 0;\n 938:\t\tif (upbound \u0026\u0026 (upbound \u003c nla_get_u32(publ[TIPC_NLA_PUBL_LOWER])))\n 939:\t\t\treturn 0;\n 940:\t\n 941:\t\ttipc_tlv_sprintf(msg-\u003erep, \"%-10u \",\n 942:\t\t\t\t nla_get_u32(publ[TIPC_NLA_PUBL_TYPE]));\n 943:\t\n 944:\t\tif (depth == 1)\n 945:\t\t\tgoto out;\n 946:\t\n 947:\t\ttipc_tlv_sprintf(msg-\u003erep, \"%-10u %-10u \",\n 948:\t\t\t\t nla_get_u32(publ[TIPC_NLA_PUBL_LOWER]),\n 949:\t\t\t\t nla_get_u32(publ[TIPC_NLA_PUBL_UPPER]));\n"
} |
| 5/2 | 2026/09/21 19:35 | tool | read-file |
0mArgs:{
"File": "net/tipc/netlink_compat.c",
"FirstLine": 1130,
"LineCount": 40
}Results: {
"Contents": "1130:\t\tnode_info.up = htonl(nla_get_flag(node[TIPC_NLA_NODE_UP]));\n1131:\t\n1132:\t\treturn tipc_add_tlv(msg-\u003erep, TIPC_TLV_NODE_INFO, \u0026node_info,\n1133:\t\t\t\t sizeof(node_info));\n1134:\t}\n1135:\t\n1136:\tstatic int tipc_nl_compat_net_set(struct tipc_nl_compat_cmd_doit *cmd,\n1137:\t\t\t\t\t struct sk_buff *skb,\n1138:\t\t\t\t\t struct tipc_nl_compat_msg *msg)\n1139:\t{\n1140:\t\tu32 val;\n1141:\t\tstruct nlattr *net;\n1142:\t\n1143:\t\tif (TLV_GET_DATA_LEN(msg-\u003ereq) \u003c (int)sizeof(__be32))\n1144:\t\t\treturn -EINVAL;\n1145:\t\n1146:\t\tval = ntohl(*(__be32 *)TLV_DATA(msg-\u003ereq));\n1147:\t\n1148:\t\tnet = nla_nest_start_noflag(skb, TIPC_NLA_NET);\n1149:\t\tif (!net)\n1150:\t\t\treturn -EMSGSIZE;\n1151:\t\n1152:\t\tif (msg-\u003ecmd == TIPC_CMD_SET_NODE_ADDR) {\n1153:\t\t\tif (nla_put_u32(skb, TIPC_NLA_NET_ADDR, val))\n1154:\t\t\t\treturn -EMSGSIZE;\n1155:\t\t} else if (msg-\u003ecmd == TIPC_CMD_SET_NETID) {\n1156:\t\t\tif (nla_put_u32(skb, TIPC_NLA_NET_ID, val))\n1157:\t\t\t\treturn -EMSGSIZE;\n1158:\t\t}\n1159:\t\tnla_nest_end(skb, net);\n1160:\t\n1161:\t\treturn 0;\n1162:\t}\n1163:\t\n1164:\tstatic int tipc_nl_compat_net_dump(struct tipc_nl_compat_msg *msg,\n1165:\t\t\t\t\t struct nlattr **attrs)\n1166:\t{\n1167:\t\t__be32 id;\n1168:\t\tstruct nlattr *net[TIPC_NLA_NET_MAX + 1];\n1169:\t\tint err;\n"
} |
| 6/2 | 2026/09/21 19:35 | llm | patch-evaluator |
0mModel:gemini-3.8-flash Args: null Results: null Tokens: input: 6264 output: 28 thoughts: 95 Thoughts: **TIPC Investigation** Alright, let's get down to brass tacks. I need to refresh my memory on this TIPC thing. Right, that's the Transparent Inter-Process Communication protocol within the Linux kernel, residing in the `net/tipc/` directory. I recall it's accessible from userspace using sockets or netlink – particularly generic netlink and its compat variant. Now, the important question: is syzkaller giving this protocol a workout? Absolutely! I'm pretty sure I saw syzkaller had comprehensive descriptions for TIPC, and it frequently targets both the netlink compat and socket operations within TIPC. Makes sense, given its role in inter-process communication; a prime target for fuzzing. Let me just quickly glance at the Kconfig and see if there are any recent updates I need to take into account. Gotta make sure I have all the relevant pieces of information. |
| 7/2 | 2026/09/21 19:35 | tool | grepper |
0mArgs:{
"Expression": "config TIPC",
"PathPrefix": "net/tipc/"
}Results: {
"Output": "net/tipc/Kconfig-5-\nnet/tipc/Kconfig:6:menuconfig TIPC\nnet/tipc/Kconfig-7-\ttristate \"The TIPC Protocol\"\n--\nnet/tipc/Kconfig-23-\nnet/tipc/Kconfig:24:config TIPC_MEDIA_IB\nnet/tipc/Kconfig-25-\tbool \"InfiniBand media type support\"\n--\nnet/tipc/Kconfig-29-\t IP-over-InfiniBand devices.\nnet/tipc/Kconfig:30:config TIPC_MEDIA_UDP\nnet/tipc/Kconfig-31-\tbool \"IP/UDP media type support\"\n--\nnet/tipc/Kconfig-37-\nnet/tipc/Kconfig:38:config TIPC_CRYPTO\nnet/tipc/Kconfig-39-\tbool \"TIPC encryption support\"\n--\nnet/tipc/Kconfig-52-\nnet/tipc/Kconfig:53:config TIPC_DIAG\nnet/tipc/Kconfig-54-\ttristate \"TIPC: socket monitoring interface\"\n"
} |
| 8/2 | 2026/09/21 19:35 | llm | patch-evaluator |
0mModel:gemini-3.8-flash Args: null Results: null Tokens: input: 6867 output: 33 thoughts: 22 Thoughts: Here's my summary, as though I'm thinking through this process: **Investigating TIPC Dependencies** Okay, so I need to figure out what `TIPC` relies on in the kernel configuration. The most logical place to start is `net/tipc/Kconfig`. That's where all the configuration options related to TIPC should be defined, and where I can see the conditional dependencies. I'm assuming that file will include all the necessary `depends on` statements to illuminate the picture. Let's dive in and see what we can learn about the prerequisites for enabling and using TIPC. |
| 9/2 | 2026/09/21 19:35 | tool | read-file |
0mArgs:{
"File": "net/tipc/Kconfig",
"FirstLine": 1,
"LineCount": 30
}Results: {
"Contents": " 1:\t# SPDX-License-Identifier: GPL-2.0-only\n 2:\t#\n 3:\t# TIPC configuration\n 4:\t#\n 5:\t\n 6:\tmenuconfig TIPC\n 7:\t\ttristate \"The TIPC Protocol\"\n 8:\t\tdepends on INET\n 9:\t\thelp\n 10:\t\t The Transparent Inter Process Communication (TIPC) protocol is\n 11:\t\t specially designed for intra cluster communication. This protocol\n 12:\t\t originates from Ericsson where it has been used in carrier grade\n 13:\t\t cluster applications for many years.\n 14:\t\n 15:\t\t For more information about TIPC, see http://tipc.sourceforge.net.\n 16:\t\n 17:\t\t This protocol support is also available as a module ( = code which\n 18:\t\t can be inserted in and removed from the running kernel whenever you\n 19:\t\t want). The module will be called tipc. If you want to compile it\n 20:\t\t as a module, say M here and read \u003cfile:Documentation/kbuild/modules.rst\u003e.\n 21:\t\n 22:\t\t If in doubt, say N.\n 23:\t\n 24:\tconfig TIPC_MEDIA_IB\n 25:\t\tbool \"InfiniBand media type support\"\n 26:\t\tdepends on TIPC \u0026\u0026 INFINIBAND_IPOIB\n 27:\t\thelp\n 28:\t\t Saying Y here will enable support for running TIPC on\n 29:\t\t IP-over-InfiniBand devices.\n 30:\tconfig TIPC_MEDIA_UDP\n"
} |
| 10/2 | 2026/09/21 19:35 | llm | patch-evaluator |
0mModel:gemini-3.8-flash Args: null Results: null Tokens: input: 7465 output: 32 thoughts: 26 Thoughts: Here's my summary, as though I'm thinking through this process: **Investigating the Build Process of `netlink_compat.o` in the TIPC Subsystem** Alright, I need to understand how `netlink_compat.o` is being compiled within the TIPC (Transparent Inter Process Communication) subsystem. Given my familiarity with kernel build systems, the logical place to start is the `Makefile` within the `net/tipc` directory. That's where the build rules for this module, or at least its integration into the broader TIPC build, should reside. I'll need to carefully examine that `Makefile` for the specific targets and dependencies related to `netlink_compat.o` to determine its compilation flags, source files, and any linking steps involved. This information is key to understanding its integration into the TIPC kernel module and for potential debugging or modification down the road. |
| 11/2 | 2026/09/21 19:35 | tool | read-file |
0mArgs:{
"File": "net/tipc/Makefile",
"FirstLine": 1,
"LineCount": 25
}Results: {
"Contents": " 1:\t# SPDX-License-Identifier: GPL-2.0\n 2:\t#\n 3:\t# Makefile for the Linux TIPC layer\n 4:\t#\n 5:\t\n 6:\tobj-$(CONFIG_TIPC) := tipc.o\n 7:\t\n 8:\ttipc-y\t+= addr.o bcast.o bearer.o \\\n 9:\t\t core.o link.o discover.o msg.o \\\n 10:\t\t name_distr.o subscr.o monitor.o name_table.o net.o \\\n 11:\t\t netlink.o netlink_compat.o node.o socket.o eth_media.o \\\n 12:\t\t topsrv.o group.o trace.o\n 13:\t\n 14:\tCFLAGS_trace.o += -I$(src)\n 15:\t\n 16:\ttipc-$(CONFIG_TIPC_MEDIA_UDP)\t+= udp_media.o\n 17:\ttipc-$(CONFIG_TIPC_MEDIA_IB)\t+= ib_media.o\n 18:\ttipc-$(CONFIG_SYSCTL)\t\t+= sysctl.o\n 19:\ttipc-$(CONFIG_TIPC_CRYPTO)\t+= crypto.o\n 20:\t\n 21:\tobj-$(CONFIG_TIPC_DIAG)\t+= tipc_diag.o\n 22:\ttipc_diag-y\t+= diag.o\n"
} |
| 12/2 | 2026/09/21 19:35 | llm | patch-evaluator |
0mModel:gemini-3.8-flash Args: null Results: null Tokens: input: 8089 output: 48 thoughts: 91 Thoughts: Here's my analysis of the situation: **Investigating the netlink_compat.o Module within the TIPC Configuration** Okay, so `netlink_compat.o` is being built specifically when the `CONFIG_TIPC` option is enabled, and we know that `CONFIG_TIPC` in turn requires `CONFIG_INET`. This tells me immediately that there's a dependency chain here worth exploring in more detail. It's likely that `netlink_compat.o` provides some sort of compatibility layer or translation functionality, since its involvement is tied to the Inter-Process Communication (TIPC) and Internet Protocol (INET) configurations. My next step is to zero in on how this `netlink_compat.o` module interacts with user space. I need to understand the entry points. I'll need to scrutinize the calling context for the functions `tipc_nl_compat_name_table_dump_header`, `tipc_nl_compat_name_table_dump`, and `tipc_nl_compat_net_set`. These function names strongly suggest they're dealing with dumping and setting network configurations related to TIPC, and they're using Netlink, which is the standard user-space communication method. My guess is that they are called to support legacy or different versions of the TIPC protocol. I expect to find these functions defined as Netlink handlers. I am going to see how the code exposes these functionalities to user space, paying close attention to any structures or Netlink message types they use. It is critical to grasp how these calls are triggered and what data is being passed around, as that holds the key to the compatibility aspect. |
| 13/2 | 2026/09/21 19:35 | tool | grepper |
0mArgs:{
"Expression": "tipc_nl_compat_name_table_dump|tipc_nl_compat_net_set",
"PathPrefix": "net/tipc/"
}Results: {
"Output": "net/tipc/netlink_compat.c=838=static int tipc_nl_compat_link_reset_stats(struct tipc_nl_compat_cmd_doit *cmd,\n--\nnet/tipc/netlink_compat.c-867-\nnet/tipc/netlink_compat.c:868:static int tipc_nl_compat_name_table_dump_header(struct tipc_nl_compat_msg *msg)\nnet/tipc/netlink_compat.c-869-{\n--\nnet/tipc/netlink_compat.c-894-\nnet/tipc/netlink_compat.c:895:static int tipc_nl_compat_name_table_dump(struct tipc_nl_compat_msg *msg,\nnet/tipc/netlink_compat.c-896-\t\t\t\t\t struct nlattr **attrs)\n--\nnet/tipc/netlink_compat.c=1114=static int tipc_nl_compat_node_dump(struct tipc_nl_compat_msg *msg,\n--\nnet/tipc/netlink_compat.c-1135-\nnet/tipc/netlink_compat.c:1136:static int tipc_nl_compat_net_set(struct tipc_nl_compat_cmd_doit *cmd,\nnet/tipc/netlink_compat.c-1137-\t\t\t\t struct sk_buff *skb,\n--\nnet/tipc/netlink_compat.c=1196=static int tipc_nl_compat_handle(struct tipc_nl_compat_msg *msg)\n--\nnet/tipc/netlink_compat.c-1253-\t\tmsg-\u003erep_type = TIPC_TLV_ULTRA_STRING;\nnet/tipc/netlink_compat.c:1254:\t\tdump.header = tipc_nl_compat_name_table_dump_header;\nnet/tipc/netlink_compat.c-1255-\t\tdump.dumpit = tipc_nl_name_table_dump;\nnet/tipc/netlink_compat.c:1256:\t\tdump.format = tipc_nl_compat_name_table_dump;\nnet/tipc/netlink_compat.c-1257-\t\treturn tipc_nl_compat_dumpit(\u0026dump, msg);\n--\nnet/tipc/netlink_compat.c-1276-\t\tdoit.doit = __tipc_nl_net_set;\nnet/tipc/netlink_compat.c:1277:\t\tdoit.transcode = tipc_nl_compat_net_set;\nnet/tipc/netlink_compat.c-1278-\t\treturn tipc_nl_compat_doit(\u0026doit, msg);\n--\nnet/tipc/netlink_compat.c-1281-\t\tdoit.doit = __tipc_nl_net_set;\nnet/tipc/netlink_compat.c:1282:\t\tdoit.transcode = tipc_nl_compat_net_set;\nnet/tipc/netlink_compat.c-1283-\t\treturn tipc_nl_compat_doit(\u0026doit, msg);\n"
} |
| 14/2 | 2026/09/21 19:35 | llm | patch-evaluator |
0mModel:gemini-3.8-flash Args: null Results: null Tokens: input: 9388 output: 33 thoughts: 58 Thoughts: Here's my take on that, incorporating my expert perspective: **Investigating the Netlink Compatibility Layer** Alright, let's dive into this. It looks like `tipc_nl_compat_handle` is the central function for dealing with those pesky, older-version netlink messages that come flying in from userspace, specifically within the TIPC (Transparent Inter-Process Communication) context. I need to understand the entry point, or how it gets invoked. My immediate next step is to trace how `tipc_nl_compat_handle` fits into the broader picture. I'm going to look at the calling function - `tipc_nl_compat_recv`. I'll explore this function to map out the call graph to see what events, and other functions trigger the compat handler. This will give me a better understanding of how the compatibility layer actually works in practice, and what the overall architecture does. This compatibility layer is crucial for maintaining backwards compatibility, and avoiding breaking existing user applications, so I really need to know the entry points. |
| 15/2 | 2026/09/21 19:35 | tool | grepper |
0mArgs:{
"Expression": "tipc_nl_compat_handle",
"PathPrefix": "net/tipc/"
}Results: {
"Output": "net/tipc/netlink_compat.c=1184=static int tipc_cmd_show_stats_compat(struct tipc_nl_compat_msg *msg)\n--\nnet/tipc/netlink_compat.c-1195-\nnet/tipc/netlink_compat.c:1196:static int tipc_nl_compat_handle(struct tipc_nl_compat_msg *msg)\nnet/tipc/netlink_compat.c-1197-{\n--\nnet/tipc/netlink_compat.c=1296=static int tipc_nl_compat_recv(struct sk_buff *skb, struct genl_info *info)\n--\nnet/tipc/netlink_compat.c-1325-\nnet/tipc/netlink_compat.c:1326:\terr = tipc_nl_compat_handle(\u0026msg);\nnet/tipc/netlink_compat.c-1327-\tif ((err == -EOPNOTSUPP) || (err == -EPERM))\n"
} |
| 16/2 | 2026/09/21 19:35 | llm | patch-evaluator |
0mModel:gemini-3.8-flash Args: null Results: null Tokens: input: 9972 output: 40 thoughts: 41 Thoughts: Okay, here's my interpretation of those thoughts, summarized from my perspective as a networking expert: **Investigating the TIPC Generic Netlink Compatibility Handler** Right, `tipc_nl_compat_recv`. That's the core of the compatibility layer for TIPC and the generic netlink protocol, specifically. Let's dig in and make sure the registration of that callback is sound. I need to confirm where this function is set up within the Netlink framework. I want to see how it's integrated, any associated checks or security measures, and if any potential race conditions might exist in the binding or unbinding of this function. I need to understand this handler thoroughly to make sure that the compatibility layer is stable, secure, and doesn't introduce any performance bottlenecks. So the registration process is the next logical step. I need to follow the registration logic. Where is it? When is it called? What data does it handle? Any potential issues like buffer overflows or data corruption come to mind. I'll need to check the associated arguments to this function, too. |
| 17/2 | 2026/09/21 19:35 | tool | read-file |
0mArgs:{
"File": "net/tipc/netlink_compat.c",
"FirstLine": 1330,
"LineCount": 40
}Results: {
"Contents": "1330:\t\t\tmsg.rep = tipc_get_err_tlv(TIPC_CFG_TLV_ERROR);\n1331:\tsend:\n1332:\t\tif (!msg.rep)\n1333:\t\t\treturn err;\n1334:\t\n1335:\t\tlen = nlmsg_total_size(GENL_HDRLEN + TIPC_GENL_HDRLEN);\n1336:\t\tskb_push(msg.rep, len);\n1337:\t\trep_nlh = nlmsg_hdr(msg.rep);\n1338:\t\tmemcpy(rep_nlh, info-\u003enlhdr, len);\n1339:\t\trep_nlh-\u003enlmsg_len = msg.rep-\u003elen;\n1340:\t\tgenlmsg_unicast(msg.net, msg.rep, NETLINK_CB(skb).portid);\n1341:\t\n1342:\t\treturn err;\n1343:\t}\n1344:\t\n1345:\tstatic const struct genl_small_ops tipc_genl_compat_ops[] = {\n1346:\t\t{\n1347:\t\t\t.cmd\t\t= TIPC_GENL_CMD,\n1348:\t\t\t.validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,\n1349:\t\t\t.doit\t\t= tipc_nl_compat_recv,\n1350:\t\t},\n1351:\t};\n1352:\t\n1353:\tstatic struct genl_family tipc_genl_compat_family __ro_after_init = {\n1354:\t\t.name\t\t= TIPC_GENL_NAME,\n1355:\t\t.version\t= TIPC_GENL_VERSION,\n1356:\t\t.hdrsize\t= TIPC_GENL_HDRLEN,\n1357:\t\t.maxattr\t= 0,\n1358:\t\t.netnsok\t= true,\n1359:\t\t.module\t\t= THIS_MODULE,\n1360:\t\t.small_ops\t= tipc_genl_compat_ops,\n1361:\t\t.n_small_ops\t= ARRAY_SIZE(tipc_genl_compat_ops),\n1362:\t\t.resv_start_op\t= TIPC_GENL_CMD + 1,\n1363:\t};\n1364:\t\n1365:\tint __init tipc_netlink_compat_start(void)\n1366:\t{\n1367:\t\tint res;\n1368:\t\n1369:\t\tres = genl_register_family(\u0026tipc_genl_compat_family);\n"
} |
| 18/2 | 2026/09/21 19:35 | llm | patch-evaluator |
0mModel:gemini-3.8-flash Args: null Results: null Tokens: input: 10971 output: 34 thoughts: 983 Thoughts: **Analysis of TIPC Netlink Compatibility Patch** Okay, so I've got this patch in front of me, and it's dealing with the TIPC (Transparent Inter-Process Communication) protocol's netlink compatibility layer. Essentially, `tipc_netlink_compat_start` registers `tipc_genl_compat_family` to handle the generic netlink interactions. The core of the matter lies within `tipc_nl_compat_recv`, which dispatches commands related to the name table and network configuration. Specifically, I see it deals with `TIPC_CMD_GET_NAME_TABLE`, handled by `tipc_nl_compat_name_table_dump_header` and `tipc_nl_compat_name_table_dump`, as well as `TIPC_CMD_SET_NODE_ADDR` and `TIPC_CMD_SET_NETID`, managed by `tipc_nl_compat_net_set`. The important thing is this is all user-accessible via the generic netlink interface, using `TIPC_GENL_NAME` and `TIPC_GENL_CMD`. Even more concerning, this code is reachable within *standard* virtualized environments like QEMU or GCE. No specialized hardware is required. This represents actual executable code within a network protocol. The patch itself focuses on fixing and modifying boundary checks and bitmasks associated with user-supplied data: - It masks out `TIPC_NTQ_ALLTYPES` from `depth` in both `tipc_nl_compat_name_table_dump_header` and `tipc_nl_compat_name_table_dump`. - And it adds a length check (`if (TLV_GET_DATA_LEN(msg->req) < (int)sizeof(__be32)) return -EINVAL;`) in `tipc_nl_compat_net_set` before dereferencing a value, which is crucial. Given this is core networking code, exposed through netlink, the guidelines are clear: `WorthFuzzing` is definitively `true`. This touches reachable executable code. Now I need to refine the `FocusSymbols` for fuzzing. The functions directly modified by the patch are: `tipc_nl_compat_name_table_dump_header`, `tipc_nl_compat_name_table_dump`, and `tipc_nl_compat_net_set`. Their entry points and related callers are `tipc_nl_compat_recv` or `tipc_nl_compat_handle`. Are these target symbols in the symbol table? A quick check shows these functions are static functions within `net/tipc/netlink_compat.c`. However, since their addresses are taken, and passed through structures like the function pointers to `dump.header`, `dump.format` and `doit.transcode`, the compiler won't inline them or remove their symbol address. `tipc_nl_compat_recv` serves as the generic netlink handler. So, `FocusSymbols` should include: - `tipc_nl_compat_name_table_dump_header` - `tipc_nl_compat_name_table_dump` - `tipc_nl_compat_net_set` - `tipc_nl_compat_recv` Finally, let's determine the `EnableConfigs`. The main configuration option seems to be `TIPC`. From the Kconfig file, it looks like `TIPC` depends on `INET`. `INET` and `TIPC` are the direct configs. I should check if `netlink_compat.c` requires any other configuration by reviewing `net/tipc/netlink_compat.h` or where `tipc_netlink_compat_start` is called. |
| 19/2 | 2026/09/21 19:36 | tool | grepper |
0mArgs:{
"Expression": "tipc_netlink_compat_start",
"PathPrefix": "net/tipc/"
}Results: {
"Output": "net/tipc/core.c=146=static int __init tipc_init(void)\n--\nnet/tipc/core.c-183-\nnet/tipc/core.c:184:\terr = tipc_netlink_compat_start();\nnet/tipc/core.c-185-\tif (err)\n--\nnet/tipc/netlink.h=59=int tipc_netlink_start(void);\nnet/tipc/netlink.h:60:int tipc_netlink_compat_start(void);\nnet/tipc/netlink.h-61-void tipc_netlink_stop(void);\n--\nnet/tipc/netlink_compat.c=1353=static struct genl_family tipc_genl_compat_family __ro_after_init = {\n--\nnet/tipc/netlink_compat.c-1364-\nnet/tipc/netlink_compat.c:1365:int __init tipc_netlink_compat_start(void)\nnet/tipc/netlink_compat.c-1366-{\n"
} |
| 20/2 | 2026/09/21 19:36 | llm | patch-evaluator |
0mModel:gemini-3.8-flash Args: null Results: null Tokens: input: 13105 output: 215 thoughts: 525 Thoughts: **Fuzzing TIPC Netlink Compatibility: A Focused Approach** Okay, so I'm looking at this TIPC code, and it's pretty clear that `tipc_netlink_compat_start` is unconditionally called during `tipc_init` when `CONFIG_TIPC` is enabled. My first thought is to see if there are any other related configurations. A quick scan of `net/Kconfig` reveals that `source "net/tipc/Kconfig"` is included when `NET` is enabled, and `TIPC` itself depends on `INET`. So the core configs are `TIPC`, `INET`, and `NET`, but I confirmed that it really boils down to `TIPC` and `INET`. Now, let's nail down the key symbols we're interested in. I'm focusing on: * `tipc_nl_compat_name_table_dump_header` * `tipc_nl_compat_name_table_dump` * `tipc_nl_compat_net_set` * `tipc_nl_compat_recv` Thinking through reachability, I can see that standard user-space netlink sockets can indeed send TIPC generic netlink compat commands (`TIPC_GENL_NAME`). That means this is accessible even in a standard QEMU environment, no special hardware needed. This makes it a clear "WorthFuzzing" target. The reasoning is pretty straightforward: this patch is fixing input validation and bitmask issues in TIPC's legacy Netlink compatibility layer, specifically in `net/tipc/netlink_compat.c`. The fix masks out `TIPC_NTQ_ALLTYPES` from the `depth` field in `tipc_nl_compat_name_table_dump_header()` and `tipc_nl_compat_name_table_dump()`, and adds a message length check in `tipc_nl_compat_net_set()` before reading the payload. Since the modified code is directly accessible to unprivileged or privileged user-space via Generic Netlink, this is an excellent area for fuzzing to test the bounds and message handling. Alright, let's get the results set. |
| 21/2 | 2026/09/21 19:36 | tool | set-results |
0mArgs:{
"EnableConfigs": [
"TIPC",
"INET"
],
"FocusSymbols": [
"tipc_nl_compat_name_table_dump_header",
"tipc_nl_compat_name_table_dump",
"tipc_nl_compat_net_set",
"tipc_nl_compat_recv"
],
"Reasoning": "The patch fixes input validation and bitmasking in TIPC's generic netlink compatibility interface (net/tipc/netlink_compat.c). Specifically, it masks TIPC_NTQ_ALLTYPES from depth in tipc_nl_compat_name_table_dump_header() and tipc_nl_compat_name_table_dump(), and introduces a missing payload length check in tipc_nl_compat_net_set() before reading the TLV data. This code is reachable from userspace via Generic Netlink without special hardware and warrants fuzzing.",
"WorthFuzzing": true
}Results: {
"EnableConfigs": [
"TIPC",
"INET"
],
"FocusSymbols": [
"tipc_nl_compat_name_table_dump_header",
"tipc_nl_compat_name_table_dump",
"tipc_nl_compat_net_set",
"tipc_nl_compat_recv"
],
"Reasoning": "The patch fixes input validation and bitmasking in TIPC's generic netlink compatibility interface (net/tipc/netlink_compat.c). Specifically, it masks TIPC_NTQ_ALLTYPES from depth in tipc_nl_compat_name_table_dump_header() and tipc_nl_compat_name_table_dump(), and introduces a missing payload length check in tipc_nl_compat_net_set() before reading the TLV data. This code is reachable from userspace via Generic Netlink without special hardware and warrants fuzzing.",
"WorthFuzzing": true
} |
| 22/1 | 2026/09/21 19:36 | action | If |
1mArgs:{
"WorthFuzzing": true
}Results: null |
| 23/2 | 2026/09/21 19:36 | agent | kmsan-evaluator |
1mModel:core Args: null Results: {
"KMSANReasoning": "The patch modifies net/tipc/netlink_compat.c in two distinct ways:\n\n1. In tipc_nl_compat_net_set(), it adds a missing length check (TLV_GET_DATA_LEN(msg-\u003ereq) \u003c (int)sizeof(__be32)) before dereferencing msg-\u003ereq. Prior to this, an input TLV with fewer than 4 bytes of payload could result in an out-of-bounds read. Out-of-bounds read detection is strictly the purview of KASAN, not KMSAN.\n\n2. In tipc_nl_compat_name_table_dump_header() and tipc_nl_compat_name_table_dump(), it masks out the TIPC_NTQ_ALLTYPES flag from ntq-\u003edepth. This fixes control flow logic so that depths 1 to 4 are honored even if TIPC_NTQ_ALLTYPES is specified in the request. The dumped headers and publication strings are formatted from static string literals and parsed netlink attributes into the reply buffer.\n\nNeither change introduces, exposes, or accesses uninitialized stack, heap, or page memory, nor do they leak uninitialized padding bytes to userspace. Therefore, standard KASAN testing is sufficient and a dedicated KMSAN fuzzing session is not warranted.",
"NeedsKMSAN": false
}Instruction: You are an expert Linux kernel security engineer specializing in kernel memory
error detectors (KASAN and KMSAN). Your job is to review the provided patch series and
determine if the code changes justify spawning a dedicated KMSAN (KernelMemorySanitizer)
fuzzing session in addition to standard KASAN fuzzing.
CRITICAL DISTINCTION BETWEEN KASAN AND KMSAN:
- Standard KASAN kernel builds (upstream-apparmor-kasan.config) already enable
a comprehensive suite of debugging tools and sanitizers, including KASAN
(out-of-bounds accesses, use-after-free, double free, invalid free), LOCKDEP
(locking bugs and deadlocks), UB-sanitizers, and memory corruption checks.
- KMSAN (KernelMemorySanitizer) detects reads of UNINITIALIZED memory (stack, heap,
or page allocations) and kernel-to-user memory info-leaks.
Rule: THERE IS NO SENSE IN RUNNING A KMSAN SESSION IF A BUG CAN BE CAUGHT BY KASAN,
LOCKDEP, OR OTHER STANDARD BUG DETECTORS.
A dedicated KMSAN fuzzing session incurs significant resource costs. You must ONLY
set NeedsKMSAN=true if the code changes introduce or expose UNINITIALIZED MEMORY risks
that are detected ONLY by KMSAN.
Look holistically at the patch series and surrounding code. Even if no direct
uninitialized field accesses or new buffer allocations are added in the diff itself,
a patch may alter control flow, bounds checking, or data length calculations in ways
that change how the rest of the code operates on existing buffers (e.g. allowing
uninitialized stack/heap memory to be read, copied to user space, or used in control
flow). Do not hesitate to use your code access tools to inspect the surrounding code,
called functions, and callers.
Set NeedsKMSAN=true ONLY IF the patch introduces or modifies:
1. Kernel structures sent to user space (via copy_to_user, put_user, netlink skb
attributes, ioctl output arguments, socket options, or BPF buffers) where fields
or structure padding might not be fully initialized/zeroed.
2. Conditional logic or branching that depends on potentially uninitialized variables
or struct fields.
3. Allocation or initialization of complex data structures where uninitialized fields
could be read later in reachable code paths.
4. Bounds checks, lengths, or logic in a way that allows surrounding code to access
uninitialized bytes of existing buffers.
Set NeedsKMSAN=false IF:
- The code changes primarily risk out-of-bounds access, array overflows, NULL pointer
dereferences, locking deadlocks, or use-after-free bugs (these are already caught
by KASAN, LOCKDEP, or standard bug detectors).
- All stack/heap structures touched or introduced by the patch are fully zeroed
or initialized (e.g. using = {0}, memset, kzalloc) before being read or copied.
- The patch does not introduce any risk of uninitialized memory usage or info-leaks.
Use your code access tools to inspect the surrounding code if necessary, then provide
detailed KMSANReasoning contrasting KASAN vs KMSAN applicability for this patch.
Prefer calling several tools at the same time to save round-trips.
Use set-results tool to provide results of the analysis.
It must be called exactly once before the final reply.
Ignore results of this tool.
Prompt: Target architecture: amd64
For your convenience, here is the diff of the changes:
commit 94a60acf35eb30088ba9321768020c88d3f2ed1c
Author: syz-cluster <triage@syzkaller.com>
Date: Mon Sep 21 19:35:10 2026 +0000
syz-cluster: applied patch under review
diff --git a/net/tipc/netlink_compat.c b/net/tipc/netlink_compat.c
index d9a4f94ea2d43..9b2d93704e23d 100644
--- a/net/tipc/netlink_compat.c
+++ b/net/tipc/netlink_compat.c
@@ -881,7 +881,7 @@ static int tipc_nl_compat_name_table_dump_header(struct tipc_nl_compat_msg *msg)
if (TLV_GET_DATA_LEN(msg->req) < (int)sizeof(struct tipc_name_table_query))
return -EINVAL;
- depth = ntohl(ntq->depth);
+ depth = ntohl(ntq->depth) & ~TIPC_NTQ_ALLTYPES;
if (depth > 4)
depth = 4;
@@ -932,6 +932,7 @@ static int tipc_nl_compat_name_table_dump(struct tipc_nl_compat_msg *msg,
if (!(depth & TIPC_NTQ_ALLTYPES) &&
(type != nla_get_u32(publ[TIPC_NLA_PUBL_TYPE])))
return 0;
+ depth &= ~TIPC_NTQ_ALLTYPES;
if (lowbound && (lowbound > nla_get_u32(publ[TIPC_NLA_PUBL_UPPER])))
return 0;
if (upbound && (upbound < nla_get_u32(publ[TIPC_NLA_PUBL_LOWER])))
@@ -1139,6 +1140,9 @@ static int tipc_nl_compat_net_set(struct tipc_nl_compat_cmd_doit *cmd,
u32 val;
struct nlattr *net;
+ if (TLV_GET_DATA_LEN(msg->req) < (int)sizeof(__be32))
+ return -EINVAL;
+
val = ntohl(*(__be32 *)TLV_DATA(msg->req));
net = nla_nest_start_noflag(skb, TIPC_NLA_NET);
|
| 24/3 | 2026/09/21 19:36 | llm | kmsan-evaluator |
0mModel:gemini-3.8-flash Args: null Results: null Tokens: input: 2449 output: 39 thoughts: 686 Thoughts: **KMSAN Fuzzing Session Evaluation** Okay, so I need to decide if this kernel patch warrants a dedicated KMSAN fuzzing session. Let's break this down systematically. First, I need to make sure this is safe; it's defensive security engineering – analyzing a kernel patch to determine the best testing approach (KASAN vs. KMSAN). This is developer QA, so no need for red flags. Now, let's dive into the patch itself. It looks like we have changes in `net/tipc/netlink_compat.c`. The diff introduces a bitmask operation (`& ~TIPC_NTQ_ALLTYPES`) on `depth`, related to a `tipc_name_table_dump_header` function. It seems this might involve a query depth being modified. Additionally there is an added check for data length `TLV_GET_DATA_LEN` and `sizeof(__be32)` in another function `tipc_nl_compat_net_set`. I should probably read around those lines in `net/tipc/netlink_compat.c` to understand the full context of these changes. Specifically, I need to understand how the `depth` variable is used, and how these changes impact data handling and any potential for memory corruption or information leaks. This could involve checking the type of variable depth is and where it is used. I'll need to assess the data flow, especially related to the `netlink` message handling. If I think these changes could cause memory corruption, or that the old code was unsafe, then a KMSAN session is likely warranted. Otherwise, perhaps KASAN is sufficient. |
| 25/3 | 2026/09/21 19:36 | tool | read-file |
0mArgs:{
"File": "net/tipc/netlink_compat.c",
"FirstLine": 870,
"LineCount": 80
}Results: {
"Contents": " 870:\t\tint i;\n 871:\t\tu32 depth;\n 872:\t\tstruct tipc_name_table_query *ntq;\n 873:\t\tstatic const char * const header[] = {\n 874:\t\t\t\"Type \",\n 875:\t\t\t\"Lower Upper \",\n 876:\t\t\t\"Port Identity \",\n 877:\t\t\t\"Publication Scope\"\n 878:\t\t};\n 879:\t\n 880:\t\tntq = (struct tipc_name_table_query *)TLV_DATA(msg-\u003ereq);\n 881:\t\tif (TLV_GET_DATA_LEN(msg-\u003ereq) \u003c (int)sizeof(struct tipc_name_table_query))\n 882:\t\t\treturn -EINVAL;\n 883:\t\n 884:\t\tdepth = ntohl(ntq-\u003edepth) \u0026 ~TIPC_NTQ_ALLTYPES;\n 885:\t\n 886:\t\tif (depth \u003e 4)\n 887:\t\t\tdepth = 4;\n 888:\t\tfor (i = 0; i \u003c depth; i++)\n 889:\t\t\ttipc_tlv_sprintf(msg-\u003erep, header[i]);\n 890:\t\ttipc_tlv_sprintf(msg-\u003erep, \"\\n\");\n 891:\t\n 892:\t\treturn 0;\n 893:\t}\n 894:\t\n 895:\tstatic int tipc_nl_compat_name_table_dump(struct tipc_nl_compat_msg *msg,\n 896:\t\t\t\t\t\t struct nlattr **attrs)\n 897:\t{\n 898:\t\tchar port_str[27];\n 899:\t\tstruct tipc_name_table_query *ntq;\n 900:\t\tstruct nlattr *nt[TIPC_NLA_NAME_TABLE_MAX + 1];\n 901:\t\tstruct nlattr *publ[TIPC_NLA_PUBL_MAX + 1];\n 902:\t\tu32 node, depth, type, lowbound, upbound;\n 903:\t\tstatic const char * const scope_str[] = {\"\", \" zone\", \" cluster\",\n 904:\t\t\t\t\t\t\t \" node\"};\n 905:\t\tint err;\n 906:\t\n 907:\t\tif (!attrs[TIPC_NLA_NAME_TABLE])\n 908:\t\t\treturn -EINVAL;\n 909:\t\n 910:\t\terr = nla_parse_nested_deprecated(nt, TIPC_NLA_NAME_TABLE_MAX,\n 911:\t\t\t\t\t\t attrs[TIPC_NLA_NAME_TABLE], NULL,\n 912:\t\t\t\t\t\t NULL);\n 913:\t\tif (err)\n 914:\t\t\treturn err;\n 915:\t\n 916:\t\tif (!nt[TIPC_NLA_NAME_TABLE_PUBL])\n 917:\t\t\treturn -EINVAL;\n 918:\t\n 919:\t\terr = nla_parse_nested_deprecated(publ, TIPC_NLA_PUBL_MAX,\n 920:\t\t\t\t\t\t nt[TIPC_NLA_NAME_TABLE_PUBL], NULL,\n 921:\t\t\t\t\t\t NULL);\n 922:\t\tif (err)\n 923:\t\t\treturn err;\n 924:\t\n 925:\t\tntq = (struct tipc_name_table_query *)TLV_DATA(msg-\u003ereq);\n 926:\t\n 927:\t\tdepth = ntohl(ntq-\u003edepth);\n 928:\t\ttype = ntohl(ntq-\u003etype);\n 929:\t\tlowbound = ntohl(ntq-\u003elowbound);\n 930:\t\tupbound = ntohl(ntq-\u003eupbound);\n 931:\t\n 932:\t\tif (!(depth \u0026 TIPC_NTQ_ALLTYPES) \u0026\u0026\n 933:\t\t (type != nla_get_u32(publ[TIPC_NLA_PUBL_TYPE])))\n 934:\t\t\treturn 0;\n 935:\t\tdepth \u0026= ~TIPC_NTQ_ALLTYPES;\n 936:\t\tif (lowbound \u0026\u0026 (lowbound \u003e nla_get_u32(publ[TIPC_NLA_PUBL_UPPER])))\n 937:\t\t\treturn 0;\n 938:\t\tif (upbound \u0026\u0026 (upbound \u003c nla_get_u32(publ[TIPC_NLA_PUBL_LOWER])))\n 939:\t\t\treturn 0;\n 940:\t\n 941:\t\ttipc_tlv_sprintf(msg-\u003erep, \"%-10u \",\n 942:\t\t\t\t nla_get_u32(publ[TIPC_NLA_PUBL_TYPE]));\n 943:\t\n 944:\t\tif (depth == 1)\n 945:\t\t\tgoto out;\n 946:\t\n 947:\t\ttipc_tlv_sprintf(msg-\u003erep, \"%-10u %-10u \",\n 948:\t\t\t\t nla_get_u32(publ[TIPC_NLA_PUBL_LOWER]),\n 949:\t\t\t\t nla_get_u32(publ[TIPC_NLA_PUBL_UPPER]));\n"
} |
| 26/3 | 2026/09/21 19:36 | llm | kmsan-evaluator |
0mModel:gemini-3.8-flash Args: null Results: null Tokens: input: 4875 output: 40 thoughts: 26 Thoughts: Here's a summary of my thought process, as requested: **Diving into the `tipc_nl_compat_net_set` Function** Okay, so I'm digging into this code and I've got to focus on `tipc_nl_compat_net_set`. Specifically, I'm zeroing in on that function around line 1135. I know this is going to be important to understand how the network namespaces are getting configured within the TIPC (Transparent Inter Process Communication) system. I need to understand what this function is doing, the context it's working in, and what data it's setting within the broader network context. Is it setting up specific TIPC configurations for a namespace? Modifying existing ones? Are there any potential concurrency issues I need to keep in mind, and how it is being used with other data structures? This is key to understanding the deeper inner workings. Let me start by reviewing what precedes and follows around this line to try to understand what's actually happening! |
| 27/3 | 2026/09/21 19:36 | tool | read-file |
0mArgs:{
"File": "net/tipc/netlink_compat.c",
"FirstLine": 1130,
"LineCount": 40
}Results: {
"Contents": "1130:\t\tnode_info.up = htonl(nla_get_flag(node[TIPC_NLA_NODE_UP]));\n1131:\t\n1132:\t\treturn tipc_add_tlv(msg-\u003erep, TIPC_TLV_NODE_INFO, \u0026node_info,\n1133:\t\t\t\t sizeof(node_info));\n1134:\t}\n1135:\t\n1136:\tstatic int tipc_nl_compat_net_set(struct tipc_nl_compat_cmd_doit *cmd,\n1137:\t\t\t\t\t struct sk_buff *skb,\n1138:\t\t\t\t\t struct tipc_nl_compat_msg *msg)\n1139:\t{\n1140:\t\tu32 val;\n1141:\t\tstruct nlattr *net;\n1142:\t\n1143:\t\tif (TLV_GET_DATA_LEN(msg-\u003ereq) \u003c (int)sizeof(__be32))\n1144:\t\t\treturn -EINVAL;\n1145:\t\n1146:\t\tval = ntohl(*(__be32 *)TLV_DATA(msg-\u003ereq));\n1147:\t\n1148:\t\tnet = nla_nest_start_noflag(skb, TIPC_NLA_NET);\n1149:\t\tif (!net)\n1150:\t\t\treturn -EMSGSIZE;\n1151:\t\n1152:\t\tif (msg-\u003ecmd == TIPC_CMD_SET_NODE_ADDR) {\n1153:\t\t\tif (nla_put_u32(skb, TIPC_NLA_NET_ADDR, val))\n1154:\t\t\t\treturn -EMSGSIZE;\n1155:\t\t} else if (msg-\u003ecmd == TIPC_CMD_SET_NETID) {\n1156:\t\t\tif (nla_put_u32(skb, TIPC_NLA_NET_ID, val))\n1157:\t\t\t\treturn -EMSGSIZE;\n1158:\t\t}\n1159:\t\tnla_nest_end(skb, net);\n1160:\t\n1161:\t\treturn 0;\n1162:\t}\n1163:\t\n1164:\tstatic int tipc_nl_compat_net_dump(struct tipc_nl_compat_msg *msg,\n1165:\t\t\t\t\t struct nlattr **attrs)\n1166:\t{\n1167:\t\t__be32 id;\n1168:\t\tstruct nlattr *net[TIPC_NLA_NET_MAX + 1];\n1169:\t\tint err;\n"
} |
| 28/3 | 2026/09/21 19:36 | llm | kmsan-evaluator |
0mModel:gemini-3.8-flash Args: null Results: null Tokens: input: 5835 output: 22 thoughts: 340 Thoughts: **Analyzing the TIPC Changes** Okay, let's dive into this. First, I need to see the commit history or understand exactly what these changes are addressing. Starting with `tipc_nl_compat_net_set`, I see a new check: ```c + if (TLV_GET_DATA_LEN(msg->req) < (int)sizeof(__be32)) + return -EINVAL; + val = ntohl(*(__be32 *)TLV_DATA(msg->req)); ``` Ah, right. Before, `val = ntohl(*(__be32 *)TLV_DATA(msg->req));` was vulnerable to an out-of-bounds read if the length specified by `TLV_GET_DATA_LEN(msg->req)` was smaller than the size of a `__be32`. This new check prevents that. A classic out-of-bounds read vulnerability, thankfully addressed. Now, let's move on to `tipc_nl_compat_name_table_dump_header` and `tipc_nl_compat_name_table_dump`. I spot this: ```c - depth = ntohl(ntq->depth); + depth = ntohl(ntq->depth) & ~TIPC_NTQ_ALLTYPES; ``` and ```c if (!(depth & TIPC_NTQ_ALLTYPES) && (type != nla_get_u32(publ[TIPC_NLA_PUBL_TYPE]))) return 0; + depth &= ~TIPC_NTQ_ALLTYPES; ``` Hold on... why are we masking `TIPC_NTQ_ALLTYPES`? I'm missing some context here. Let's dig deeper. I'll search for where `TIPC_NTQ_ALLTYPES` is defined. This looks interesting. |
| 29/3 | 2026/09/21 19:36 | tool | grepper |
0mArgs:{
"Expression": "TIPC_NTQ_ALLTYPES"
}Results: {
"Output": "include/uapi/linux/tipc_config.h=207=struct tipc_link_config {\n--\ninclude/uapi/linux/tipc_config.h-211-\ninclude/uapi/linux/tipc_config.h:212:#define TIPC_NTQ_ALLTYPES 0x80000000\ninclude/uapi/linux/tipc_config.h-213-\n--\nnet/tipc/netlink_compat.c=868=static int tipc_nl_compat_name_table_dump_header(struct tipc_nl_compat_msg *msg)\n--\nnet/tipc/netlink_compat.c-883-\nnet/tipc/netlink_compat.c:884:\tdepth = ntohl(ntq-\u003edepth) \u0026 ~TIPC_NTQ_ALLTYPES;\nnet/tipc/netlink_compat.c-885-\n--\nnet/tipc/netlink_compat.c=895=static int tipc_nl_compat_name_table_dump(struct tipc_nl_compat_msg *msg,\n--\nnet/tipc/netlink_compat.c-931-\nnet/tipc/netlink_compat.c:932:\tif (!(depth \u0026 TIPC_NTQ_ALLTYPES) \u0026\u0026\nnet/tipc/netlink_compat.c-933-\t (type != nla_get_u32(publ[TIPC_NLA_PUBL_TYPE])))\nnet/tipc/netlink_compat.c-934-\t\treturn 0;\nnet/tipc/netlink_compat.c:935:\tdepth \u0026= ~TIPC_NTQ_ALLTYPES;\nnet/tipc/netlink_compat.c-936-\tif (lowbound \u0026\u0026 (lowbound \u003e nla_get_u32(publ[TIPC_NLA_PUBL_UPPER])))\n"
} |
| 30/3 | 2026/09/21 19:36 | llm | kmsan-evaluator |
0mModel:gemini-3.8-flash Args: null Results: null Tokens: input: 7104 output: 39 thoughts: 44 Thoughts: Okay, let's dive into this. **Investigating a Suspected Issue in netlink_compat.c** Alright, I need to get to the bottom of this. My initial instinct is to check the commit history specifically for `net/tipc/netlink_compat.c`. I want to see if any recent changes, especially around lines 935 to 980, might shed light on the situation. If a direct commit history command (`git log`, perhaps?) is readily available, that's ideal. It will give me the clearest picture of what's been happening in that section of code. If not, I'll have to manually read the surrounding lines, say from around 930 to 985, to understand the context and identify the possible source of the problem. This is a common debugging approach; looking at code change history often reveals the "why" behind a bug or unexpected behavior. |
| 31/3 | 2026/09/21 19:36 | tool | read-file |
0mArgs:{
"File": "net/tipc/netlink_compat.c",
"FirstLine": 940,
"LineCount": 60
}Results: {
"Contents": " 940:\t\n 941:\t\ttipc_tlv_sprintf(msg-\u003erep, \"%-10u \",\n 942:\t\t\t\t nla_get_u32(publ[TIPC_NLA_PUBL_TYPE]));\n 943:\t\n 944:\t\tif (depth == 1)\n 945:\t\t\tgoto out;\n 946:\t\n 947:\t\ttipc_tlv_sprintf(msg-\u003erep, \"%-10u %-10u \",\n 948:\t\t\t\t nla_get_u32(publ[TIPC_NLA_PUBL_LOWER]),\n 949:\t\t\t\t nla_get_u32(publ[TIPC_NLA_PUBL_UPPER]));\n 950:\t\n 951:\t\tif (depth == 2)\n 952:\t\t\tgoto out;\n 953:\t\n 954:\t\tnode = nla_get_u32(publ[TIPC_NLA_PUBL_NODE]);\n 955:\t\tsprintf(port_str, \"\u003c%u.%u.%u:%u\u003e\", tipc_zone(node), tipc_cluster(node),\n 956:\t\t\ttipc_node(node), nla_get_u32(publ[TIPC_NLA_PUBL_REF]));\n 957:\t\ttipc_tlv_sprintf(msg-\u003erep, \"%-26s \", port_str);\n 958:\t\n 959:\t\tif (depth == 3)\n 960:\t\t\tgoto out;\n 961:\t\n 962:\t\ttipc_tlv_sprintf(msg-\u003erep, \"%-10u %s\",\n 963:\t\t\t\t nla_get_u32(publ[TIPC_NLA_PUBL_KEY]),\n 964:\t\t\t\t scope_str[nla_get_u32(publ[TIPC_NLA_PUBL_SCOPE])]);\n 965:\tout:\n 966:\t\ttipc_tlv_sprintf(msg-\u003erep, \"\\n\");\n 967:\t\n 968:\t\treturn 0;\n 969:\t}\n 970:\t\n 971:\tstatic int __tipc_nl_compat_publ_dump(struct tipc_nl_compat_msg *msg,\n 972:\t\t\t\t\t struct nlattr **attrs)\n 973:\t{\n 974:\t\tu32 type, lower, upper;\n 975:\t\tstruct nlattr *publ[TIPC_NLA_PUBL_MAX + 1];\n 976:\t\tint err;\n 977:\t\n 978:\t\tif (!attrs[TIPC_NLA_PUBL])\n 979:\t\t\treturn -EINVAL;\n 980:\t\n 981:\t\terr = nla_parse_nested_deprecated(publ, TIPC_NLA_PUBL_MAX,\n 982:\t\t\t\t\t\t attrs[TIPC_NLA_PUBL], NULL, NULL);\n 983:\t\tif (err)\n 984:\t\t\treturn err;\n 985:\t\n 986:\t\ttype = nla_get_u32(publ[TIPC_NLA_PUBL_TYPE]);\n 987:\t\tlower = nla_get_u32(publ[TIPC_NLA_PUBL_LOWER]);\n 988:\t\tupper = nla_get_u32(publ[TIPC_NLA_PUBL_UPPER]);\n 989:\t\n 990:\t\tif (lower == upper)\n 991:\t\t\ttipc_tlv_sprintf(msg-\u003erep, \" {%u,%u}\", type, lower);\n 992:\t\telse\n 993:\t\t\ttipc_tlv_sprintf(msg-\u003erep, \" {%u,%u,%u}\", type, lower, upper);\n 994:\t\n 995:\t\treturn 0;\n 996:\t}\n 997:\t\n 998:\tstatic int tipc_nl_compat_publ_dump(struct tipc_nl_compat_msg *msg, u32 sock)\n 999:\t{\n"
} |
| 32/3 | 2026/09/21 19:36 | llm | kmsan-evaluator |
0mModel:gemini-3.8-flash Args: null Results: null Tokens: input: 8448 output: 24 thoughts: 1049 Thoughts: **Analyzing Potential Vulnerabilities in TIPC Netlink Compatibility** Okay, let's break this down. My initial focus is on `tipc_nl_compat_name_table_dump`. I'm seeing a potential logic flaw related to how the `depth` parameter interacts with `TIPC_NTQ_ALLTYPES` and the subsequent conditional `goto` statements. Essentially, if `depth` had `TIPC_NTQ_ALLTYPES` set along with a specific requested depth (1, 2, or 3), the original code would fail to correctly exit at the intended `goto out` points, leading to execution continuing beyond the requested depth. The header code seems to cap depth at 4, but that doesn't fix the issue. The effect is that you get the full scope string being returned, even if a user explicitly asked for a specific depth. This feels like an information disclosure issue, possibly revealing more data than intended. Now, shifting gears to `tipc_nl_compat_net_set`, my alarm bells are ringing about the `TLV_GET_DATA_LEN` check. The code reads a 32-bit value. But it's concerning that there's a check `TLV_GET_DATA_LEN(msg->req) < sizeof(__be32)`. If that check *fails*, that means the size is too small, and the code would try to read a value from `TLV_DATA(msg->req)`. This strongly suggests either an out-of-bounds read or potentially reading uninitialized memory, depending on how `msg->req` is allocated and initialized. We *need* to trace the origins of `msg->req` to determine its allocation size and content. I need to understand the Netlink message structure, how the data is populated, and what happens if a malformed packet is received. This could lead to a heap overflow or information leak. I should be looking for potential vulnerabilities when handling Netlink messages. I'm thinking now about how a cleverly crafted Netlink message could exploit this by sending a malformed message. The implication is an information disclosure if the depth is mismanaged in the first section of the code, and an exploitable vulnerability in the second section of the code, if `TLV_GET_DATA_LEN` is less than `sizeof(__be32)`. I'll need to review the Netlink message handling in the TIPC module more thoroughly to assess the implications of these potential weaknesses. |
| 33/3 | 2026/09/21 19:36 | tool | grepper |
0mArgs:{
"Expression": "tipc_nl_compat_net_set"
}Results: {
"Output": "net/tipc/netlink_compat.c=1114=static int tipc_nl_compat_node_dump(struct tipc_nl_compat_msg *msg,\n--\nnet/tipc/netlink_compat.c-1135-\nnet/tipc/netlink_compat.c:1136:static int tipc_nl_compat_net_set(struct tipc_nl_compat_cmd_doit *cmd,\nnet/tipc/netlink_compat.c-1137-\t\t\t\t struct sk_buff *skb,\n--\nnet/tipc/netlink_compat.c=1196=static int tipc_nl_compat_handle(struct tipc_nl_compat_msg *msg)\n--\nnet/tipc/netlink_compat.c-1276-\t\tdoit.doit = __tipc_nl_net_set;\nnet/tipc/netlink_compat.c:1277:\t\tdoit.transcode = tipc_nl_compat_net_set;\nnet/tipc/netlink_compat.c-1278-\t\treturn tipc_nl_compat_doit(\u0026doit, msg);\n--\nnet/tipc/netlink_compat.c-1281-\t\tdoit.doit = __tipc_nl_net_set;\nnet/tipc/netlink_compat.c:1282:\t\tdoit.transcode = tipc_nl_compat_net_set;\nnet/tipc/netlink_compat.c-1283-\t\treturn tipc_nl_compat_doit(\u0026doit, msg);\n"
} |
| 34/3 | 2026/09/21 19:36 | llm | kmsan-evaluator |
0mModel:gemini-3.8-flash Args: null Results: null Tokens: input: 10451 output: 40 thoughts: 26 Thoughts: Okay, here's my interpretation of what's going on, formatted as you requested: **Deconstructing `tipc_nl_compat_recv` and `tipc_nl_compat_doit`** Alright, let's dive into these two. From their names alone, I'm already guessing they're central to handling the compatibility layer for the old TIPC netlink messages, probably working in concert to handle incoming requests and then executing the relevant actions. `_recv` typically implies a receive function, which means this probably deals with the initial intake of netlink messages. `_doit` on the other hand, suggests that it is responsible for the actual *work* performed based on the message content - a dispatcher of sorts. I'll need to look at their implementations to get the whole picture, specifically: * What kinds of messages are handled in `tipc_nl_compat_recv`? Are there specific message types or netlink families being targeted? What data structures are they using to read or parse the incoming netlink payload? Are there any security considerations at this level? * How is the message payload passed to `tipc_nl_compat_doit`? Is it through a simple struct, a chain of calls, or some other data structure? What kind of error handling is happening at this point? * What is the specific functionality in `tipc_nl_compat_doit`? Does this handle operations such as adding or removing nodes, publishing services, setting configuration parameters, or retrieving information? How does this code handle concurrency and potential locking if multiple netlink requests arrive simultaneously? * How is this compatibility layer architected? Is it a thin wrapper around the newer TIPC implementation, or is it a more significant translation layer? What kind of performance implications are there here? * How does the old netlink API interface with the updated parts of TIPC? Does the translation of incoming messages cause compatibility issues, and if so, how are these managed? * Are there any error paths that require special attention, like handling invalid messages or security exceptions? * Is there any logging or debugging information associated with these functions that might be helpful for troubleshooting? * Any dependencies or special configurations that these functions rely on? I want to see what's actually happening to understand how TIPC's old API interacts with its updated parts. Time to start digging! |
| 35/3 | 2026/09/21 19:36 | tool | read-file |
0mArgs:{
"File": "net/tipc/netlink_compat.c",
"FirstLine": 1250,
"LineCount": 50
}Results: {
"Contents": "1250:\t\tcase TIPC_CMD_SHOW_NAME_TABLE:\n1251:\t\t\tmsg-\u003ereq_type = TIPC_TLV_NAME_TBL_QUERY;\n1252:\t\t\tmsg-\u003erep_size = ULTRA_STRING_MAX_LEN;\n1253:\t\t\tmsg-\u003erep_type = TIPC_TLV_ULTRA_STRING;\n1254:\t\t\tdump.header = tipc_nl_compat_name_table_dump_header;\n1255:\t\t\tdump.dumpit = tipc_nl_name_table_dump;\n1256:\t\t\tdump.format = tipc_nl_compat_name_table_dump;\n1257:\t\t\treturn tipc_nl_compat_dumpit(\u0026dump, msg);\n1258:\t\tcase TIPC_CMD_SHOW_PORTS:\n1259:\t\t\tmsg-\u003erep_size = ULTRA_STRING_MAX_LEN;\n1260:\t\t\tmsg-\u003erep_type = TIPC_TLV_ULTRA_STRING;\n1261:\t\t\tdump.dumpit = tipc_nl_sk_dump;\n1262:\t\t\tdump.format = tipc_nl_compat_sk_dump;\n1263:\t\t\treturn tipc_nl_compat_dumpit(\u0026dump, msg);\n1264:\t\tcase TIPC_CMD_GET_MEDIA_NAMES:\n1265:\t\t\tmsg-\u003erep_size = MAX_MEDIA * TLV_SPACE(TIPC_MAX_MEDIA_NAME);\n1266:\t\t\tdump.dumpit = tipc_nl_media_dump;\n1267:\t\t\tdump.format = tipc_nl_compat_media_dump;\n1268:\t\t\treturn tipc_nl_compat_dumpit(\u0026dump, msg);\n1269:\t\tcase TIPC_CMD_GET_NODES:\n1270:\t\t\tmsg-\u003erep_size = ULTRA_STRING_MAX_LEN;\n1271:\t\t\tdump.dumpit = tipc_nl_node_dump;\n1272:\t\t\tdump.format = tipc_nl_compat_node_dump;\n1273:\t\t\treturn tipc_nl_compat_dumpit(\u0026dump, msg);\n1274:\t\tcase TIPC_CMD_SET_NODE_ADDR:\n1275:\t\t\tmsg-\u003ereq_type = TIPC_TLV_NET_ADDR;\n1276:\t\t\tdoit.doit = __tipc_nl_net_set;\n1277:\t\t\tdoit.transcode = tipc_nl_compat_net_set;\n1278:\t\t\treturn tipc_nl_compat_doit(\u0026doit, msg);\n1279:\t\tcase TIPC_CMD_SET_NETID:\n1280:\t\t\tmsg-\u003ereq_type = TIPC_TLV_UNSIGNED;\n1281:\t\t\tdoit.doit = __tipc_nl_net_set;\n1282:\t\t\tdoit.transcode = tipc_nl_compat_net_set;\n1283:\t\t\treturn tipc_nl_compat_doit(\u0026doit, msg);\n1284:\t\tcase TIPC_CMD_GET_NETID:\n1285:\t\t\tmsg-\u003erep_size = sizeof(u32);\n1286:\t\t\tdump.dumpit = tipc_nl_net_dump;\n1287:\t\t\tdump.format = tipc_nl_compat_net_dump;\n1288:\t\t\treturn tipc_nl_compat_dumpit(\u0026dump, msg);\n1289:\t\tcase TIPC_CMD_SHOW_STATS:\n1290:\t\t\treturn tipc_cmd_show_stats_compat(msg);\n1291:\t\t}\n1292:\t\n1293:\t\treturn -EOPNOTSUPP;\n1294:\t}\n1295:\t\n1296:\tstatic int tipc_nl_compat_recv(struct sk_buff *skb, struct genl_info *info)\n1297:\t{\n1298:\t\tint err;\n1299:\t\tint len;\n"
} |
| 36/3 | 2026/09/21 19:36 | llm | kmsan-evaluator |
0mModel:gemini-3.8-flash Args: null Results: null Tokens: input: 12032 output: 40 thoughts: 26 Thoughts: Okay, here's my interpretation of those thoughts, tailored for an expert audience, presented in the first person: **Analyzing `tipc_nl_compat_doit` and `tipc_nl_compat_recv`** Alright, I'm diving into `tipc_nl_compat_doit` and `tipc_nl_compat_recv`. My initial thought is to examine how these functions handle the compatibility layer for the TIPC Netlink interface. I need to understand the data flow, and identify how these two pieces of code collaborate. My primary focus will be on the messaging structure, ensuring proper Netlink message parsing and validation. I'll need to confirm what versions of the protocol they are designed to support and how they handle potential discrepancies between older and newer message formats. I'm looking at error handling, specifically how they manage unexpected message types or malformed data within the compatibility context. I'll be searching for any potential vulnerabilities related to buffer overflows or denial-of-service attacks that could be exposed by improper validation. Next, I'll need to analyze `tipc_nl_compat_doit`. I need to ensure the correct handling of incoming Netlink requests. Are they properly dispatching to the appropriate TIPC functions, accounting for the backward compatibility needs? I'll pay close attention to the interaction with the existing TIPC core functions. Are there any potential race conditions or synchronization issues due to compatibility adjustments? Then, I'll move on to `tipc_nl_compat_recv`, ensuring the proper interpretation and distribution of incoming TIPC messages. I have to confirm the correct processing of Netlink message acknowledgements, error returns, and notifications. I'll be particularly interested in how these functions handle asynchronous operations, especially if there are any timeouts or retry mechanisms. Ultimately, I want to confirm that these two functions work together correctly to handle compatibility concerns, without degrading performance or compromising the integrity of the TIPC protocol. I also need to confirm that they don't introduce any security vulnerabilities. |
| 37/3 | 2026/09/21 19:36 | tool | read-file |
0mArgs:{
"File": "net/tipc/netlink_compat.c",
"FirstLine": 1296,
"LineCount": 80
}Results: {
"Contents": "1296:\tstatic int tipc_nl_compat_recv(struct sk_buff *skb, struct genl_info *info)\n1297:\t{\n1298:\t\tint err;\n1299:\t\tint len;\n1300:\t\tstruct tipc_nl_compat_msg msg;\n1301:\t\tstruct nlmsghdr *req_nlh;\n1302:\t\tstruct nlmsghdr *rep_nlh;\n1303:\t\tstruct tipc_genlmsghdr *req_userhdr = genl_info_userhdr(info);\n1304:\t\n1305:\t\tmemset(\u0026msg, 0, sizeof(msg));\n1306:\t\n1307:\t\treq_nlh = (struct nlmsghdr *)skb-\u003edata;\n1308:\t\tmsg.req = nlmsg_data(req_nlh) + GENL_HDRLEN + TIPC_GENL_HDRLEN;\n1309:\t\tmsg.cmd = req_userhdr-\u003ecmd;\n1310:\t\tmsg.net = genl_info_net(info);\n1311:\t\tmsg.dst_sk = skb-\u003esk;\n1312:\t\n1313:\t\tif ((msg.cmd \u0026 0xC000) \u0026\u0026 (!netlink_net_capable(skb, CAP_NET_ADMIN))) {\n1314:\t\t\tmsg.rep = tipc_get_err_tlv(TIPC_CFG_NOT_NET_ADMIN);\n1315:\t\t\terr = -EACCES;\n1316:\t\t\tgoto send;\n1317:\t\t}\n1318:\t\n1319:\t\tmsg.req_size = nlmsg_attrlen(req_nlh, GENL_HDRLEN + TIPC_GENL_HDRLEN);\n1320:\t\tif (msg.req_size \u0026\u0026 !TLV_OK(msg.req, msg.req_size)) {\n1321:\t\t\tmsg.rep = tipc_get_err_tlv(TIPC_CFG_NOT_SUPPORTED);\n1322:\t\t\terr = -EOPNOTSUPP;\n1323:\t\t\tgoto send;\n1324:\t\t}\n1325:\t\n1326:\t\terr = tipc_nl_compat_handle(\u0026msg);\n1327:\t\tif ((err == -EOPNOTSUPP) || (err == -EPERM))\n1328:\t\t\tmsg.rep = tipc_get_err_tlv(TIPC_CFG_NOT_SUPPORTED);\n1329:\t\telse if (err == -EINVAL)\n1330:\t\t\tmsg.rep = tipc_get_err_tlv(TIPC_CFG_TLV_ERROR);\n1331:\tsend:\n1332:\t\tif (!msg.rep)\n1333:\t\t\treturn err;\n1334:\t\n1335:\t\tlen = nlmsg_total_size(GENL_HDRLEN + TIPC_GENL_HDRLEN);\n1336:\t\tskb_push(msg.rep, len);\n1337:\t\trep_nlh = nlmsg_hdr(msg.rep);\n1338:\t\tmemcpy(rep_nlh, info-\u003enlhdr, len);\n1339:\t\trep_nlh-\u003enlmsg_len = msg.rep-\u003elen;\n1340:\t\tgenlmsg_unicast(msg.net, msg.rep, NETLINK_CB(skb).portid);\n1341:\t\n1342:\t\treturn err;\n1343:\t}\n1344:\t\n1345:\tstatic const struct genl_small_ops tipc_genl_compat_ops[] = {\n1346:\t\t{\n1347:\t\t\t.cmd\t\t= TIPC_GENL_CMD,\n1348:\t\t\t.validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,\n1349:\t\t\t.doit\t\t= tipc_nl_compat_recv,\n1350:\t\t},\n1351:\t};\n1352:\t\n1353:\tstatic struct genl_family tipc_genl_compat_family __ro_after_init = {\n1354:\t\t.name\t\t= TIPC_GENL_NAME,\n1355:\t\t.version\t= TIPC_GENL_VERSION,\n1356:\t\t.hdrsize\t= TIPC_GENL_HDRLEN,\n1357:\t\t.maxattr\t= 0,\n1358:\t\t.netnsok\t= true,\n1359:\t\t.module\t\t= THIS_MODULE,\n1360:\t\t.small_ops\t= tipc_genl_compat_ops,\n1361:\t\t.n_small_ops\t= ARRAY_SIZE(tipc_genl_compat_ops),\n1362:\t\t.resv_start_op\t= TIPC_GENL_CMD + 1,\n1363:\t};\n1364:\t\n1365:\tint __init tipc_netlink_compat_start(void)\n1366:\t{\n1367:\t\tint res;\n1368:\t\n1369:\t\tres = genl_register_family(\u0026tipc_genl_compat_family);\n1370:\t\tif (res) {\n1371:\t\t\tpr_err(\"Failed to register legacy compat interface\\n\");\n1372:\t\t\treturn res;\n1373:\t\t}\n1374:\t\n1375:\t\treturn 0;\n"
} |
| 38/3 | 2026/09/21 19:36 | llm | kmsan-evaluator |
0mModel:gemini-3.8-flash Args: null Results: null Tokens: input: 13939 output: 39 thoughts: 16 Thoughts: Okay, here's my interpretation of that thought process, tailored for an expert audience, and presented as if it were my own internal monologue: **Investigating `tipc_nl_compat_doit`** Alright, so we're looking at the broader picture here, right? We've probably been dealing with something related to the TIPC (Transparent Inter-Process Communication) system and its interaction with the Netlink interface. The fact that the name `tipc_nl_compat_doit` has popped up immediately suggests we are exploring some form of compatibility or legacy handling within that Netlink path. We likely are working on a more modern or specific system, and want to understand how it interfaces with or overrides the older code. The presence of "compat" in the name is a huge clue. Is this handling older Netlink messages? Is it translating between older and newer structures? Are there potential performance bottlenecks or security vulnerabilities in this compatibility layer we need to consider? We must scrutinize this function and what it handles very carefully, if we are going to understand how the system is currently designed. This is the kind of function that can expose any design or system faults and any potential attack vectors, as well. |
| 39/3 | 2026/09/21 19:37 | tool | read-file |
0mArgs:{
"File": "net/tipc/netlink_compat.c",
"FirstLine": 290,
"LineCount": 70
}Results: {
"Contents": " 290:\t\tif (!msg-\u003erep)\n 291:\t\t\treturn -ENOMEM;\n 292:\t\n 293:\t\tif (msg-\u003erep_type)\n 294:\t\t\ttipc_tlv_init(msg-\u003erep, msg-\u003erep_type);\n 295:\t\n 296:\t\tif (cmd-\u003eheader) {\n 297:\t\t\terr = (*cmd-\u003eheader)(msg);\n 298:\t\t\tif (err) {\n 299:\t\t\t\tkfree_skb(msg-\u003erep);\n 300:\t\t\t\tmsg-\u003erep = NULL;\n 301:\t\t\t\treturn err;\n 302:\t\t\t}\n 303:\t\t}\n 304:\t\n 305:\t\targ = nlmsg_new(0, GFP_KERNEL);\n 306:\t\tif (!arg) {\n 307:\t\t\tkfree_skb(msg-\u003erep);\n 308:\t\t\tmsg-\u003erep = NULL;\n 309:\t\t\treturn -ENOMEM;\n 310:\t\t}\n 311:\t\n 312:\t\tnlh = nlmsg_put(arg, 0, 0, tipc_genl_family.id, 0, NLM_F_MULTI);\n 313:\t\tif (!nlh) {\n 314:\t\t\tkfree_skb(arg);\n 315:\t\t\tkfree_skb(msg-\u003erep);\n 316:\t\t\tmsg-\u003erep = NULL;\n 317:\t\t\treturn -EMSGSIZE;\n 318:\t\t}\n 319:\t\tnlmsg_end(arg, nlh);\n 320:\t\n 321:\t\terr = __tipc_nl_compat_dumpit(cmd, msg, arg);\n 322:\t\tif (err) {\n 323:\t\t\tkfree_skb(msg-\u003erep);\n 324:\t\t\tmsg-\u003erep = NULL;\n 325:\t\t}\n 326:\t\tkfree_skb(arg);\n 327:\t\n 328:\t\treturn err;\n 329:\t}\n 330:\t\n 331:\tstatic int __tipc_nl_compat_doit(struct tipc_nl_compat_cmd_doit *cmd,\n 332:\t\t\t\t\t struct tipc_nl_compat_msg *msg)\n 333:\t{\n 334:\t\tint err;\n 335:\t\tstruct sk_buff *doit_buf;\n 336:\t\tstruct sk_buff *trans_buf;\n 337:\t\tstruct nlattr **attrbuf;\n 338:\t\tstruct genl_info info;\n 339:\t\n 340:\t\ttrans_buf = alloc_skb(NLMSG_GOODSIZE, GFP_KERNEL);\n 341:\t\tif (!trans_buf)\n 342:\t\t\treturn -ENOMEM;\n 343:\t\n 344:\t\tattrbuf = kmalloc_objs(struct nlattr *, tipc_genl_family.maxattr + 1);\n 345:\t\tif (!attrbuf) {\n 346:\t\t\terr = -ENOMEM;\n 347:\t\t\tgoto trans_out;\n 348:\t\t}\n 349:\t\n 350:\t\tdoit_buf = alloc_skb(NLMSG_GOODSIZE, GFP_KERNEL);\n 351:\t\tif (!doit_buf) {\n 352:\t\t\terr = -ENOMEM;\n 353:\t\t\tgoto attrbuf_out;\n 354:\t\t}\n 355:\t\n 356:\t\tmemset(\u0026info, 0, sizeof(info));\n 357:\t\tinfo.attrs = attrbuf;\n 358:\t\n 359:\t\trtnl_lock();\n"
} |
| 40/3 | 2026/09/21 19:37 | llm | kmsan-evaluator |
0mModel:gemini-3.8-flash Args: null Results: null Tokens: input: 15226 output: 25 thoughts: 68 Thoughts: **Debugging the Network Traffic Issue** Okay, so I've got this network issue to track down. My first instinct is to see who last touched the relevant code. Let's start with a quick check of the commit author for the troublesome files. If that's a dead end, or if I need more context, I'll dive into the `git log` to get the full history of changes. I know I saw a similar problem with the `ntohl(ntq->depth) & ~TIPC_NTQ_ALLTYPES` and `TLV_GET_DATA_LEN(msg->req) < (int)sizeof(__be32)` lines of code recently, so I can use those as search terms. It is not common, but some authors will leave detailed commit messages, so this approach might fast track the issue to it's origin. Time to get my hands dirty. |
| 41/3 | 2026/09/21 19:37 | tool | grepper |
0mArgs:{
"Expression": "depth \u0026= ~TIPC_NTQ_ALLTYPES"
}Results: {
"Output": "net/tipc/netlink_compat.c=895=static int tipc_nl_compat_name_table_dump(struct tipc_nl_compat_msg *msg,\n--\nnet/tipc/netlink_compat.c-934-\t\treturn 0;\nnet/tipc/netlink_compat.c:935:\tdepth \u0026= ~TIPC_NTQ_ALLTYPES;\nnet/tipc/netlink_compat.c-936-\tif (lowbound \u0026\u0026 (lowbound \u003e nla_get_u32(publ[TIPC_NLA_PUBL_UPPER])))\n"
} |
| 42/3 | 2026/09/21 19:37 | llm | kmsan-evaluator |
0mModel:gemini-3.8-flash Args: null Results: null Tokens: input: 15667 output: 19 thoughts: 1360 Thoughts: **Analyzing the Commit: A Depth-First Dive** Okay, let's break this down. First, I need to understand what this commit is attempting to achieve. Given that I can't immediately check `git log` directly, I'll dive straight into the code changes. I see three distinct parts, so I'll address them sequentially. 1. **`tipc_nl_compat_name_table_dump_header`**: The initial check involves how the `depth` parameter interacts with the header dumping. Previously, `ntq->depth` could have the `TIPC_NTQ_ALLTYPES` flag set. If it was set, `depth` could become, say, `0x80000001` initially, then be capped at a maximum value of 4 by `if (depth > 4) depth = 4;`. This patch introduces a bitwise AND operation, `& ~TIPC_NTQ_ALLTYPES`. This means it strips the flag. Now, if `depth` was originally, say, `TIPC_NTQ_ALLTYPES | 1`, it would previously be capped to 4; it will now be stripped to 1. It's critical to determine if this change introduces any uninitialized memory reads. However, looking at the code, `header` is a static const array of string literals. We're using string literals, and the code calls `tipc_tlv_sprintf` on them. No memory leak here. The change is simply modifying the number of headers printed based on the flag. 2. **`tipc_nl_compat_name_table_dump`**: This part focuses on the filtering logic during the name table dump. Previously, the code was flawed. If `ntq->depth` had `TIPC_NTQ_ALLTYPES` set (e.g., `depth` was `0x80000001`), the `if (depth == 1) goto out;` would *not* trigger because the comparison would fail. So, the code would proceed to print fields for depth 2, depth 3, and depth 4, even if that was not the intended behaviour. These fields rely on netlink attributes parsed via `nla_parse_nested_deprecated`, such as `publ[TIPC_NLA_PUBL_TYPE]`, `publ[TIPC_NLA_PUBL_LOWER]`, etc. The patch's introduction of `depth &= ~TIPC_NTQ_ALLTYPES;` fixes this. Now if `depth` is 1, 2, or 3, a jump to `out;` occurs. It actually *skips* printing these fields when the depth is less than four. Crucially, I need to determine if this changes introduces or modifies uninitialized memory access. After analyzing, I realize it doesn't. This code is purely fixing filtering logic by the requested depth when the `TIPC_NTQ_ALLTYPES` is set. The fields are accessed from parsed netlink attributes. 3. **`tipc_nl_compat_net_set`**: Finally, this section examines a potential vulnerability. The existing code did not check the length of the data in `msg->req` when trying to retrieve it. If `msg->req` had a length less than `sizeof(__be32)`, dereferencing `*(__be32 *)TLV_DATA(msg->req)` would read past the end of the buffer and cause a crash. This patch adds `if (TLV_GET_DATA_LEN(msg->req) < (int)sizeof(__be32)) return -EINVAL;`. This check prevents that out-of-bounds read and returns an error if the data length is insufficient. This is a very important and simple fix. |
| 43/3 | 2026/09/21 19:37 | tool | grepper |
0mArgs:{
"Expression": "#define TLV_"
}Results: {
"Output": "drivers/infiniband/hw/bng_re/bng_tlv.h=8=struct roce_tlv {\n--\ndrivers/infiniband/hw/bng_re/bng_tlv.h-16- */\ndrivers/infiniband/hw/bng_re/bng_tlv.h:17:#define TLV_SIZE ((sizeof(struct roce_tlv) + 15) / 16)\ndrivers/infiniband/hw/bng_re/bng_tlv.h-18-/*\n--\ndrivers/infiniband/hw/bng_re/bng_tlv.h-20- */\ndrivers/infiniband/hw/bng_re/bng_tlv.h:21:#define TLV_BYTES (TLV_SIZE * 16)\ndrivers/infiniband/hw/bng_re/bng_tlv.h-22-\n--\ndrivers/infiniband/hw/bnxt_re/qplib_tlv.h=26=static inline void __roce_ext_tlv_prep(struct roce_tlv *rtlv, u16 tlv_type,\n--\ndrivers/infiniband/hw/bnxt_re/qplib_tlv.h-38- */\ndrivers/infiniband/hw/bnxt_re/qplib_tlv.h:39:#define TLV_SIZE ((sizeof(struct roce_tlv) + 15) / 16)\ndrivers/infiniband/hw/bnxt_re/qplib_tlv.h-40-/*\n--\ndrivers/infiniband/hw/bnxt_re/qplib_tlv.h-42- */\ndrivers/infiniband/hw/bnxt_re/qplib_tlv.h:43:#define TLV_BYTES (TLV_SIZE * 16)\ndrivers/infiniband/hw/bnxt_re/qplib_tlv.h-44-\n--\ndrivers/net/ethernet/broadcom/bnx2x/bnx2x_vfpf.h=39=struct hw_sb_info {\n--\ndrivers/net/ethernet/broadcom/bnx2x/bnx2x_vfpf.h-46- */\ndrivers/net/ethernet/broadcom/bnx2x/bnx2x_vfpf.h:47:#define TLV_BUFFER_SIZE\t\t\t1024\ndrivers/net/ethernet/broadcom/bnx2x/bnx2x_vfpf.h-48-#define PF_VF_BULLETIN_SIZE\t\t512\n--\ndrivers/net/ethernet/meta/fbnic/fbnic_tlv.h=79=struct fbnic_tlv_index {\n--\ndrivers/net/ethernet/meta/fbnic/fbnic_tlv.h-84-\ndrivers/net/ethernet/meta/fbnic/fbnic_tlv.h:85:#define TLV_MAX_DATA\t\t\t((PAGE_SIZE - 512) \u0026 0xFFFF)\ndrivers/net/ethernet/meta/fbnic/fbnic_tlv.h-86-#define FBNIC_TLV_ATTR_ID_UNKNOWN\tUSHRT_MAX\n--\ndrivers/net/ethernet/qlogic/qed/qed_mng_tlv.c-16-\ndrivers/net/ethernet/qlogic/qed/qed_mng_tlv.c:17:#define TLV_TYPE(p) (p[0])\ndrivers/net/ethernet/qlogic/qed/qed_mng_tlv.c:18:#define TLV_LENGTH(p) (p[1])\ndrivers/net/ethernet/qlogic/qed/qed_mng_tlv.c:19:#define TLV_FLAGS(p) (p[3])\ndrivers/net/ethernet/qlogic/qed/qed_mng_tlv.c-20-\n--\ndrivers/net/ethernet/qlogic/qed/qed_vf.h=26=struct hw_sb_info {\n--\ndrivers/net/ethernet/qlogic/qed/qed_vf.h-31-\ndrivers/net/ethernet/qlogic/qed/qed_vf.h:32:#define TLV_BUFFER_SIZE 1024\ndrivers/net/ethernet/qlogic/qed/qed_vf.h-33-\n--\ndrivers/net/wireless/ath/ath11k/wmi.h=46=struct wmi_tlv {\n--\ndrivers/net/wireless/ath/ath11k/wmi.h-52-#define WMI_TLV_TAG\tGENMASK(31, 16)\ndrivers/net/wireless/ath/ath11k/wmi.h:53:#define TLV_HDR_SIZE\tsizeof_field(struct wmi_tlv, header)\ndrivers/net/wireless/ath/ath11k/wmi.h-54-\n--\ndrivers/net/wireless/ath/ath12k/wmi.h=74=struct wmi_tlv {\n--\ndrivers/net/wireless/ath/ath12k/wmi.h-80-#define WMI_TLV_TAG\tGENMASK(31, 16)\ndrivers/net/wireless/ath/ath12k/wmi.h:81:#define TLV_HDR_SIZE\tsizeof_field(struct wmi_tlv, header)\ndrivers/net/wireless/ath/ath12k/wmi.h-82-\n--\ndrivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.h-58-/* IE TLV processing */\ndrivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.h:59:#define TLV_LEN_OFF\t\t\t1\t/* length offset */\ndrivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.h:60:#define TLV_HDR_LEN\t\t\t2\t/* header length */\ndrivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.h:61:#define TLV_BODY_OFF\t\t\t2\t/* body offset */\ndrivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.h:62:#define TLV_OUI_LEN\t\t\t3\t/* oui id length */\ndrivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.h-63-\n--\ndrivers/net/wireless/marvell/libertas/types.h=53=union ieee_phy_param_set {\n--\ndrivers/net/wireless/marvell/libertas/types.h-63-\ndrivers/net/wireless/marvell/libertas/types.h:64:#define TLV_TYPE_SSID\t\t\t\t0x0000\ndrivers/net/wireless/marvell/libertas/types.h:65:#define TLV_TYPE_RATES\t\t\t\t0x0001\ndrivers/net/wireless/marvell/libertas/types.h:66:#define TLV_TYPE_PHY_FH\t\t\t\t0x0002\ndrivers/net/wireless/marvell/libertas/types.h:67:#define TLV_TYPE_PHY_DS\t\t\t\t0x0003\ndrivers/net/wireless/marvell/libertas/types.h:68:#define TLV_TYPE_CF\t\t\t\t 0x0004\ndrivers/net/wireless/marvell/libertas/types.h:69:#define TLV_TYPE_IBSS\t\t\t\t0x0006\ndrivers/net/wireless/marvell/libertas/types.h-70-\ndrivers/net/wireless/marvell/libertas/types.h:71:#define TLV_TYPE_DOMAIN\t\t\t\t0x0007\ndrivers/net/wireless/marvell/libertas/types.h-72-\ndrivers/net/wireless/marvell/libertas/types.h:73:#define TLV_TYPE_POWER_CAPABILITY\t0x0021\ndrivers/net/wireless/marvell/libertas/types.h-74-\ndrivers/net/wireless/marvell/libertas/types.h:75:#define TLV_TYPE_KEY_MATERIAL (PROPRIETARY_TLV_BASE_ID + 0)\ndrivers/net/wireless/marvell/libertas/types.h:76:#define TLV_TYPE_CHANLIST (PROPRIETARY_TLV_BASE_ID + 1)\ndrivers/net/wireless/marvell/libertas/types.h:77:#define TLV_TYPE_NUMPROBES (PROPRIETARY_TLV_BASE_ID + 2)\ndrivers/net/wireless/marvell/libertas/types.h:78:#define TLV_TYPE_RSSI_LOW (PROPRIETARY_TLV_BASE_ID + 4)\ndrivers/net/wireless/marvell/libertas/types.h:79:#define TLV_TYPE_SNR_LOW (PROPRIETARY_TLV_BASE_ID + 5)\ndrivers/net/wireless/marvell/libertas/types.h:80:#define TLV_TYPE_FAILCOUNT (PROPRIETARY_TLV_BASE_ID + 6)\ndrivers/net/wireless/marvell/libertas/types.h:81:#define TLV_TYPE_BCNMISS (PROPRIETARY_TLV_BASE_ID + 7)\ndrivers/net/wireless/marvell/libertas/types.h:82:#define TLV_TYPE_LED_GPIO (PROPRIETARY_TLV_BASE_ID + 8)\ndrivers/net/wireless/marvell/libertas/types.h:83:#define TLV_TYPE_LEDBEHAVIOR (PROPRIETARY_TLV_BASE_ID + 9)\ndrivers/net/wireless/marvell/libertas/types.h:84:#define TLV_TYPE_PASSTHROUGH (PROPRIETARY_TLV_BASE_ID + 10)\ndrivers/net/wireless/marvell/libertas/types.h:85:#define TLV_TYPE_REASSOCAP (PROPRIETARY_TLV_BASE_ID + 11)\ndrivers/net/wireless/marvell/libertas/types.h:86:#define TLV_TYPE_POWER_TBL_2_4GHZ (PROPRIETARY_TLV_BASE_ID + 12)\ndrivers/net/wireless/marvell/libertas/types.h:87:#define TLV_TYPE_POWER_TBL_5GHZ (PROPRIETARY_TLV_BASE_ID + 13)\ndrivers/net/wireless/marvell/libertas/types.h:88:#define TLV_TYPE_BCASTPROBE\t (PROPRIETARY_TLV_BASE_ID + 14)\ndrivers/net/wireless/marvell/libertas/types.h:89:#define TLV_TYPE_NUMSSID_PROBE\t (PROPRIETARY_TLV_BASE_ID + 15)\ndrivers/net/wireless/marvell/libertas/types.h:90:#define TLV_TYPE_WMMQSTATUS \t (PROPRIETARY_TLV_BASE_ID + 16)\ndrivers/net/wireless/marvell/libertas/types.h:91:#define TLV_TYPE_CRYPTO_DATA\t (PROPRIETARY_TLV_BASE_ID + 17)\ndrivers/net/wireless/marvell/libertas/types.h:92:#define TLV_TYPE_WILDCARDSSID\t (PROPRIETARY_TLV_BASE_ID + 18)\ndrivers/net/wireless/marvell/libertas/types.h:93:#define TLV_TYPE_TSFTIMESTAMP\t (PROPRIETARY_TLV_BASE_ID + 19)\ndrivers/net/wireless/marvell/libertas/types.h:94:#define TLV_TYPE_RSSI_HIGH (PROPRIETARY_TLV_BASE_ID + 22)\ndrivers/net/wireless/marvell/libertas/types.h:95:#define TLV_TYPE_SNR_HIGH (PROPRIETARY_TLV_BASE_ID + 23)\ndrivers/net/wireless/marvell/libertas/types.h:96:#define TLV_TYPE_WPS_ENROLLEE (PROPRIETARY_TLV_BASE_ID + 27)\ndrivers/net/wireless/marvell/libertas/types.h:97:#define TLV_TYPE_AUTH_TYPE (PROPRIETARY_TLV_BASE_ID + 31)\ndrivers/net/wireless/marvell/libertas/types.h:98:#define TLV_TYPE_MESH_ID (PROPRIETARY_TLV_BASE_ID + 37)\ndrivers/net/wireless/marvell/libertas/types.h:99:#define TLV_TYPE_OLD_MESH_ID (PROPRIETARY_TLV_BASE_ID + 291)\ndrivers/net/wireless/marvell/libertas/types.h-100-\n--\ndrivers/net/wireless/marvell/mwifiex/fw.h=129=enum MWIFIEX_802_11_PRIVACY_FILTER {\n--\ndrivers/net/wireless/marvell/mwifiex/fw.h-148-\ndrivers/net/wireless/marvell/mwifiex/fw.h:149:#define TLV_TYPE_UAP_SSID\t\t\t0x0000\ndrivers/net/wireless/marvell/mwifiex/fw.h:150:#define TLV_TYPE_UAP_RATES\t\t\t0x0001\ndrivers/net/wireless/marvell/mwifiex/fw.h:151:#define TLV_TYPE_PWR_CONSTRAINT\t\t\t0x0020\ndrivers/net/wireless/marvell/mwifiex/fw.h-152-\ndrivers/net/wireless/marvell/mwifiex/fw.h-153-#define PROPRIETARY_TLV_BASE_ID 0x0100\ndrivers/net/wireless/marvell/mwifiex/fw.h:154:#define TLV_TYPE_KEY_MATERIAL (PROPRIETARY_TLV_BASE_ID + 0)\ndrivers/net/wireless/marvell/mwifiex/fw.h:155:#define TLV_TYPE_CHANLIST (PROPRIETARY_TLV_BASE_ID + 1)\ndrivers/net/wireless/marvell/mwifiex/fw.h:156:#define TLV_TYPE_NUMPROBES (PROPRIETARY_TLV_BASE_ID + 2)\ndrivers/net/wireless/marvell/mwifiex/fw.h:157:#define TLV_TYPE_RSSI_LOW (PROPRIETARY_TLV_BASE_ID + 4)\ndrivers/net/wireless/marvell/mwifiex/fw.h:158:#define TLV_TYPE_PASSTHROUGH (PROPRIETARY_TLV_BASE_ID + 10)\ndrivers/net/wireless/marvell/mwifiex/fw.h:159:#define TLV_TYPE_WMMQSTATUS (PROPRIETARY_TLV_BASE_ID + 16)\ndrivers/net/wireless/marvell/mwifiex/fw.h:160:#define TLV_TYPE_WILDCARDSSID (PROPRIETARY_TLV_BASE_ID + 18)\ndrivers/net/wireless/marvell/mwifiex/fw.h:161:#define TLV_TYPE_TSFTIMESTAMP (PROPRIETARY_TLV_BASE_ID + 19)\ndrivers/net/wireless/marvell/mwifiex/fw.h:162:#define TLV_TYPE_RSSI_HIGH (PROPRIETARY_TLV_BASE_ID + 22)\ndrivers/net/wireless/marvell/mwifiex/fw.h:163:#define TLV_TYPE_BGSCAN_START_LATER (PROPRIETARY_TLV_BASE_ID + 30)\ndrivers/net/wireless/marvell/mwifiex/fw.h:164:#define TLV_TYPE_AUTH_TYPE (PROPRIETARY_TLV_BASE_ID + 31)\ndrivers/net/wireless/marvell/mwifiex/fw.h:165:#define TLV_TYPE_STA_MAC_ADDR (PROPRIETARY_TLV_BASE_ID + 32)\ndrivers/net/wireless/marvell/mwifiex/fw.h:166:#define TLV_TYPE_BSSID (PROPRIETARY_TLV_BASE_ID + 35)\ndrivers/net/wireless/marvell/mwifiex/fw.h:167:#define TLV_TYPE_CHANNELBANDLIST (PROPRIETARY_TLV_BASE_ID + 42)\ndrivers/net/wireless/marvell/mwifiex/fw.h:168:#define TLV_TYPE_UAP_MAC_ADDRESS (PROPRIETARY_TLV_BASE_ID + 43)\ndrivers/net/wireless/marvell/mwifiex/fw.h:169:#define TLV_TYPE_UAP_BEACON_PERIOD (PROPRIETARY_TLV_BASE_ID + 44)\ndrivers/net/wireless/marvell/mwifiex/fw.h:170:#define TLV_TYPE_UAP_DTIM_PERIOD (PROPRIETARY_TLV_BASE_ID + 45)\ndrivers/net/wireless/marvell/mwifiex/fw.h:171:#define TLV_TYPE_UAP_BCAST_SSID (PROPRIETARY_TLV_BASE_ID + 48)\ndrivers/net/wireless/marvell/mwifiex/fw.h:172:#define TLV_TYPE_UAP_RTS_THRESHOLD (PROPRIETARY_TLV_BASE_ID + 51)\ndrivers/net/wireless/marvell/mwifiex/fw.h:173:#define TLV_TYPE_UAP_AO_TIMER (PROPRIETARY_TLV_BASE_ID + 57)\ndrivers/net/wireless/marvell/mwifiex/fw.h:174:#define TLV_TYPE_UAP_WEP_KEY (PROPRIETARY_TLV_BASE_ID + 59)\ndrivers/net/wireless/marvell/mwifiex/fw.h:175:#define TLV_TYPE_UAP_WPA_PASSPHRASE (PROPRIETARY_TLV_BASE_ID + 60)\ndrivers/net/wireless/marvell/mwifiex/fw.h:176:#define TLV_TYPE_UAP_ENCRY_PROTOCOL (PROPRIETARY_TLV_BASE_ID + 64)\ndrivers/net/wireless/marvell/mwifiex/fw.h:177:#define TLV_TYPE_UAP_AKMP (PROPRIETARY_TLV_BASE_ID + 65)\ndrivers/net/wireless/marvell/mwifiex/fw.h:178:#define TLV_TYPE_UAP_FRAG_THRESHOLD (PROPRIETARY_TLV_BASE_ID + 70)\ndrivers/net/wireless/marvell/mwifiex/fw.h:179:#define TLV_TYPE_RATE_DROP_CONTROL (PROPRIETARY_TLV_BASE_ID + 82)\ndrivers/net/wireless/marvell/mwifiex/fw.h:180:#define TLV_TYPE_RATE_SCOPE (PROPRIETARY_TLV_BASE_ID + 83)\ndrivers/net/wireless/marvell/mwifiex/fw.h:181:#define TLV_TYPE_POWER_GROUP (PROPRIETARY_TLV_BASE_ID + 84)\ndrivers/net/wireless/marvell/mwifiex/fw.h:182:#define TLV_TYPE_BSS_SCAN_RSP (PROPRIETARY_TLV_BASE_ID + 86)\ndrivers/net/wireless/marvell/mwifiex/fw.h:183:#define TLV_TYPE_BSS_SCAN_INFO (PROPRIETARY_TLV_BASE_ID + 87)\ndrivers/net/wireless/marvell/mwifiex/fw.h:184:#define TLV_TYPE_CHANRPT_11H_BASIC (PROPRIETARY_TLV_BASE_ID + 91)\ndrivers/net/wireless/marvell/mwifiex/fw.h:185:#define TLV_TYPE_UAP_RETRY_LIMIT (PROPRIETARY_TLV_BASE_ID + 93)\ndrivers/net/wireless/marvell/mwifiex/fw.h:186:#define TLV_TYPE_WAPI_IE (PROPRIETARY_TLV_BASE_ID + 94)\ndrivers/net/wireless/marvell/mwifiex/fw.h:187:#define TLV_TYPE_ROBUST_COEX (PROPRIETARY_TLV_BASE_ID + 96)\ndrivers/net/wireless/marvell/mwifiex/fw.h:188:#define TLV_TYPE_UAP_MGMT_FRAME (PROPRIETARY_TLV_BASE_ID + 104)\ndrivers/net/wireless/marvell/mwifiex/fw.h:189:#define TLV_TYPE_MGMT_IE (PROPRIETARY_TLV_BASE_ID + 105)\ndrivers/net/wireless/marvell/mwifiex/fw.h:190:#define TLV_TYPE_AUTO_DS_PARAM (PROPRIETARY_TLV_BASE_ID + 113)\ndrivers/net/wireless/marvell/mwifiex/fw.h:191:#define TLV_TYPE_PS_PARAM (PROPRIETARY_TLV_BASE_ID + 114)\ndrivers/net/wireless/marvell/mwifiex/fw.h:192:#define TLV_TYPE_UAP_PS_AO_TIMER (PROPRIETARY_TLV_BASE_ID + 123)\ndrivers/net/wireless/marvell/mwifiex/fw.h:193:#define TLV_TYPE_PWK_CIPHER (PROPRIETARY_TLV_BASE_ID + 145)\ndrivers/net/wireless/marvell/mwifiex/fw.h:194:#define TLV_TYPE_GWK_CIPHER (PROPRIETARY_TLV_BASE_ID + 146)\ndrivers/net/wireless/marvell/mwifiex/fw.h:195:#define TLV_TYPE_TX_PAUSE (PROPRIETARY_TLV_BASE_ID + 148)\ndrivers/net/wireless/marvell/mwifiex/fw.h:196:#define TLV_TYPE_RXBA_SYNC (PROPRIETARY_TLV_BASE_ID + 153)\ndrivers/net/wireless/marvell/mwifiex/fw.h:197:#define TLV_TYPE_COALESCE_RULE (PROPRIETARY_TLV_BASE_ID + 154)\ndrivers/net/wireless/marvell/mwifiex/fw.h:198:#define TLV_TYPE_KEY_PARAM_V2 (PROPRIETARY_TLV_BASE_ID + 156)\ndrivers/net/wireless/marvell/mwifiex/fw.h:199:#define TLV_TYPE_REPEAT_COUNT (PROPRIETARY_TLV_BASE_ID + 176)\ndrivers/net/wireless/marvell/mwifiex/fw.h:200:#define TLV_TYPE_PS_PARAMS_IN_HS (PROPRIETARY_TLV_BASE_ID + 181)\ndrivers/net/wireless/marvell/mwifiex/fw.h:201:#define TLV_TYPE_MULTI_CHAN_INFO (PROPRIETARY_TLV_BASE_ID + 183)\ndrivers/net/wireless/marvell/mwifiex/fw.h:202:#define TLV_TYPE_MC_GROUP_INFO (PROPRIETARY_TLV_BASE_ID + 184)\ndrivers/net/wireless/marvell/mwifiex/fw.h:203:#define TLV_TYPE_TDLS_IDLE_TIMEOUT (PROPRIETARY_TLV_BASE_ID + 194)\ndrivers/net/wireless/marvell/mwifiex/fw.h:204:#define TLV_TYPE_SCAN_CHANNEL_GAP (PROPRIETARY_TLV_BASE_ID + 197)\ndrivers/net/wireless/marvell/mwifiex/fw.h:205:#define TLV_TYPE_API_REV (PROPRIETARY_TLV_BASE_ID + 199)\ndrivers/net/wireless/marvell/mwifiex/fw.h:206:#define TLV_TYPE_CHANNEL_STATS (PROPRIETARY_TLV_BASE_ID + 198)\ndrivers/net/wireless/marvell/mwifiex/fw.h:207:#define TLV_BTCOEX_WL_AGGR_WINSIZE (PROPRIETARY_TLV_BASE_ID + 202)\ndrivers/net/wireless/marvell/mwifiex/fw.h:208:#define TLV_BTCOEX_WL_SCANTIME (PROPRIETARY_TLV_BASE_ID + 203)\ndrivers/net/wireless/marvell/mwifiex/fw.h:209:#define TLV_TYPE_BSS_MODE (PROPRIETARY_TLV_BASE_ID + 206)\ndrivers/net/wireless/marvell/mwifiex/fw.h:210:#define TLV_TYPE_RANDOM_MAC (PROPRIETARY_TLV_BASE_ID + 236)\ndrivers/net/wireless/marvell/mwifiex/fw.h:211:#define TLV_TYPE_CHAN_ATTR_CFG (PROPRIETARY_TLV_BASE_ID + 237)\ndrivers/net/wireless/marvell/mwifiex/fw.h:212:#define TLV_TYPE_MAX_CONN (PROPRIETARY_TLV_BASE_ID + 279)\ndrivers/net/wireless/marvell/mwifiex/fw.h:213:#define TLV_TYPE_HOST_MLME (PROPRIETARY_TLV_BASE_ID + 307)\ndrivers/net/wireless/marvell/mwifiex/fw.h:214:#define TLV_TYPE_UAP_STA_FLAGS (PROPRIETARY_TLV_BASE_ID + 313)\ndrivers/net/wireless/marvell/mwifiex/fw.h:215:#define TLV_TYPE_SAE_PWE_MODE (PROPRIETARY_TLV_BASE_ID + 339)\ndrivers/net/wireless/marvell/mwifiex/fw.h-216-\n--\ndrivers/net/wireless/nxp/nxpwifi/fw.h=129=enum NXPWIFI_802_11_PRIVACY_FILTER {\n--\ndrivers/net/wireless/nxp/nxpwifi/fw.h-148-\ndrivers/net/wireless/nxp/nxpwifi/fw.h:149:#define TLV_TYPE_UAP_SSID 0x0000\ndrivers/net/wireless/nxp/nxpwifi/fw.h:150:#define TLV_TYPE_UAP_RATES 0x0001\ndrivers/net/wireless/nxp/nxpwifi/fw.h:151:#define TLV_TYPE_PWR_CONSTRAINT 0x0020\ndrivers/net/wireless/nxp/nxpwifi/fw.h:152:#define TLV_TYPE_HT_CAPABILITY 0x002d\ndrivers/net/wireless/nxp/nxpwifi/fw.h:153:#define TLV_TYPE_EXTENSION_ID 0x00ff\ndrivers/net/wireless/nxp/nxpwifi/fw.h-154-\ndrivers/net/wireless/nxp/nxpwifi/fw.h-155-#define PROPRIETARY_TLV_BASE_ID 0x0100\ndrivers/net/wireless/nxp/nxpwifi/fw.h:156:#define TLV_TYPE_KEY_MATERIAL (PROPRIETARY_TLV_BASE_ID + 0)\ndrivers/net/wireless/nxp/nxpwifi/fw.h:157:#define TLV_TYPE_CHANLIST (PROPRIETARY_TLV_BASE_ID + 1)\ndrivers/net/wireless/nxp/nxpwifi/fw.h:158:#define TLV_TYPE_NUMPROBES (PROPRIETARY_TLV_BASE_ID + 2)\ndrivers/net/wireless/nxp/nxpwifi/fw.h:159:#define TLV_TYPE_RSSI_LOW (PROPRIETARY_TLV_BASE_ID + 4)\ndrivers/net/wireless/nxp/nxpwifi/fw.h:160:#define TLV_TYPE_PASSTHROUGH (PROPRIETARY_TLV_BASE_ID + 10)\ndrivers/net/wireless/nxp/nxpwifi/fw.h:161:#define TLV_TYPE_WMMQSTATUS (PROPRIETARY_TLV_BASE_ID + 16)\ndrivers/net/wireless/nxp/nxpwifi/fw.h:162:#define TLV_TYPE_WILDCARDSSID (PROPRIETARY_TLV_BASE_ID + 18)\ndrivers/net/wireless/nxp/nxpwifi/fw.h:163:#define TLV_TYPE_TSFTIMESTAMP (PROPRIETARY_TLV_BASE_ID + 19)\ndrivers/net/wireless/nxp/nxpwifi/fw.h:164:#define TLV_TYPE_RSSI_HIGH (PROPRIETARY_TLV_BASE_ID + 22)\ndrivers/net/wireless/nxp/nxpwifi/fw.h:165:#define TLV_TYPE_BGSCAN_START_LATER (PROPRIETARY_TLV_BASE_ID + 30)\ndrivers/net/wireless/nxp/nxpwifi/fw.h:166:#define TLV_TYPE_AUTH_TYPE (PROPRIETARY_TLV_BASE_ID + 31)\ndrivers/net/wireless/nxp/nxpwifi/fw.h:167:#define TLV_TYPE_STA_MAC_ADDR (PROPRIETARY_TLV_BASE_ID + 32)\ndrivers/net/wireless/nxp/nxpwifi/fw.h:168:#define TLV_TYPE_BSSID (PROPRIETARY_TLV_BASE_ID + 35)\ndrivers/net/wireless/nxp/nxpwifi/fw.h:169:#define TLV_TYPE_CHANNELBANDLIST (PROPRIETARY_TLV_BASE_ID + 42)\ndrivers/net/wireless/nxp/nxpwifi/fw.h:170:#define TLV_TYPE_UAP_MAC_ADDRESS (PROPRIETARY_TLV_BASE_ID + 43)\ndrivers/net/wireless/nxp/nxpwifi/fw.h:171:#define TLV_TYPE_UAP_BEACON_PERIOD (PROPRIETARY_TLV_BASE_ID + 44)\ndrivers/net/wireless/nxp/nxpwifi/fw.h:172:#define TLV_TYPE_UAP_DTIM_PERIOD (PROPRIETARY_TLV_BASE_ID + 45)\ndrivers/net/wireless/nxp/nxpwifi/fw.h:173:#define TLV_TYPE_UAP_BCAST_SSID (PROPRIETARY_TLV_BASE_ID + 48)\ndrivers/net/wireless/nxp/nxpwifi/fw.h:174:#define TLV_TYPE_UAP_PREAMBLE_CTL (PROPRIETARY_TLV_BASE_ID + 49)\ndrivers/net/wireless/nxp/nxpwifi/fw.h:175:#define TLV_TYPE_UAP_RTS_THRESHOLD (PROPRIETARY_TLV_BASE_ID + 51)\ndrivers/net/wireless/nxp/nxpwifi/fw.h:176:#define TLV_TYPE_UAP_AO_TIMER (PROPRIETARY_TLV_BASE_ID + 57)\ndrivers/net/wireless/nxp/nxpwifi/fw.h:177:#define TLV_TYPE_UAP_WEP_KEY (PROPRIETARY_TLV_BASE_ID + 59)\ndrivers/net/wireless/nxp/nxpwifi/fw.h:178:#define TLV_TYPE_UAP_WPA_PASSPHRASE (PROPRIETARY_TLV_BASE_ID + 60)\ndrivers/net/wireless/nxp/nxpwifi/fw.h:179:#define TLV_TYPE_UAP_ENCRY_PROTOCOL (PROPRIETARY_TLV_BASE_ID + 64)\ndrivers/net/wireless/nxp/nxpwifi/fw.h:180:#define TLV_TYPE_UAP_AKMP (PROPRIETARY_TLV_BASE_ID + 65)\ndrivers/net/wireless/nxp/nxpwifi/fw.h:181:#define TLV_TYPE_UAP_FRAG_THRESHOLD (PROPRIETARY_TLV_BASE_ID + 70)\ndrivers/net/wireless/nxp/nxpwifi/fw.h:182:#define TLV_TYPE_RATE_DROP_CONTROL (PROPRIETARY_TLV_BASE_ID + 82)\ndrivers/net/wireless/nxp/nxpwifi/fw.h:183:#define TLV_TYPE_RATE_SCOPE (PROPRIETARY_TLV_BASE_ID + 83)\ndrivers/net/wireless/nxp/nxpwifi/fw.h:184:#define TLV_TYPE_POWER_GROUP (PROPRIETARY_TLV_BASE_ID + 84)\ndrivers/net/wireless/nxp/nxpwifi/fw.h:185:#define TLV_TYPE_BSS_SCAN_RSP (PROPRIETARY_TLV_BASE_ID + 86)\ndrivers/net/wireless/nxp/nxpwifi/fw.h:186:#define TLV_TYPE_BSS_SCAN_INFO (PROPRIETARY_TLV_BASE_ID + 87)\ndrivers/net/wireless/nxp/nxpwifi/fw.h:187:#define TLV_TYPE_CHANRPT_11H_BASIC (PROPRIETARY_TLV_BASE_ID + 91)\ndrivers/net/wireless/nxp/nxpwifi/fw.h:188:#define TLV_TYPE_UAP_RETRY_LIMIT (PROPRIETARY_TLV_BASE_ID + 93)\ndrivers/net/wireless/nxp/nxpwifi/fw.h:189:#define TLV_TYPE_ROBUST_COEX (PROPRIETARY_TLV_BASE_ID + 96)\ndrivers/net/wireless/nxp/nxpwifi/fw.h:190:#define TLV_TYPE_UAP_MGMT_FRAME (PROPRIETARY_TLV_BASE_ID + 104)\ndrivers/net/wireless/nxp/nxpwifi/fw.h:191:#define TLV_TYPE_MGMT_IE (PROPRIETARY_TLV_BASE_ID + 105)\ndrivers/net/wireless/nxp/nxpwifi/fw.h:192:#define TLV_TYPE_AUTO_DS_PARAM (PROPRIETARY_TLV_BASE_ID + 113)\ndrivers/net/wireless/nxp/nxpwifi/fw.h:193:#define TLV_TYPE_PS_PARAM (PROPRIETARY_TLV_BASE_ID + 114)\ndrivers/net/wireless/nxp/nxpwifi/fw.h:194:#define TLV_TYPE_UAP_PS_AO_TIMER (PROPRIETARY_TLV_BASE_ID + 123)\ndrivers/net/wireless/nxp/nxpwifi/fw.h:195:#define TLV_TYPE_PWK_CIPHER (PROPRIETARY_TLV_BASE_ID + 145)\ndrivers/net/wireless/nxp/nxpwifi/fw.h:196:#define TLV_TYPE_GWK_CIPHER (PROPRIETARY_TLV_BASE_ID + 146)\ndrivers/net/wireless/nxp/nxpwifi/fw.h:197:#define TLV_TYPE_TX_PAUSE (PROPRIETARY_TLV_BASE_ID + 148)\ndrivers/net/wireless/nxp/nxpwifi/fw.h:198:#define TLV_TYPE_RXBA_SYNC (PROPRIETARY_TLV_BASE_ID + 153)\ndrivers/net/wireless/nxp/nxpwifi/fw.h:199:#define TLV_TYPE_COALESCE_RULE (PROPRIETARY_TLV_BASE_ID + 154)\ndrivers/net/wireless/nxp/nxpwifi/fw.h:200:#define TLV_TYPE_KEY_PARAM_V2 (PROPRIETARY_TLV_BASE_ID + 156)\ndrivers/net/wireless/nxp/nxpwifi/fw.h:201:#define TLV_TYPE_REGION_DOMAIN_CODE (PROPRIETARY_TLV_BASE_ID + 171)\ndrivers/net/wireless/nxp/nxpwifi/fw.h:202:#define TLV_TYPE_REPEAT_COUNT (PROPRIETARY_TLV_BASE_ID + 176)\ndrivers/net/wireless/nxp/nxpwifi/fw.h:203:#define TLV_TYPE_PS_PARAMS_IN_HS (PROPRIETARY_TLV_BASE_ID + 181)\ndrivers/net/wireless/nxp/nxpwifi/fw.h:204:#define TLV_TYPE_MULTI_CHAN_INFO (PROPRIETARY_TLV_BASE_ID + 183)\ndrivers/net/wireless/nxp/nxpwifi/fw.h:205:#define TLV_TYPE_MC_GROUP_INFO (PROPRIETARY_TLV_BASE_ID + 184)\ndrivers/net/wireless/nxp/nxpwifi/fw.h:206:#define TLV_TYPE_SCAN_CHANNEL_GAP (PROPRIETARY_TLV_BASE_ID + 197)\ndrivers/net/wireless/nxp/nxpwifi/fw.h:207:#define TLV_TYPE_API_REV (PROPRIETARY_TLV_BASE_ID + 199)\ndrivers/net/wireless/nxp/nxpwifi/fw.h:208:#define TLV_TYPE_CHANNEL_STATS (PROPRIETARY_TLV_BASE_ID + 198)\ndrivers/net/wireless/nxp/nxpwifi/fw.h:209:#define TLV_BTCOEX_WL_AGGR_WINSIZE (PROPRIETARY_TLV_BASE_ID + 202)\ndrivers/net/wireless/nxp/nxpwifi/fw.h:210:#define TLV_BTCOEX_WL_SCANTIME (PROPRIETARY_TLV_BASE_ID + 203)\ndrivers/net/wireless/nxp/nxpwifi/fw.h:211:#define TLV_TYPE_BSS_MODE (PROPRIETARY_TLV_BASE_ID + 206)\ndrivers/net/wireless/nxp/nxpwifi/fw.h:212:#define TLV_TYPE_RANDOM_MAC (PROPRIETARY_TLV_BASE_ID + 236)\ndrivers/net/wireless/nxp/nxpwifi/fw.h:213:#define TLV_TYPE_CHAN_ATTR_CFG (PROPRIETARY_TLV_BASE_ID + 237)\ndrivers/net/wireless/nxp/nxpwifi/fw.h:214:#define TLV_TYPE_MAX_CONN (PROPRIETARY_TLV_BASE_ID + 279)\ndrivers/net/wireless/nxp/nxpwifi/fw.h:215:#define TLV_TYPE_HOST_MLME (PROPRIETARY_TLV_BASE_ID + 307)\ndrivers/net/wireless/nxp/nxpwifi/fw.h:216:#define TLV_TYPE_UAP_STA_FLAGS (PROPRIETARY_TLV_BASE_ID + 313)\ndrivers/net/wireless/nxp/nxpwifi/fw.h:217:#define TLV_TYPE_FW_CAP_INFO (PROPRIETARY_TLV_BASE_ID + 318)\ndrivers/net/wireless/nxp/nxpwifi/fw.h:218:#define TLV_TYPE_AX_ENABLE_SR (PROPRIETARY_TLV_BASE_ID + 322)\ndrivers/net/wireless/nxp/nxpwifi/fw.h:219:#define TLV_TYPE_AX_OBSS_PD_OFFSET (PROPRIETARY_TLV_BASE_ID + 323)\ndrivers/net/wireless/nxp/nxpwifi/fw.h:220:#define TLV_TYPE_SAE_PWE_MODE (PROPRIETARY_TLV_BASE_ID + 339)\ndrivers/net/wireless/nxp/nxpwifi/fw.h:221:#define TLV_TYPE_6E_INBAND_FRAMES (PROPRIETARY_TLV_BASE_ID + 345)\ndrivers/net/wireless/nxp/nxpwifi/fw.h:222:#define TLV_TYPE_SECURE_BOOT_UUID (PROPRIETARY_TLV_BASE_ID + 348)\ndrivers/net/wireless/nxp/nxpwifi/fw.h-223-\n--\ndrivers/soc/qcom/qmi_encdec.c=93=do { \\\n--\ndrivers/soc/qcom/qmi_encdec.c-97-\ndrivers/soc/qcom/qmi_encdec.c:98:#define TLV_LEN_SIZE sizeof(u16)\ndrivers/soc/qcom/qmi_encdec.c:99:#define TLV_TYPE_SIZE sizeof(u8)\ndrivers/soc/qcom/qmi_encdec.c-100-#define OPTIONAL_TLV_TYPE_START 0x10\n--\ndrivers/staging/media/ipu7/abi/ipu7_fw_common_abi.h=30=struct ia_gofo_msg_version_list {\n--\ndrivers/staging/media/ipu7/abi/ipu7_fw_common_abi.h-37-\ndrivers/staging/media/ipu7/abi/ipu7_fw_common_abi.h:38:#define TLV_TYPE_PADDING\t\t(0U)\ndrivers/staging/media/ipu7/abi/ipu7_fw_common_abi.h-39-\n--\ndrivers/staging/media/ipu7/abi/ipu7_fw_common_abi.h=49=struct ia_gofo_tlv_list {\n--\ndrivers/staging/media/ipu7/abi/ipu7_fw_common_abi.h-53-\ndrivers/staging/media/ipu7/abi/ipu7_fw_common_abi.h:54:#define TLV_ITEM_ALIGNMENT\t((u32)sizeof(u32))\ndrivers/staging/media/ipu7/abi/ipu7_fw_common_abi.h:55:#define TLV_MSG_ALIGNMENT\t((u32)sizeof(u64))\ndrivers/staging/media/ipu7/abi/ipu7_fw_common_abi.h:56:#define TLV_LIST_ALIGNMENT\tTLV_ITEM_ALIGNMENT\ndrivers/staging/media/ipu7/abi/ipu7_fw_common_abi.h-57-#pragma pack(pop)\n--\nfs/btrfs/send.c=662=static int tlv_put(struct send_ctx *sctx, u16 attr, const void *data, int len)\n--\nfs/btrfs/send.c-682-\nfs/btrfs/send.c:683:#define TLV_PUT_DEFINE_INT(bits) \\\nfs/btrfs/send.c-684-\tstatic int tlv_put_u##bits(struct send_ctx *sctx,\t \t\\\n--\nfs/btrfs/send.c=709=static int tlv_put_btrfs_timespec(struct send_ctx *sctx, u16 attr,\n--\nfs/btrfs/send.c-718-\nfs/btrfs/send.c:719:#define TLV_PUT(sctx, attrtype, data, attrlen) \\\nfs/btrfs/send.c-720-\tdo { \\\n--\nfs/btrfs/send.c-725-\nfs/btrfs/send.c:726:#define TLV_PUT_INT(sctx, attrtype, bits, value) \\\nfs/btrfs/send.c-727-\tdo { \\\n--\nfs/btrfs/send.c-732-\nfs/btrfs/send.c:733:#define TLV_PUT_U8(sctx, attrtype, data) TLV_PUT_INT(sctx, attrtype, 8, data)\nfs/btrfs/send.c:734:#define TLV_PUT_U16(sctx, attrtype, data) TLV_PUT_INT(sctx, attrtype, 16, data)\nfs/btrfs/send.c:735:#define TLV_PUT_U32(sctx, attrtype, data) TLV_PUT_INT(sctx, attrtype, 32, data)\nfs/btrfs/send.c:736:#define TLV_PUT_U64(sctx, attrtype, data) TLV_PUT_INT(sctx, attrtype, 64, data)\nfs/btrfs/send.c:737:#define TLV_PUT_STRING(sctx, attrtype, str, len) \\\nfs/btrfs/send.c-738-\tdo { \\\n--\nfs/btrfs/send.c-742-\t} while (0)\nfs/btrfs/send.c:743:#define TLV_PUT_PATH(sctx, attrtype, p) \\\nfs/btrfs/send.c-744-\tdo { \\\n--\nfs/btrfs/send.c-749-\t} while(0)\nfs/btrfs/send.c:750:#define TLV_PUT_UUID(sctx, attrtype, uuid) \\\nfs/btrfs/send.c-751-\tdo { \\\n--\nfs/btrfs/send.c-755-\t} while (0)\nfs/btrfs/send.c:756:#define TLV_PUT_BTRFS_TIMESPEC(sctx, attrtype, eb, ts) \\\nfs/btrfs/send.c-757-\tdo { \\\n--\ninclude/linux/bnge/hsi.h=19=struct hwrm_resp_hdr {\n--\ninclude/linux/bnge/hsi.h-28-\ninclude/linux/bnge/hsi.h:29:#define TLV_TYPE_HWRM_REQUEST 0x1UL\ninclude/linux/bnge/hsi.h:30:#define TLV_TYPE_HWRM_RESPONSE 0x2UL\ninclude/linux/bnge/hsi.h:31:#define TLV_TYPE_ROCE_SP_COMMAND 0x3UL\ninclude/linux/bnge/hsi.h:32:#define TLV_TYPE_QUERY_ROCE_CC_GEN1 0x4UL\ninclude/linux/bnge/hsi.h:33:#define TLV_TYPE_MODIFY_ROCE_CC_GEN1 0x5UL\ninclude/linux/bnge/hsi.h:34:#define TLV_TYPE_QUERY_ROCE_CC_GEN2 0x6UL\ninclude/linux/bnge/hsi.h:35:#define TLV_TYPE_MODIFY_ROCE_CC_GEN2 0x7UL\ninclude/linux/bnge/hsi.h:36:#define TLV_TYPE_QUERY_ROCE_CC_GEN1_EXT 0x8UL\ninclude/linux/bnge/hsi.h:37:#define TLV_TYPE_MODIFY_ROCE_CC_GEN1_EXT 0x9UL\ninclude/linux/bnge/hsi.h:38:#define TLV_TYPE_QUERY_ROCE_CC_GEN2_EXT 0xaUL\ninclude/linux/bnge/hsi.h:39:#define TLV_TYPE_MODIFY_ROCE_CC_GEN2_EXT 0xbUL\ninclude/linux/bnge/hsi.h:40:#define TLV_TYPE_ENGINE_CKV_ALIAS_ECC_PUBLIC_KEY 0x8001UL\ninclude/linux/bnge/hsi.h:41:#define TLV_TYPE_ENGINE_CKV_IV 0x8003UL\ninclude/linux/bnge/hsi.h:42:#define TLV_TYPE_ENGINE_CKV_AUTH_TAG 0x8004UL\ninclude/linux/bnge/hsi.h:43:#define TLV_TYPE_ENGINE_CKV_CIPHERTEXT 0x8005UL\ninclude/linux/bnge/hsi.h:44:#define TLV_TYPE_ENGINE_CKV_HOST_ALGORITHMS 0x8006UL\ninclude/linux/bnge/hsi.h:45:#define TLV_TYPE_ENGINE_CKV_HOST_ECC_PUBLIC_KEY 0x8007UL\ninclude/linux/bnge/hsi.h:46:#define TLV_TYPE_ENGINE_CKV_ECDSA_SIGNATURE 0x8008UL\ninclude/linux/bnge/hsi.h:47:#define TLV_TYPE_ENGINE_CKV_FW_ECC_PUBLIC_KEY 0x8009UL\ninclude/linux/bnge/hsi.h:48:#define TLV_TYPE_ENGINE_CKV_FW_ALGORITHMS 0x800aUL\ninclude/linux/bnge/hsi.h:49:#define TLV_TYPE_LAST TLV_TYPE_ENGINE_CKV_FW_ALGORITHMS\ninclude/linux/bnge/hsi.h-50-\n--\ninclude/linux/bnge/hsi.h=52=struct tlv {\n--\ninclude/linux/bnge/hsi.h-55-\tu8\tflags;\ninclude/linux/bnge/hsi.h:56:\t#define TLV_FLAGS_MORE 0x1UL\ninclude/linux/bnge/hsi.h:57:\t#define TLV_FLAGS_MORE_LAST 0x0UL\ninclude/linux/bnge/hsi.h:58:\t#define TLV_FLAGS_MORE_NOT_LAST 0x1UL\ninclude/linux/bnge/hsi.h:59:\t#define TLV_FLAGS_REQUIRED 0x2UL\ninclude/linux/bnge/hsi.h:60:\t#define TLV_FLAGS_REQUIRED_NO (0x0UL \u003c\u003c 1)\ninclude/linux/bnge/hsi.h:61:\t#define TLV_FLAGS_REQUIRED_YES (0x1UL \u003c\u003c 1)\ninclude/linux/bnge/hsi.h:62:\t#define TLV_FLAGS_REQUIRED_LAST TLV_FLAGS_REQUIRED_YES\ninclude/linux/bnge/hsi.h-63-\t__le16\ttlv_type;\n--\ninclude/linux/bnxt/hsi.h=27=struct hwrm_resp_hdr {\n--\ninclude/linux/bnxt/hsi.h-37-\ninclude/linux/bnxt/hsi.h:38:#define TLV_TYPE_HWRM_REQUEST 0x1UL\ninclude/linux/bnxt/hsi.h:39:#define TLV_TYPE_HWRM_RESPONSE 0x2UL\ninclude/linux/bnxt/hsi.h:40:#define TLV_TYPE_ROCE_SP_COMMAND 0x3UL\ninclude/linux/bnxt/hsi.h:41:#define TLV_TYPE_QUERY_ROCE_CC_GEN1 0x4UL\ninclude/linux/bnxt/hsi.h:42:#define TLV_TYPE_MODIFY_ROCE_CC_GEN1 0x5UL\ninclude/linux/bnxt/hsi.h:43:#define TLV_TYPE_QUERY_ROCE_CC_GEN2 0x6UL\ninclude/linux/bnxt/hsi.h:44:#define TLV_TYPE_MODIFY_ROCE_CC_GEN2 0x7UL\ninclude/linux/bnxt/hsi.h:45:#define TLV_TYPE_QUERY_ROCE_CC_GEN1_EXT 0x8UL\ninclude/linux/bnxt/hsi.h:46:#define TLV_TYPE_MODIFY_ROCE_CC_GEN1_EXT 0x9UL\ninclude/linux/bnxt/hsi.h:47:#define TLV_TYPE_QUERY_ROCE_CC_GEN2_EXT 0xaUL\ninclude/linux/bnxt/hsi.h:48:#define TLV_TYPE_MODIFY_ROCE_CC_GEN2_EXT 0xbUL\ninclude/linux/bnxt/hsi.h:49:#define TLV_TYPE_ENGINE_CKV_ALIAS_ECC_PUBLIC_KEY 0x8001UL\ninclude/linux/bnxt/hsi.h:50:#define TLV_TYPE_ENGINE_CKV_IV 0x8003UL\ninclude/linux/bnxt/hsi.h:51:#define TLV_TYPE_ENGINE_CKV_AUTH_TAG 0x8004UL\ninclude/linux/bnxt/hsi.h:52:#define TLV_TYPE_ENGINE_CKV_CIPHERTEXT 0x8005UL\ninclude/linux/bnxt/hsi.h:53:#define TLV_TYPE_ENGINE_CKV_HOST_ALGORITHMS 0x8006UL\ninclude/linux/bnxt/hsi.h:54:#define TLV_TYPE_ENGINE_CKV_HOST_ECC_PUBLIC_KEY 0x8007UL\ninclude/linux/bnxt/hsi.h:55:#define TLV_TYPE_ENGINE_CKV_ECDSA_SIGNATURE 0x8008UL\ninclude/linux/bnxt/hsi.h:56:#define TLV_TYPE_ENGINE_CKV_FW_ECC_PUBLIC_KEY 0x8009UL\ninclude/linux/bnxt/hsi.h:57:#define TLV_TYPE_ENGINE_CKV_FW_ALGORITHMS 0x800aUL\ninclude/linux/bnxt/hsi.h:58:#define TLV_TYPE_LAST TLV_TYPE_ENGINE_CKV_FW_ALGORITHMS\ninclude/linux/bnxt/hsi.h-59-\n--\ninclude/linux/bnxt/hsi.h=62=struct tlv {\n--\ninclude/linux/bnxt/hsi.h-65-\tu8\tflags;\ninclude/linux/bnxt/hsi.h:66:\t#define TLV_FLAGS_MORE 0x1UL\ninclude/linux/bnxt/hsi.h:67:\t#define TLV_FLAGS_MORE_LAST 0x0UL\ninclude/linux/bnxt/hsi.h:68:\t#define TLV_FLAGS_MORE_NOT_LAST 0x1UL\ninclude/linux/bnxt/hsi.h:69:\t#define TLV_FLAGS_REQUIRED 0x2UL\ninclude/linux/bnxt/hsi.h:70:\t#define TLV_FLAGS_REQUIRED_NO (0x0UL \u003c\u003c 1)\ninclude/linux/bnxt/hsi.h:71:\t#define TLV_FLAGS_REQUIRED_YES (0x1UL \u003c\u003c 1)\ninclude/linux/bnxt/hsi.h:72:\t#define TLV_FLAGS_REQUIRED_LAST TLV_FLAGS_REQUIRED_YES\ninclude/linux/bnxt/hsi.h-73-\t__le16\ttlv_type;\n--\ninclude/sound/tlv.h-12-/* For historical reasons, these macros are aliases to the ones in UAPI. */\ninclude/sound/tlv.h:13:#define TLV_ITEM\t\t\tSNDRV_CTL_TLVD_ITEM\ninclude/sound/tlv.h:14:#define TLV_LENGTH\t\t\tSNDRV_CTL_TLVD_LENGTH\ninclude/sound/tlv.h-15-\ninclude/sound/tlv.h:16:#define TLV_CONTAINER_ITEM\t\tSNDRV_CTL_TLVD_CONTAINER_ITEM\ninclude/sound/tlv.h-17-#define DECLARE_TLV_CONTAINER\t\tSNDRV_CTL_TLVD_DECLARE_CONTAINER\ninclude/sound/tlv.h-18-\ninclude/sound/tlv.h:19:#define TLV_DB_SCALE_MASK\t\tSNDRV_CTL_TLVD_DB_SCALE_MASK\ninclude/sound/tlv.h:20:#define TLV_DB_SCALE_MUTE\t\tSNDRV_CTL_TLVD_DB_SCALE_MUTE\ninclude/sound/tlv.h:21:#define TLV_DB_SCALE_ITEM\t\tSNDRV_CTL_TLVD_DB_SCALE_ITEM\ninclude/sound/tlv.h-22-#define DECLARE_TLV_DB_SCALE\t\tSNDRV_CTL_TLVD_DECLARE_DB_SCALE\ninclude/sound/tlv.h-23-\ninclude/sound/tlv.h:24:#define TLV_DB_MINMAX_ITEM\t\tSNDRV_CTL_TLVD_DB_MINMAX_ITEM\ninclude/sound/tlv.h:25:#define TLV_DB_MINMAX_MUTE_ITEM\t\tSNDRV_CTL_TLVD_DB_MINMAX_MUTE_ITEM\ninclude/sound/tlv.h-26-#define DECLARE_TLV_DB_MINMAX\t\tSNDRV_CTL_TLVD_DECLARE_DB_MINMAX\n--\ninclude/sound/tlv.h-28-\ninclude/sound/tlv.h:29:#define TLV_DB_LINEAR_ITEM\t\tSNDRV_CTL_TLVD_DB_LINEAR_ITEM\ninclude/sound/tlv.h-30-#define DECLARE_TLV_DB_LINEAR\t\tSNDRV_CTL_TLVD_DECLARE_DB_LINEAR\ninclude/sound/tlv.h-31-\ninclude/sound/tlv.h:32:#define TLV_DB_RANGE_ITEM\t\tSNDRV_CTL_TLVD_DB_RANGE_ITEM\ninclude/sound/tlv.h-33-#define DECLARE_TLV_DB_RANGE\t\tSNDRV_CTL_TLVD_DECLARE_DB_RANGE\ninclude/sound/tlv.h-34-\ninclude/sound/tlv.h:35:#define TLV_DB_GAIN_MUTE\t\tSNDRV_CTL_TLVD_DB_GAIN_MUTE\ninclude/sound/tlv.h-36-\n--\ninclude/sound/tlv.h-41- */\ninclude/sound/tlv.h:42:#define TLV_DB_RANGE_HEAD(num) \\\ninclude/sound/tlv.h-43-\tSNDRV_CTL_TLVT_DB_RANGE, 6 * (num) * sizeof(unsigned int)\n--\ninclude/uapi/linux/tipc_config.h=244=struct tlv_desc {\n--\ninclude/uapi/linux/tipc_config.h-248-\ninclude/uapi/linux/tipc_config.h:249:#define TLV_ALIGNTO 4\ninclude/uapi/linux/tipc_config.h-250-\ninclude/uapi/linux/tipc_config.h:251:#define TLV_ALIGN(datalen) (((datalen)+(TLV_ALIGNTO-1)) \u0026 ~(TLV_ALIGNTO-1))\ninclude/uapi/linux/tipc_config.h:252:#define TLV_LENGTH(datalen) (sizeof(struct tlv_desc) + (datalen))\ninclude/uapi/linux/tipc_config.h:253:#define TLV_SPACE(datalen) (TLV_ALIGN(TLV_LENGTH(datalen)))\ninclude/uapi/linux/tipc_config.h:254:#define TLV_DATA(tlv) ((void *)((char *)(tlv) + TLV_LENGTH(0)))\ninclude/uapi/linux/tipc_config.h-255-\n--\nnet/bluetooth/mgmt_config.c-31-\nnet/bluetooth/mgmt_config.c:32:#define TLV_SET_U16(_param_code_, _param_name_) \\\nnet/bluetooth/mgmt_config.c-33-\t{ \\\n--\nnet/bluetooth/mgmt_config.c-37-\nnet/bluetooth/mgmt_config.c:38:#define TLV_SET_U32(_param_code_, _param_name_) \\\nnet/bluetooth/mgmt_config.c-39-\t{ \\\n--\nnet/bluetooth/mgmt_config.c-43-\nnet/bluetooth/mgmt_config.c:44:#define TLV_SET_U8(_param_code_, _param_name_) \\\nnet/bluetooth/mgmt_config.c-45-\t{ \\\n--\nnet/bluetooth/mgmt_config.c-49-\nnet/bluetooth/mgmt_config.c:50:#define TLV_SET_U16_JIFFIES_TO_MSECS(_param_code_, _param_name_) \\\nnet/bluetooth/mgmt_config.c-51-\t{ \\\n--\nnet/bluetooth/mgmt_config.c=56=int read_def_system_config(struct sock *sk, struct hci_dev *hdev, void *data,\n--\nnet/bluetooth/mgmt_config.c-138-#define TO_TLV(x)\t\t((struct mgmt_tlv *)(x))\nnet/bluetooth/mgmt_config.c:139:#define TLV_GET_LE32(tlv)\tle32_to_cpu(*((__le32 *)(TO_TLV(tlv)-\u003evalue)))\nnet/bluetooth/mgmt_config.c:140:#define TLV_GET_LE16(tlv)\tle16_to_cpu(*((__le16 *)(TO_TLV(tlv)-\u003evalue)))\nnet/bluetooth/mgmt_config.c:141:#define TLV_GET_U8(tlv)\t\t(*((__u8 *)(TO_TLV(tlv)-\u003evalue)))\nnet/bluetooth/mgmt_config.c-142-\n--\nsound/soc/sof/topology.c=31=MODULE_PARM_DESC(feature_topologies, \"Topology list for virtual loop DAI link\");\n--\nsound/soc/sof/topology.c-45-/* TLV data items */\nsound/soc/sof/topology.c:46:#define TLV_MIN\t\t0\nsound/soc/sof/topology.c:47:#define TLV_STEP\t1\nsound/soc/sof/topology.c:48:#define TLV_MUTE\t2\nsound/soc/sof/topology.c-49-\n"
} |
| 44/3 | 2026/09/21 19:37 | llm | kmsan-evaluator |
0mModel:gemini-3.8-flash Args: null Results: null Tokens: input: 33458 output: 41 thoughts: 27 Thoughts: Here's my summary, as if I were thinking these thoughts: **Examining TIPC Configuration Definitions** Okay, let's dive into the core of how TIPC is configured. I'm going to pull up `include/uapi/linux/tipc_config.h` and zero in around line 244. I need to refresh my memory on the underlying data structures and potential configuration parameters here. I'm especially interested in the areas related to… well, that's what I'm about to find out! Let's see what's defined and how it impacts the overall behavior of the system. I have a hunch this section deals with… [I'd fill in the blank based on what I actually *see* when I look at the file, but this is the general train of thought]. |
| 45/3 | 2026/09/21 19:37 | tool | read-file |
0mArgs:{
"File": "include/uapi/linux/tipc_config.h",
"FirstLine": 240,
"LineCount": 40
}Results: {
"Contents": " 240:\t * so up to 3 bytes of padding may exist at the end of the TLV value area.\n 241:\t * There must not be any padding between the TLV descriptor and its value.\n 242:\t */\n 243:\t\n 244:\tstruct tlv_desc {\n 245:\t\t__be16 tlv_len;\t\t/* TLV length (descriptor + value) */\n 246:\t\t__be16 tlv_type;\t\t/* TLV identifier */\n 247:\t};\n 248:\t\n 249:\t#define TLV_ALIGNTO 4\n 250:\t\n 251:\t#define TLV_ALIGN(datalen) (((datalen)+(TLV_ALIGNTO-1)) \u0026 ~(TLV_ALIGNTO-1))\n 252:\t#define TLV_LENGTH(datalen) (sizeof(struct tlv_desc) + (datalen))\n 253:\t#define TLV_SPACE(datalen) (TLV_ALIGN(TLV_LENGTH(datalen)))\n 254:\t#define TLV_DATA(tlv) ((void *)((char *)(tlv) + TLV_LENGTH(0)))\n 255:\t\n 256:\tstatic inline int TLV_OK(const void *tlv, __u16 space)\n 257:\t{\n 258:\t\t/*\n 259:\t\t * Would also like to check that \"tlv\" is a multiple of 4,\n 260:\t\t * but don't know how to do this in a portable way.\n 261:\t\t * - Tried doing (!(tlv \u0026 (TLV_ALIGNTO-1))), but GCC compiler\n 262:\t\t * won't allow binary \"\u0026\" with a pointer.\n 263:\t\t * - Tried casting \"tlv\" to integer type, but causes warning about size\n 264:\t\t * mismatch when pointer is bigger than chosen type (int, long, ...).\n 265:\t\t */\n 266:\t\n 267:\t\treturn (space \u003e= TLV_SPACE(0)) \u0026\u0026\n 268:\t\t\t(__be16_to_cpu(((struct tlv_desc *)tlv)-\u003etlv_len) \u003c= space);\n 269:\t}\n 270:\t\n 271:\tstatic inline int TLV_CHECK(const void *tlv, __u16 space, __u16 exp_type)\n 272:\t{\n 273:\t\treturn TLV_OK(tlv, space) \u0026\u0026\n 274:\t\t\t(__be16_to_cpu(((struct tlv_desc *)tlv)-\u003etlv_type) == exp_type);\n 275:\t}\n 276:\t\n 277:\tstatic inline int TLV_GET_LEN(struct tlv_desc *tlv)\n 278:\t{\n 279:\t\treturn __be16_to_cpu(tlv-\u003etlv_len);\n"
} |
| 46/3 | 2026/09/21 19:37 | llm | kmsan-evaluator |
0mModel:gemini-3.8-flash Args: null Results: null Tokens: input: 34456 output: 41 thoughts: 31 Thoughts: Here's my attempt at summarizing the thought process, as if I were an expert: **Investigating the `TLV_GET_DATA_LEN` Macro** Alright, let's dive into the `include/uapi/linux/tipc_config.h` header file and take a look at what this `TLV_GET_DATA_LEN` macro is all about. Based on the naming, it's pretty clear this is probably related to getting the data length from a Type-Length-Value (TLV) encoded structure, likely within the context of the TIPC (Transparent Inter-Process Communication) protocol. I'm guessing it’s a macro since we're dealing with potentially performance-critical aspects of the kernel and avoiding function call overhead is usually the preferred approach for this kind of low-level manipulation. I expect it'll use some bitwise operations, perhaps shifts and masks, to extract the length field from a defined memory layout, probably related to the TLV's header. Curious to see the exact implementation, and how it handles potential endianness issues, if any. I bet it uses some defined structure members. I need to be sure it's correct so it doesn't cause any undefined behavior. |
| 47/3 | 2026/09/21 19:37 | tool | read-file |
0mArgs:{
"File": "include/uapi/linux/tipc_config.h",
"FirstLine": 275,
"LineCount": 20
}Results: {
"Contents": " 275:\t}\n 276:\t\n 277:\tstatic inline int TLV_GET_LEN(struct tlv_desc *tlv)\n 278:\t{\n 279:\t\treturn __be16_to_cpu(tlv-\u003etlv_len);\n 280:\t}\n 281:\t\n 282:\tstatic inline void TLV_SET_LEN(struct tlv_desc *tlv, __u16 len)\n 283:\t{\n 284:\t\ttlv-\u003etlv_len = __cpu_to_be16(len);\n 285:\t}\n 286:\t\n 287:\tstatic inline int TLV_CHECK_TYPE(struct tlv_desc *tlv, __u16 type)\n 288:\t{\n 289:\t\treturn (__be16_to_cpu(tlv-\u003etlv_type) == type);\n 290:\t}\n 291:\t\n 292:\tstatic inline void TLV_SET_TYPE(struct tlv_desc *tlv, __u16 type)\n 293:\t{\n 294:\t\ttlv-\u003etlv_type = __cpu_to_be16(type);\n"
} |
| 48/3 | 2026/09/21 19:37 | llm | kmsan-evaluator |
0mModel:gemini-3.8-flash Args: null Results: null Tokens: input: 35118 output: 21 thoughts: 20 Thoughts: **Finding the Definition of `TLV_GET_DATA_LEN`** Okay, so I need to figure out where `TLV_GET_DATA_LEN` is defined. This is a common situation. It's a constant or macro, and it's essential to understand its purpose and how it's used within the codebase. The most straightforward approach, of course, is a grep. I'll launch a search for it, and that should quickly pinpoint its declaration. Hopefully, it's a simple `#define` or similar, and I can immediately see the value it represents. Knowing that's the first step to figuring out what's going on with it, or troubleshooting any potential issues with it. |
| 49/3 | 2026/09/21 19:37 | tool | grepper |
0mArgs:{
"Expression": "TLV_GET_DATA_LEN"
}Results: {
"Output": "net/tipc/netlink_compat.c=78=static int tipc_skb_tailroom(struct sk_buff *skb)\n--\nnet/tipc/netlink_compat.c-91-\nnet/tipc/netlink_compat.c:92:static inline int TLV_GET_DATA_LEN(struct tlv_desc *tlv)\nnet/tipc/netlink_compat.c-93-{\n--\nnet/tipc/netlink_compat.c=425=static int tipc_nl_compat_bearer_enable(struct tipc_nl_compat_cmd_doit *cmd,\n--\nnet/tipc/netlink_compat.c-439-\nnet/tipc/netlink_compat.c:440:\tlen = TLV_GET_DATA_LEN(msg-\u003ereq);\nnet/tipc/netlink_compat.c-441-\tlen -= offsetof(struct tipc_bearer_config, name);\n--\nnet/tipc/netlink_compat.c=468=static int tipc_nl_compat_bearer_disable(struct tipc_nl_compat_cmd_doit *cmd,\n--\nnet/tipc/netlink_compat.c-481-\nnet/tipc/netlink_compat.c:482:\tlen = TLV_GET_DATA_LEN(msg-\u003ereq);\nnet/tipc/netlink_compat.c-483-\tif (len \u003c= 0)\n--\nnet/tipc/netlink_compat.c=542=static int tipc_nl_compat_link_stat_dump(struct tipc_nl_compat_msg *msg,\n--\nnet/tipc/netlink_compat.c-579-\nnet/tipc/netlink_compat.c:580:\tlen = TLV_GET_DATA_LEN(msg-\u003ereq);\nnet/tipc/netlink_compat.c-581-\tif (len \u003c= 0)\n--\nnet/tipc/netlink_compat.c=803=static int tipc_nl_compat_link_set(struct tipc_nl_compat_cmd_doit *cmd,\n--\nnet/tipc/netlink_compat.c-813-\nnet/tipc/netlink_compat.c:814:\tlen = TLV_GET_DATA_LEN(msg-\u003ereq);\nnet/tipc/netlink_compat.c-815-\tlen -= offsetof(struct tipc_link_config, name);\n--\nnet/tipc/netlink_compat.c=838=static int tipc_nl_compat_link_reset_stats(struct tipc_nl_compat_cmd_doit *cmd,\n--\nnet/tipc/netlink_compat.c-851-\nnet/tipc/netlink_compat.c:852:\tlen = TLV_GET_DATA_LEN(msg-\u003ereq);\nnet/tipc/netlink_compat.c-853-\tif (len \u003c= 0)\n--\nnet/tipc/netlink_compat.c=868=static int tipc_nl_compat_name_table_dump_header(struct tipc_nl_compat_msg *msg)\n--\nnet/tipc/netlink_compat.c-880-\tntq = (struct tipc_name_table_query *)TLV_DATA(msg-\u003ereq);\nnet/tipc/netlink_compat.c:881:\tif (TLV_GET_DATA_LEN(msg-\u003ereq) \u003c (int)sizeof(struct tipc_name_table_query))\nnet/tipc/netlink_compat.c-882-\t\treturn -EINVAL;\n--\nnet/tipc/netlink_compat.c=1136=static int tipc_nl_compat_net_set(struct tipc_nl_compat_cmd_doit *cmd,\n--\nnet/tipc/netlink_compat.c-1142-\nnet/tipc/netlink_compat.c:1143:\tif (TLV_GET_DATA_LEN(msg-\u003ereq) \u003c (int)sizeof(__be32))\nnet/tipc/netlink_compat.c-1144-\t\treturn -EINVAL;\n"
} |
| 50/3 | 2026/09/21 19:37 | llm | kmsan-evaluator |
0mModel:gemini-3.8-flash Args: null Results: null Tokens: input: 36359 output: 38 thoughts: 38 Thoughts: Here's my summary, as if I were thinking these thoughts: **Analyzing `TLV_GET_DATA_LEN` in `net/tipc/netlink_compat.c`** Okay, let's dive into this. I'm taking a look at the definition of `TLV_GET_DATA_LEN` within the `net/tipc/netlink_compat.c` file. Specifically, I'm zeroing in on lines 90 through 100. My immediate thought is to consider *why* this macro exists, and what problem it's trying to solve. Is it about handling variable-length data structures within the Netlink messages? Is it related to compatibility between different TIPC versions? I'm already anticipating that it will likely be tied to extracting the data length field from a Type-Length-Value (TLV) structure, which is a common pattern in network protocols. Understanding this macro is crucial because incorrect calculation here could lead to buffer overflows and all kinds of nasty issues. I'll be looking for how it handles different data types, and any potential alignment issues. Let's see what the code reveals! |
| 51/3 | 2026/09/21 19:37 | tool | read-file |
0mArgs:{
"File": "net/tipc/netlink_compat.c",
"FirstLine": 90,
"LineCount": 20
}Results: {
"Contents": " 90:\t}\n 91:\t\n 92:\tstatic inline int TLV_GET_DATA_LEN(struct tlv_desc *tlv)\n 93:\t{\n 94:\t\treturn TLV_GET_LEN(tlv) - TLV_SPACE(0);\n 95:\t}\n 96:\t\n 97:\tstatic int tipc_add_tlv(struct sk_buff *skb, u16 type, void *data, u16 len)\n 98:\t{\n 99:\t\tstruct tlv_desc *tlv = (struct tlv_desc *)skb_tail_pointer(skb);\n 100:\t\n 101:\t\tif (tipc_skb_tailroom(skb) \u003c TLV_SPACE(len))\n 102:\t\t\treturn -EMSGSIZE;\n 103:\t\n 104:\t\tskb_put(skb, TLV_SPACE(len));\n 105:\t\tmemset(tlv, 0, TLV_SPACE(len));\n 106:\t\ttlv-\u003etlv_type = htons(type);\n 107:\t\ttlv-\u003etlv_len = htons(TLV_LENGTH(len));\n 108:\t\tif (len \u0026\u0026 data)\n 109:\t\t\tmemcpy(TLV_DATA(tlv), data, len);\n"
} |
| 52/3 | 2026/09/21 19:37 | llm | kmsan-evaluator |
0mModel:gemini-3.8-flash Args: null Results: null Tokens: input: 37028 output: 301 thoughts: 2860 Thoughts: **Analysis of the TIPC Netlink Patch and KMSAN Applicability** Okay, let's break this down. My initial focus is on the changes and whether KMSAN is actually needed here. First, I see three core modifications: 1. In `tipc_nl_compat_net_set`, the addition of a `TLV_GET_DATA_LEN` check. This is crucial because it *prevents* an out-of-bounds read. Before, we were blindly dereferencing `TLV_DATA(msg->req)` without validating its length. This is a classic buffer overflow scenario, and a textbook case for KASAN to catch. KASAN is built for this. 2. In `tipc_nl_compat_name_table_dump_header` and `tipc_nl_compat_name_table_dump`, they are masking `TIPC_NTQ_ALLTYPES` from `ntq->depth`. This change cleans up logic errors in handling the depth parameter. It ensures that the requested depth (1-4) is always respected. 3. The changes in sections 1 and 2, which are the focus, are about preventing reading past the end of the user request TLV payload. This would cause an out of bounds read, in `tipc_nl_compat_net_set`, and improper control flow if `ntq->depth` contains the incorrect values in sections 2. Now, let's determine if this touches upon the KMSAN domain. We have to consider what KMSAN *does*: it detects reads of uninitialized memory, both in kernel and kernel to user space information leaks. So, I need to check whether the *patch* introduces or changes things that could lead to uninitialized memory being used: * Are we sending any new kernel structures to userspace, where uninitialized fields are potentially being copied? No. The data returned by these functions appears to be either: static strings or the result of netlink attributes being sent into `skb`. * Are we introducing conditional logic that relies on uninitialized variables? No. The `depth` value, the value in `TLV_DATA(msg->req)` are all received netlink attributes, and they're being validated. * Are we allocating and initializing *new* data structures in a way that could lead to uninitialized fields being read later? No. There are no memory allocations in the code, or initializations. * Are we potentially allowing access to uninitialized parts of existing buffers through incorrect length checks or logic? No. The primary change actually *prevents* reading past the end of the input buffer. The mask operation prevents reading past fields. The initial bug was an *out-of-bounds read*, which is squarely within KASAN's domain. The other changes don't introduce any new risks related to uninitialized memory. Therefore, the answer is: `NeedsKMSAN=false`. The existing KASAN infrastructure is more than sufficient. I'm confident about this. Let's send that through. |
| 53/3 | 2026/09/21 19:37 | tool | set-results |
0mArgs:{
"KMSANReasoning": "The patch modifies net/tipc/netlink_compat.c in two distinct ways:\n\n1. In tipc_nl_compat_net_set(), it adds a missing length check (TLV_GET_DATA_LEN(msg-\u003ereq) \u003c (int)sizeof(__be32)) before dereferencing msg-\u003ereq. Prior to this, an input TLV with fewer than 4 bytes of payload could result in an out-of-bounds read. Out-of-bounds read detection is strictly the purview of KASAN, not KMSAN.\n\n2. In tipc_nl_compat_name_table_dump_header() and tipc_nl_compat_name_table_dump(), it masks out the TIPC_NTQ_ALLTYPES flag from ntq-\u003edepth. This fixes control flow logic so that depths 1 to 4 are honored even if TIPC_NTQ_ALLTYPES is specified in the request. The dumped headers and publication strings are formatted from static string literals and parsed netlink attributes into the reply buffer.\n\nNeither change introduces, exposes, or accesses uninitialized stack, heap, or page memory, nor do they leak uninitialized padding bytes to userspace. Therefore, standard KASAN testing is sufficient and a dedicated KMSAN fuzzing session is not warranted.",
"NeedsKMSAN": false
}Results: {
"KMSANReasoning": "The patch modifies net/tipc/netlink_compat.c in two distinct ways:\n\n1. In tipc_nl_compat_net_set(), it adds a missing length check (TLV_GET_DATA_LEN(msg-\u003ereq) \u003c (int)sizeof(__be32)) before dereferencing msg-\u003ereq. Prior to this, an input TLV with fewer than 4 bytes of payload could result in an out-of-bounds read. Out-of-bounds read detection is strictly the purview of KASAN, not KMSAN.\n\n2. In tipc_nl_compat_name_table_dump_header() and tipc_nl_compat_name_table_dump(), it masks out the TIPC_NTQ_ALLTYPES flag from ntq-\u003edepth. This fixes control flow logic so that depths 1 to 4 are honored even if TIPC_NTQ_ALLTYPES is specified in the request. The dumped headers and publication strings are formatted from static string literals and parsed netlink attributes into the reply buffer.\n\nNeither change introduces, exposes, or accesses uninitialized stack, heap, or page memory, nor do they leak uninitialized padding bytes to userspace. Therefore, standard KASAN testing is sufficient and a dedicated KMSAN fuzzing session is not warranted.",
"NeedsKMSAN": false
} |
| Total Calls | Total Tokens | Avg Tokens | Total Duration (Seconds) | Avg Duration (Seconds) |
|---|
| Total Calls | Total Duration (Seconds) | Avg Duration (Seconds) |
|---|