diff --git a/net/core/sock.c b/net/core/sock.c index 4e3ed80a68ce..385ce723fc29 100644 --- a/net/core/sock.c +++ b/net/core/sock.c @@ -632,7 +632,8 @@ bool sk_mc_loop(struct sock *sk) return false; if (!sk) return true; - switch (sk->sk_family) { + /* IPV6_ADDRFORM can change sk->sk_family under us. */ + switch (READ_ONCE(sk->sk_family)) { case AF_INET: return inet_sk(sk)->mc_loop; #if IS_ENABLED(CONFIG_IPV6)