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
