mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-29 11:11:45 -04:00
net: Modify sk_alloc to not reference count the netns of kernel sockets.
Now that sk_alloc knows when a kernel socket is being allocated modify it to not reference count the network namespace of kernel sockets. Keep track of if a socket needs reference counting by adding a flag to struct sock called sk_net_refcnt. Update all of the callers of sock_create_kern to stop using sk_change_net and sk_release_kernel as those hacks are no longer needed, to avoid reference counting a kernel socket. Signed-off-by: "Eric W. Biederman" <[email protected]> Signed-off-by: David S. Miller <[email protected]>
This commit is contained in:
parent
11aa9c28b4
commit
26abe14379
8 changed files with 30 additions and 45 deletions
|
|
@ -1334,9 +1334,10 @@ static void l2tp_tunnel_del_work(struct work_struct *work)
|
|||
if (sock)
|
||||
inet_shutdown(sock, 2);
|
||||
} else {
|
||||
if (sock)
|
||||
if (sock) {
|
||||
kernel_sock_shutdown(sock, SHUT_RDWR);
|
||||
sk_release_kernel(sk);
|
||||
sock_release(sock);
|
||||
}
|
||||
}
|
||||
|
||||
l2tp_tunnel_sock_put(sk);
|
||||
|
|
@ -1399,13 +1400,11 @@ static int l2tp_tunnel_sock_create(struct net *net,
|
|||
if (cfg->local_ip6 && cfg->peer_ip6) {
|
||||
struct sockaddr_l2tpip6 ip6_addr = {0};
|
||||
|
||||
err = sock_create_kern(&init_net, AF_INET6, SOCK_DGRAM,
|
||||
err = sock_create_kern(net, AF_INET6, SOCK_DGRAM,
|
||||
IPPROTO_L2TP, &sock);
|
||||
if (err < 0)
|
||||
goto out;
|
||||
|
||||
sk_change_net(sock->sk, net);
|
||||
|
||||
ip6_addr.l2tp_family = AF_INET6;
|
||||
memcpy(&ip6_addr.l2tp_addr, cfg->local_ip6,
|
||||
sizeof(ip6_addr.l2tp_addr));
|
||||
|
|
@ -1429,13 +1428,11 @@ static int l2tp_tunnel_sock_create(struct net *net,
|
|||
{
|
||||
struct sockaddr_l2tpip ip_addr = {0};
|
||||
|
||||
err = sock_create_kern(&init_net, AF_INET, SOCK_DGRAM,
|
||||
err = sock_create_kern(net, AF_INET, SOCK_DGRAM,
|
||||
IPPROTO_L2TP, &sock);
|
||||
if (err < 0)
|
||||
goto out;
|
||||
|
||||
sk_change_net(sock->sk, net);
|
||||
|
||||
ip_addr.l2tp_family = AF_INET;
|
||||
ip_addr.l2tp_addr = cfg->local_ip;
|
||||
ip_addr.l2tp_conn_id = tunnel_id;
|
||||
|
|
@ -1462,7 +1459,7 @@ out:
|
|||
*sockp = sock;
|
||||
if ((err < 0) && sock) {
|
||||
kernel_sock_shutdown(sock, SHUT_RDWR);
|
||||
sk_release_kernel(sock->sk);
|
||||
sock_release(sock);
|
||||
*sockp = NULL;
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue