Thread (1 message) 1 message, 1 author, 19h ago

Re: [PATCH net-next 4/6] netlink: specs: rt-route: describe lwtunnel IP options

From: Hangbin Liu <hidden>
Date: 2026-09-18 08:02:41
Also in: sashiko-reviews

On Fri, Sep 18, 2026 at 06:36:58AM +0000, sashiko-bot@kernel.org wrote:
Thank you for your contribution! Sashiko AI review found 2 potential issue(s) to consider:
- [Medium] netlink: specs: missing byte-order property for lwtunnel-ip-opt-erspan index
- [Low] netlink: specs: missing max-len validation for lwtunnel-ip-opt-geneve data
Thanks, I will fix these.
--

commit 15d568f88486d1cb50af0dbb912eabab2c37d852
Author: Hangbin Liu [off-list ref]

netlink: specs: rt-route: describe lwtunnel IP options

This commit replaces binary options in lwtunnel-ip and lwtunnel-ip6 with
a nested lwtunnel-ip-opts set. It also adds attribute sets for geneve, vxlan,
and erspan IP options to align with the kernel's definitions in lwtunnel.h.
quoted
diff --git a/Documentation/netlink/specs/rt-route.yaml b/Documentation/netlink/specs/rt-route.yaml
index 0e236da140dc5..6030d7cb8d0d1 100644
--- a/Documentation/netlink/specs/rt-route.yaml
+++ b/Documentation/netlink/specs/rt-route.yaml
[ ... ]
quoted
@@ -555,6 +557,59 @@ attribute-sets:
       -
         name: link
         type: u32
+  -
+    name: lwtunnel-ip-opts
+    name-prefix: lwtunnel-ip-opts-
+    attributes:
+      -
+        name: geneve
+        type: nest
+        nested-attributes: lwtunnel-ip-opt-geneve
+      -
+        name: vxlan
+        type: nest
+        nested-attributes: lwtunnel-ip-opt-vxlan
+      -
+        name: erspan
+        type: nest
+        nested-attributes: lwtunnel-ip-opt-erspan
+  -
+    name: lwtunnel-ip-opt-geneve
+    name-prefix: lwtunnel-ip-opt-geneve-
+    attributes:
+      -
+        name: class
+        type: u16
+        byte-order: big-endian
+      -
+        name: type
+        type: u8
+      -
+        name: data
+        type: binary
[Severity: Low]
Does this binary attribute need a max-len validation check?

The kernel explicitly enforces a maximum length of 127 bytes for this
attribute in its Netlink policy:

net/ipv4/ip_tunnel_core.c:geneve_opt_policy[] {
    [LWTUNNEL_IP_OPT_GENEVE_DATA] = { .type = NLA_BINARY, .len = 127 },
}

Without a corresponding max-len constraint in the spec, auto-generated
tools will not catch oversized attributes locally before transmitting
them to the kernel.
quoted
+  -
+    name: lwtunnel-ip-opt-vxlan
+    name-prefix: lwtunnel-ip-opt-vxlan-
+    attributes:
+      -
+        name: gbp
+        type: u32
+  -
+    name: lwtunnel-ip-opt-erspan
+    name-prefix: lwtunnel-ip-opt-erspan-
+    attributes:
+      -
+        name: ver
+        type: u8
+      -
+        name: index
+        type: u32
[Severity: Medium]
Will this result in an incorrect ERSPAN index on little-endian architectures?

The kernel parses this attribute using nla_get_be32():

net/ipv4/ip_tunnel_core.c:ip_tun_parse_opts_erspan() {
    ...
    attr = tb[LWTUNNEL_IP_OPT_ERSPAN_INDEX];
    md->u.index = nla_get_be32(attr);
    ...
}

Since the spec defines index as a u32 without the byte-order: big-endian
property, auto-generated tools will send the value in host byte order.
When run on a little-endian system, the kernel would then read a
byte-swapped, incorrect value, which would break the tunnel configuration.
quoted
+      -
+        name: dir
+        type: u8
+      -
+        name: hwid
+        type: u8
-- 
Sashiko AI review · https://sashiko.dev/#/patchset/20260917-ynl_rt_encap-v1-0-fbbe6e680571@kylinos.cn?part=4
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help