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

Hangbin Liu <[email protected]>
Newsgroups org.kernel.vger.netdev,dev.linux.lists.sashiko-reviews
Message-ID <aqzwEXWYBQqSfNUu@fedora>
On Fri, Sep 18, 2026 at 06:36:58AM +0000, [email protected] 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 <[email protected]>
> 
> 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.
> 
> > 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
> [ ... ]
> > @@ -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.
> 
> > +  -
> > +    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.
> 
> > +      -
> > +        name: dir
> > +        type: u8
> > +      -
> > +        name: hwid
> > +        type: u8
> 
> -- 
> Sashiko AI review · https://sashiko.dev/#/patchset/[email protected]?part=4
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.