A socket that is created using sock_create_kern() and then switched
to a namespace using sk_change_net() should be released using
sk_release_kernel() instead of sock_release().  This is because
sk_change_net() has already released a reference to the namespace
and we shouldn't try to release it again later.

Cc: Kyle Mestery <[email protected]>
Signed-off-by: Jesse Gross <[email protected]>
---
 datapath/vport-vxlan.c |    4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/datapath/vport-vxlan.c b/datapath/vport-vxlan.c
index 137e5d8..3d7260f 100644
--- a/datapath/vport-vxlan.c
+++ b/datapath/vport-vxlan.c
@@ -222,7 +222,7 @@ static int vxlan_socket_init(struct vxlan_port *vxlan_port, 
struct net *net)
        return 0;
 
 error_sock:
-       sock_release(vxlan_port->vxlan_rcv_socket);
+       sk_release_kernel(vxlan_port->vxlan_rcv_socket->sk);
 error:
        pr_warn("cannot register vxlan protocol handler\n");
        return err;
@@ -234,7 +234,7 @@ static void vxlan_tunnel_release(struct vxlan_port 
*vxlan_port)
 
        if (vxlan_port->count == 0) {
                /* Release old socket */
-               sock_release(vxlan_port->vxlan_rcv_socket);
+               sk_release_kernel(vxlan_port->vxlan_rcv_socket->sk);
                list_del(&vxlan_port->list);
                kfree(vxlan_port);
        }
-- 
1.7.9.5

_______________________________________________
dev mailing list
[email protected]
http://openvswitch.org/mailman/listinfo/dev

Reply via email to