]> git.proxmox.com Git - mirror_ubuntu-focal-kernel.git/commit
net-ipv6: add support for sockopt(SOL_IPV6, IPV6_FREEBIND)
authorMaciej Żenczykowski <maze@google.com>
Wed, 27 Sep 2017 04:32:42 +0000 (21:32 -0700)
committerDavid S. Miller <davem@davemloft.net>
Sat, 30 Sep 2017 04:30:52 +0000 (05:30 +0100)
commit84e14fe353de7624872e582887712079ba0b2d56
tree8e417422256f2b25f0a593874b6d8b3b384ff399
parent1f372c7bfb23286d2bf4ce0423ab488e86b74bb2
net-ipv6: add support for sockopt(SOL_IPV6, IPV6_FREEBIND)

So far we've been relying on sockopt(SOL_IP, IP_FREEBIND) being usable
even on IPv6 sockets.

However, it turns out it is perfectly reasonable to want to set freebind
on an AF_INET6 SOCK_RAW socket - but there is no way to set any SOL_IP
socket option on such a socket (they're all blindly errored out).

One use case for this is to allow spoofing src ip on a raw socket
via sendmsg cmsg.

Tested:
  built, and booted
  # python
  >>> import socket
  >>> SOL_IP = socket.SOL_IP
  >>> SOL_IPV6 = socket.IPPROTO_IPV6
  >>> IP_FREEBIND = 15
  >>> IPV6_FREEBIND = 78
  >>> s = socket.socket(socket.AF_INET6, socket.SOCK_DGRAM, 0)
  >>> s.getsockopt(SOL_IP, IP_FREEBIND)
  0
  >>> s.getsockopt(SOL_IPV6, IPV6_FREEBIND)
  0
  >>> s.setsockopt(SOL_IPV6, IPV6_FREEBIND, 1)
  >>> s.getsockopt(SOL_IP, IP_FREEBIND)
  1
  >>> s.getsockopt(SOL_IPV6, IPV6_FREEBIND)
  1

Signed-off-by: Maciej Żenczykowski <maze@google.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
include/uapi/linux/in6.h
net/ipv6/ipv6_sockglue.c