2
0
mirror of https://github.com/checkpoint-restore/criu synced 2025-08-31 14:25:49 +00:00

inet: raw -- Skip IP_FREEBIND for ipv6 SOCK_RAW sockets

IP_FREEBIND is not supported for SOCK_RAW ipv6 sockets.
See kernel rawv6_setsockopt() for the details.

For the rest of sockets, where they begin to support it:
the actual magic happens in do_ipv6_setsockopt(), and
IPV6_ADDRFORM optname changes sk->sk_prot to refer
to tcp_prot, udp_prot and udplite_prot, which contains
link to ip_setsockopt().

Signed-off-by: Kirill Tkhai <ktkhai@virtuozzo.com>
Signed-off-by: Cyrill Gorcunov <gorcunov@gmail.com>
Signed-off-by: Andrei Vagin <avagin@gmail.com>
This commit is contained in:
Kirill Tkhai
2018-09-13 22:57:50 +03:00
committed by Andrei Vagin
parent 31c1955d13
commit 76b2d8e93b

View File

@@ -840,7 +840,7 @@ int inet_bind(int sk, struct inet_sk_info *ii)
* sockets could not be bound to them in this moment
* without setting IP_FREEBIND.
*/
if (ii->ie->family == AF_INET6) {
if (ii->ie->family == AF_INET6 && ii->ie->type != SOCK_RAW) {
int yes = 1;
if (restore_opt(sk, SOL_IP, IP_FREEBIND, &yes))