diff options
Diffstat (limited to 'net/ipv4/udp.c')
| -rw-r--r-- | net/ipv4/udp.c | 10 | 
1 files changed, 9 insertions, 1 deletions
diff --git a/net/ipv4/udp.c b/net/ipv4/udp.c index 32564b350823..1b7ebbcae497 100644 --- a/net/ipv4/udp.c +++ b/net/ipv4/udp.c @@ -112,6 +112,9 @@  #include <net/sock_reuseport.h>  #include <net/addrconf.h>  #include <net/udp_tunnel.h> +#if IS_ENABLED(CONFIG_IPV6) +#include <net/ipv6_stubs.h> +#endif  struct udp_table udp_table __read_mostly;  EXPORT_SYMBOL(udp_table); @@ -2563,7 +2566,12 @@ int udp_lib_setsockopt(struct sock *sk, int level, int optname,  #ifdef CONFIG_XFRM  		case UDP_ENCAP_ESPINUDP:  		case UDP_ENCAP_ESPINUDP_NON_IKE: -			up->encap_rcv = xfrm4_udp_encap_rcv; +#if IS_ENABLED(CONFIG_IPV6) +			if (sk->sk_family == AF_INET6) +				up->encap_rcv = ipv6_stub->xfrm6_udp_encap_rcv; +			else +#endif +				up->encap_rcv = xfrm4_udp_encap_rcv;  #endif  			fallthrough;  		case UDP_ENCAP_L2TPINUDP:  | 
