Message ID | 20220609152525.GA6504@debian (mailing list archive) |
---|---|
State | Changes Requested |
Delegated to: | Netdev Maintainers |
Headers | show |
Series | net: error on unsupported IP setsockopts in IPv6 | expand |
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?
On 6/10/22 11:16 PM, Jakub Kicinski wrote: > 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.
diff --git a/net/ipv6/ipv6_sockglue.c b/net/ipv6/ipv6_sockglue.c index 222f6bf220ba..2cdaa8f3a8f2 100644 --- a/net/ipv6/ipv6_sockglue.c +++ b/net/ipv6/ipv6_sockglue.c @@ -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;
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 Signed-off-by: Richard Gobert <richardbgobert@gmail.com> --- net/ipv6/ipv6_sockglue.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-)