sk_for_each_bound(sk, &l2tp_ip_bind_table) {
                const struct l2tp_ip_sock *l2tp = l2tp_ip_sk(sk);
                const struct inet_sock *inet = inet_sk(sk);
+               int bound_dev_if;
 
                if (!net_eq(sock_net(sk), net))
                        continue;
 
-               if (sk->sk_bound_dev_if && dif && sk->sk_bound_dev_if != dif)
+               bound_dev_if = READ_ONCE(sk->sk_bound_dev_if);
+               if (bound_dev_if && dif && bound_dev_if != dif)
                        continue;
 
                if (inet->inet_rcv_saddr && laddr &&
 
                const struct in6_addr *sk_laddr = inet6_rcv_saddr(sk);
                const struct in6_addr *sk_raddr = &sk->sk_v6_daddr;
                const struct l2tp_ip6_sock *l2tp = l2tp_ip6_sk(sk);
+               int bound_dev_if;
 
                if (!net_eq(sock_net(sk), net))
                        continue;
 
-               if (sk->sk_bound_dev_if && dif && sk->sk_bound_dev_if != dif)
+               bound_dev_if = READ_ONCE(sk->sk_bound_dev_if);
+               if (bound_dev_if && dif && bound_dev_if != dif)
                        continue;
 
                if (sk_laddr && !ipv6_addr_any(sk_laddr) &&
                lsa->l2tp_conn_id = lsk->conn_id;
        }
        if (ipv6_addr_type(&lsa->l2tp_addr) & IPV6_ADDR_LINKLOCAL)
-               lsa->l2tp_scope_id = sk->sk_bound_dev_if;
+               lsa->l2tp_scope_id = READ_ONCE(sk->sk_bound_dev_if);
        return sizeof(*lsa);
 }
 
        }
 
        if (fl6.flowi6_oif == 0)
-               fl6.flowi6_oif = sk->sk_bound_dev_if;
+               fl6.flowi6_oif = READ_ONCE(sk->sk_bound_dev_if);
 
        if (msg->msg_controllen) {
                opt = &opt_space;