Commit 6d5a12eb authored by Eric Dumazet's avatar Eric Dumazet Committed by Paolo Abeni

udp: add missing WRITE_ONCE() around up->encap_rcv

UDP_ENCAP_ESPINUDP_NON_IKE setsockopt() writes over up->encap_rcv
while other cpus read it.

Fixes: 067b207b ("[UDP]: Cleanup UDP encapsulation code")
Signed-off-by: default avatarEric Dumazet <edumazet@google.com>
Reviewed-by: default avatarWillem de Bruijn <willemb@google.com>
Signed-off-by: default avatarPaolo Abeni <pabeni@redhat.com>
parent e1dc0615
......@@ -2675,10 +2675,12 @@ int udp_lib_setsockopt(struct sock *sk, int level, int optname,
case UDP_ENCAP_ESPINUDP_NON_IKE:
#if IS_ENABLED(CONFIG_IPV6)
if (sk->sk_family == AF_INET6)
up->encap_rcv = ipv6_stub->xfrm6_udp_encap_rcv;
WRITE_ONCE(up->encap_rcv,
ipv6_stub->xfrm6_udp_encap_rcv);
else
#endif
up->encap_rcv = xfrm4_udp_encap_rcv;
WRITE_ONCE(up->encap_rcv,
xfrm4_udp_encap_rcv);
#endif
fallthrough;
case UDP_ENCAP_L2TPINUDP:
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment