Skip to contentSkip to conversation

gre/sit: Don't generate link-local addr if addr_gen_mode is IN6_ADDR_GEN_MODE_NONE

PATCH Applied Stephen Suryaputra 3 participants 5 messages Oct 20, 2021 – Oct 22, 2021

Subsystems (3)
lore
Share & tools
lore
#0 lore raw

PATCH 1/1 gre/sit: Don't generate link-local addr if addr_gen_mode is IN6_ADDR_GEN_MODE_NONE

When addr_gen_mode is set to IN6_ADDR_GEN_MODE_NONE, the link-local addr should not be generated. But it isn't the case for GRE (as well as GRE6) and SIT tunnels. Make it so that tunnels consider the addr_gen_mode, especially for IN6_ADDR_GEN_MODE_NONE.

Do this in add_v4_addrs() to cover both GRE and SIT only if the addr scope is link.

---
 net/ipv6/addrconf.c | 3 +++
 1 file changed, 3 insertions(+)
net/ipv6/addrconf.c +3 -0
index d4fae16deec4..9e1463a2acae 100644
@@ -3110,6 +3110,9 @@ static void add_v4_addrs(struct inet6_dev *idev)
 	memcpy(&addr.s6_addr32[3], idev->dev->dev_addr + offset, 4);
 
 	if (idev->dev->flags&IFF_POINTOPOINT) {
+		if (idev->cnf.addr_gen_mode == IN6_ADDR_GEN_MODE_NONE)
+			return;
+
 		addr.s6_addr32[0] = htonl(0xfe800000);
 		scope = IFA_LINK;
 		plen = 64;
Signature · 1 line
2.25.1
#1 lore raw

Hi,

Quoted 18 lines · Stephen Suryaputra

When addr_gen_mode is set to IN6_ADDR_GEN_MODE_NONE, the link-local addr should not be generated. But it isn't the case for GRE (as well as GRE6) and SIT tunnels. Make it so that tunnels consider the addr_gen_mode, especially for IN6_ADDR_GEN_MODE_NONE.

Do this in add_v4_addrs() to cover both GRE and SIT only if the addr scope is link.

---
 net/ipv6/addrconf.c | 3 +++
 1 file changed, 3 insertions(+)
net/ipv6/addrconf.c +0 -0
index d4fae16deec4..9e1463a2acae 100644

net/ipv6/addrconf.c static void add_v4_addrs(struct inet6_dev *idev) · line 3115

Quoted 6 lines
net/ipv6/addrconf.c +3 -0
@@ -3110,6 +3110,9 @@ static void add_v4_addrs(struct inet6_dev *idev)
 	memcpy(&addr.s6_addr32[3], idev->dev->dev_addr + offset, 4);
 
 	if (idev->dev->flags&IFF_POINTOPOINT) {
+		if (idev->cnf.addr_gen_mode == IN6_ADDR_GEN_MODE_NONE)
+			return;
+

Maybe I am missing something, but why checking the mode only for pointtopoint? If mode is NONE shouldn't this routine just abort regardless of the interface setup?

Cheers,

Quoted 4 lines
net/ipv6/addrconf.c +0 -0
 		addr.s6_addr32[0] = htonl(0xfe800000);
 		scope = IFA_LINK;
 		plen = 64;
Signature · 1 line
Antonio Quartulli
#2 lore raw
Quoted 5 lines · Antonio Quartulli

Maybe I am missing something, but why checking the mode only for pointtopoint? If mode is NONE shouldn't this routine just abort regardless of the interface setup?

If it isn't pointtopoint, the function sets up IPv4-compatible IPv6 address, i.e. non link-local (FE80::). addr_gen_mode NONE (1) is only controlling the generation of link-local address. Quoting from the sysctl doc:

addr_gen_mode - INTEGER
Defines how link-local and autoconf addresses are generated.

0: generate address based on EUI64 (default)
1: do no generate a link-local address, use EUI64 for addresses generated
from autoconf
2: generate stable privacy addresses, using the secret from
stable_secret (RFC7217)
3: generate stable privacy addresses, using a random secret if unset

So, I thought the checking should be strictly when the link-local address is about to be generated.

#3 lore raw

Hi,

Quoted 21 lines · Stephen Suryaputra
Quoted 5 lines · Antonio Quartulli

Maybe I am missing something, but why checking the mode only for pointtopoint? If mode is NONE shouldn't this routine just abort regardless of the interface setup?

If it isn't pointtopoint, the function sets up IPv4-compatible IPv6 address, i.e. non link-local (FE80::). addr_gen_mode NONE (1) is only controlling the generation of link-local address. Quoting from the sysctl doc:

addr_gen_mode - INTEGER
Defines how link-local and autoconf addresses are generated.

0: generate address based on EUI64 (default)
1: do no generate a link-local address, use EUI64 for addresses generated
from autoconf
2: generate stable privacy addresses, using the secret from
stable_secret (RFC7217)
3: generate stable privacy addresses, using a random secret if unset

Quoted 2 lines

So, I thought the checking should be strictly when the link-local address is about to be generated.

Right.

IMHO it makes sense.

Signature · 1 line
Antonio Quartulli
#4 lore raw
In reply to Stephen Suryaputra
This patch was applied to netdev/net-next.git (master) by Jakub Kicinski <[email protected]>:

Hello:

This patch was applied to netdev/net-next.git (master) by Jakub Kicinski <[email protected]>:

Quoted 9 lines · On Wed, 20 Oct 2021 16:06:18 -0400 you wrote:

When addr_gen_mode is set to IN6_ADDR_GEN_MODE_NONE, the link-local addr should not be generated. But it isn't the case for GRE (as well as GRE6) and SIT tunnels. Make it so that tunnels consider the addr_gen_mode, especially for IN6_ADDR_GEN_MODE_NONE.

Do this in add_v4_addrs() to cover both GRE and SIT only if the addr scope is link.

[...]

Here is the summary with links:
- [net-next] gre/sit: Don't generate link-local addr if addr_gen_mode is IN6_ADDR_GEN_MODE_NONE

    https://git.kernel.org/netdev/net-next/c/61e18ce7348b

You are awesome, thank you!

Signature · 2 lines
Deet-doot-dot, I am a bot.
https://korg.docs.kernel.org/patchwork/pwbot.html