Skip to contentSkip to conversation

net: error on unsupported IP setsockopts in IPv6

PATCH In review Richard Gobert 3 participants 3 messages Jun 9, 2022 – Jun 11, 2022

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

PATCH 1/1 net: error on unsupported IP setsockopts in IPv6

The IP_TTL and IP_TOS sockopts are unsupported for IPv6 sockets, this bug was reported previously to the kernel bugzilla [1]. Make the IP_TTL and IP_TOS sockopts return an error for AF_INET6 sockets.

[1] https://bugzilla.kernel.org/show_bug.cgi?id=212585

---
 net/ipv6/ipv6_sockglue.c | 12 ++++++++++--
 1 file changed, 10 insertions(+), 2 deletions(-)
net/ipv6/ipv6_sockglue.c +10 -2
index 222f6bf220ba..2cdaa8f3a8f2 100644
@@ -1012,8 +1012,16 @@ int ipv6_setsockopt(struct sock *sk, int level, int optname, sockptr_t optval,
 {
 	int err;
 
-	if (level == SOL_IP && sk->sk_type != SOCK_RAW)
-		return udp_prot.setsockopt(sk, level, optname, optval, optlen);
+	if (level == SOL_IP && sk->sk_type != SOCK_RAW) {
+		switch (optname) {
+		/* Some IP opts are not supported for IPv6 sockets */
+		case IP_TTL:
+		case IP_TOS:
+			return -ENOPROTOOPT;
+		default:
+			return udp_prot.setsockopt(sk, level, optname, optval, optlen);
+		}
+	}
 
 	if (level != SOL_IPV6)
 		return -ENOPROTOOPT;
Signature · 1 line
2.36.1
maintainer
#1 lore raw
Quoted 5 lines · On Thu, 9 Jun 2022 17:26:10 +0200 Richard Gobert wrote:

The IP_TTL and IP_TOS sockopts are unsupported for IPv6 sockets, this bug was reported previously to the kernel bugzilla [1]. Make the IP_TTL and IP_TOS sockopts return an error for AF_INET6 sockets.

[1] https://bugzilla.kernel.org/show_bug.cgi?id=212585

This is a little risky because applications may set both v4 and v6 options and expect the correct one to "stick". Obviously it's not the way we would have written this code today, but is there any harm? Also why just those two options?

maintainer
#2 lore raw
Quoted 11 lines · Jakub Kicinski
Quoted 5 lines · On Thu, 9 Jun 2022 17:26:10 +0200 Richard Gobert wrote:

The IP_TTL and IP_TOS sockopts are unsupported for IPv6 sockets, this bug was reported previously to the kernel bugzilla [1]. Make the IP_TTL and IP_TOS sockopts return an error for AF_INET6 sockets.

[1] https://bugzilla.kernel.org/show_bug.cgi?id=212585

This is a little risky because applications may set both v4 and v6 options and expect the correct one to "stick". Obviously it's not the way we would have written this code today, but is there any harm? Also why just those two options?

agreed, I do not believe this can be changed. The values will not be used for ipv6 packets, so the exposure should just be a matter of allowing the setting on a socket.