bareudp: Fixed bareudp receive handling
authorMartin Varghese <martin.varghese@nokia.com>
Thu, 12 Mar 2020 03:03:51 +0000 (08:33 +0530)
committerDavid S. Miller <davem@davemloft.net>
Thu, 12 Mar 2020 05:54:27 +0000 (22:54 -0700)
Reverted commit "2baecda bareudp: remove unnecessary udp_encap_enable() in
bareudp_socket_create()"

An explicit call to udp_encap_enable is needed as the setup_udp_tunnel_sock
does not call udp_encap_enable if the if the socket is of type v6.

Bareudp device uses v6 socket to receive v4 & v6 traffic

CC: Taehee Yoo <ap420073@gmail.com>
Fixes: 2baecda37f4e ("bareudp: remove unnecessary udp_encap_enable() in bareudp_socket_create()")
Signed-off-by: Martin Varghese <martin.varghese@nokia.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/bareudp.c

index 71a2f480f70e05ed0c9eaf6805717fa3fe5105fe..cc0703c3d57f24f75d372e704ba6f224505a9663 100644 (file)
@@ -250,6 +250,12 @@ static int bareudp_socket_create(struct bareudp_dev *bareudp, __be16 port)
        tunnel_cfg.encap_destroy = NULL;
        setup_udp_tunnel_sock(bareudp->net, sock, &tunnel_cfg);
 
+       /* As the setup_udp_tunnel_sock does not call udp_encap_enable if the
+        * socket type is v6 an explicit call to udp_encap_enable is needed.
+        */
+       if (sock->sk->sk_family == AF_INET6)
+               udp_encap_enable();
+
        rcu_assign_pointer(bareudp->sock, sock);
        return 0;
 }