From: Emanuele Santini <emanuele.santini.88@gmail.com>
To: Guillaume Nault <gnault@redhat.com>
Cc: netdev@vger.kernel.org, yoshfuji@linux-ipv6.org,
friedrich@oslage.de, kuba@kernel.org, davem@davemloft.net,
pabeni@redhat.com, dsahern@kernel.org
Subject: Re: [PATCH] net: ipv6: fix the address length for net_device on a GRE tunnel
Date: Wed, 18 Dec 2024 11:52:53 +0100 [thread overview]
Message-ID: <Z2KphccLReKzJxwZ@emanuele-archlinux> (raw)
In-Reply-To: <Zy45iLv7cL8OcYze@debian>
On Fri, Nov 08, 2024 at 05:17:12PM +0100, Guillaume Nault wrote:
> On Fri, Nov 08, 2024 at 03:24:03PM +0100, Emanuele Santini wrote:
> > I'm talking about the ip6gre. I agree that setting the hardware address to 0 is appropriate.
> > However, in the ip6gre_tunnel_setup function, the perm_addr field of net_device is
> > currently assigned a random Ethernet address:
> >
> > dev->flags |= IFF_NOARP;
> > - dev->addr_len = sizeof(struct in6_addr);
> > + dev->addr_len = ETH_ALEN;
> > netif_keep_dst(dev);
> > /* This perm addr will be used as interface identifier by IPv6 */
> > dev->addr_assign_type = NET_ADDR_RANDOM;
> > eth_random_addr(dev->perm_addr);
> >
> > maybe this is not a valid justification to set addr_len to ETH_ALEN.
>
> I think that having a fake permanent address for the purpose of IPv6
> interface Id. generation isn't a correct justification for setting
> dev->addr_len.
>
> If setting ->perm_addr and ->addr_assign_type have side effects on the
> acceptable values of ->addr_len, then the commit description should
> explain that in more details.
>
> > I will make a review setting addr_len to 0, and will resubmit the patch after successful testing.
>
> Thanks.
>
The addr_len field in the net_device structure of the IP6GRE tunnel is set to the IPv6 address length
because the 'ip6gre_tunnel_init' function in 'net/ip6_gre.c' initializes the hardware address using the
tunnel’s local and remote network addresses:
> __dev_addr_set(dev, &tunnel->parms.laddr, sizeof(struct in6_addr));
> memcpy(dev->broadcast, &tunnel->parms.raddr, sizeof(struct in6_addr));
Additionally, I found the following comment in the 'add_v4_addrs' function in 'net/addrconf.c':
> /* in case of IP6GRE the dev_addr is an IPv6 and therefore we use only the last 4 bytes */
> if (idev->dev->addr_len == sizeof(struct in6_addr))
This indicates that the 'addr_len' field in 'net_device' is intentionally set to an IPv6 length, even
though it may not be appropriate.
However, this behavior triggers an unusual bug with packet sockets: when attempting to use sendto on an
IPv6 GRE tunnel, the call fails with an "Invalid Argument" error.
However, modifying the addr_len field might not be the best approach to resolve this bug. So, consider
this patch closed.
Thanks.
prev parent reply other threads:[~2024-12-18 10:52 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-11-08 9:25 [PATCH] net: ipv6: fix the address length for net_device on a GRE tunnel Emanuele Santini
2024-11-08 12:08 ` Guillaume Nault
2024-11-08 14:24 ` Emanuele Santini
2024-11-08 16:17 ` Guillaume Nault
2024-12-18 10:52 ` Emanuele Santini [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=Z2KphccLReKzJxwZ@emanuele-archlinux \
--to=emanuele.santini.88@gmail.com \
--cc=davem@davemloft.net \
--cc=dsahern@kernel.org \
--cc=friedrich@oslage.de \
--cc=gnault@redhat.com \
--cc=kuba@kernel.org \
--cc=netdev@vger.kernel.org \
--cc=pabeni@redhat.com \
--cc=yoshfuji@linux-ipv6.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.