Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

[NETNS]: Consolidate kernel netlink socket destruction.

Create a specific helper for netlink kernel socket disposal. This just
let the code look better and provides a ground for proper disposal
inside a namespace.

Signed-off-by: Denis V. Lunev <den@openvz.org>
Tested-by: Alexey Dobriyan <adobriyan@openvz.org>
Signed-off-by: David S. Miller <davem@davemloft.net>

authored by

Denis V. Lunev and committed by
David S. Miller
b7c6ba6e 4f84d82f

+34 -26
+3 -6
drivers/connector/connector.c
··· 420 420 421 421 dev->cbdev = cn_queue_alloc_dev("cqueue", dev->nls); 422 422 if (!dev->cbdev) { 423 - if (dev->nls->sk_socket) 424 - sock_release(dev->nls->sk_socket); 423 + netlink_kernel_release(dev->nls); 425 424 return -EINVAL; 426 425 } 427 426 ··· 430 431 if (err) { 431 432 cn_already_initialized = 0; 432 433 cn_queue_free_dev(dev->cbdev); 433 - if (dev->nls->sk_socket) 434 - sock_release(dev->nls->sk_socket); 434 + netlink_kernel_release(dev->nls); 435 435 return -EINVAL; 436 436 } 437 437 ··· 445 447 446 448 cn_del_callback(&dev->id); 447 449 cn_queue_free_dev(dev->cbdev); 448 - if (dev->nls->sk_socket) 449 - sock_release(dev->nls->sk_socket); 450 + netlink_kernel_release(dev->nls); 450 451 } 451 452 452 453 subsys_initcall(cn_init);
+1 -1
drivers/scsi/scsi_netlink.c
··· 164 164 scsi_netlink_exit(void) 165 165 { 166 166 if (scsi_nl_sock) { 167 - sock_release(scsi_nl_sock->sk_socket); 167 + netlink_kernel_release(scsi_nl_sock); 168 168 netlink_unregister_notifier(&scsi_netlink_notifier); 169 169 } 170 170
+2 -2
drivers/scsi/scsi_transport_iscsi.c
··· 1558 1558 return 0; 1559 1559 1560 1560 release_nls: 1561 - sock_release(nls->sk_socket); 1561 + netlink_kernel_release(nls); 1562 1562 unregister_session_class: 1563 1563 transport_class_unregister(&iscsi_session_class); 1564 1564 unregister_conn_class: ··· 1573 1573 static void __exit iscsi_transport_exit(void) 1574 1574 { 1575 1575 destroy_workqueue(iscsi_eh_timer_workq); 1576 - sock_release(nls->sk_socket); 1576 + netlink_kernel_release(nls); 1577 1577 transport_class_unregister(&iscsi_connection_class); 1578 1578 transport_class_unregister(&iscsi_session_class); 1579 1579 transport_class_unregister(&iscsi_host_class);
+1 -2
fs/ecryptfs/netlink.c
··· 237 237 */ 238 238 void ecryptfs_release_netlink(void) 239 239 { 240 - if (ecryptfs_nl_sock && ecryptfs_nl_sock->sk_socket) 241 - sock_release(ecryptfs_nl_sock->sk_socket); 240 + netlink_kernel_release(ecryptfs_nl_sock); 242 241 ecryptfs_nl_sock = NULL; 243 242 }
+1
include/linux/netlink.h
··· 178 178 void (*input)(struct sk_buff *skb), 179 179 struct mutex *cb_mutex, 180 180 struct module *module); 181 + extern void netlink_kernel_release(struct sock *sk); 181 182 extern int netlink_change_ngroups(struct sock *sk, unsigned int groups); 182 183 extern void netlink_clear_multicast_users(struct sock *sk, unsigned int group); 183 184 extern void netlink_ack(struct sk_buff *in_skb, struct nlmsghdr *nlh, int err);
+2 -2
net/bridge/netfilter/ebt_ulog.c
··· 307 307 if (!ebtulognl) 308 308 ret = -ENOMEM; 309 309 else if ((ret = ebt_register_watcher(&ulog))) 310 - sock_release(ebtulognl->sk_socket); 310 + netlink_kernel_release(ebtulognl); 311 311 312 312 if (ret == 0) 313 313 nf_log_register(PF_BRIDGE, &ebt_ulog_logger); ··· 333 333 } 334 334 spin_unlock_bh(&ub->lock); 335 335 } 336 - sock_release(ebtulognl->sk_socket); 336 + netlink_kernel_release(ebtulognl); 337 337 } 338 338 339 339 module_init(ebt_ulog_init);
+1 -1
net/core/rtnetlink.c
··· 1384 1384 * free. 1385 1385 */ 1386 1386 sk->sk_net = get_net(&init_net); 1387 - sock_release(net->rtnl->sk_socket); 1387 + netlink_kernel_release(net->rtnl); 1388 1388 net->rtnl = NULL; 1389 1389 } 1390 1390 }
+2 -2
net/decnet/netfilter/dn_rtmsg.c
··· 137 137 138 138 rv = nf_register_hook(&dnrmg_ops); 139 139 if (rv) { 140 - sock_release(dnrmg->sk_socket); 140 + netlink_kernel_release(dnrmg); 141 141 } 142 142 143 143 return rv; ··· 146 146 static void __exit dn_rtmsg_fini(void) 147 147 { 148 148 nf_unregister_hook(&dnrmg_ops); 149 - sock_release(dnrmg->sk_socket); 149 + netlink_kernel_release(dnrmg); 150 150 } 151 151 152 152
+1 -1
net/ipv4/fib_frontend.c
··· 881 881 * initial network namespace. So the socket will be safe to free. 882 882 */ 883 883 net->ipv4.fibnl->sk_net = get_net(&init_net); 884 - sock_release(net->ipv4.fibnl->sk_socket); 884 + netlink_kernel_release(net->ipv4.fibnl); 885 885 } 886 886 887 887 static void fib_disable_ip(struct net_device *dev, int force)
+1 -1
net/ipv4/inet_diag.c
··· 935 935 936 936 static void __exit inet_diag_exit(void) 937 937 { 938 - sock_release(idiagnl->sk_socket); 938 + netlink_kernel_release(idiagnl); 939 939 kfree(inet_diag_table); 940 940 } 941 941
+2 -2
net/ipv4/netfilter/ip_queue.c
··· 605 605 unregister_netdevice_notifier(&ipq_dev_notifier); 606 606 proc_net_remove(&init_net, IPQ_PROC_FS_NAME); 607 607 cleanup_ipqnl: 608 - sock_release(ipqnl->sk_socket); 608 + netlink_kernel_release(ipqnl); 609 609 mutex_lock(&ipqnl_mutex); 610 610 mutex_unlock(&ipqnl_mutex); 611 611 ··· 624 624 unregister_netdevice_notifier(&ipq_dev_notifier); 625 625 proc_net_remove(&init_net, IPQ_PROC_FS_NAME); 626 626 627 - sock_release(ipqnl->sk_socket); 627 + netlink_kernel_release(ipqnl); 628 628 mutex_lock(&ipqnl_mutex); 629 629 mutex_unlock(&ipqnl_mutex); 630 630
+2 -2
net/ipv4/netfilter/ipt_ULOG.c
··· 415 415 416 416 ret = xt_register_target(&ulog_tg_reg); 417 417 if (ret < 0) { 418 - sock_release(nflognl->sk_socket); 418 + netlink_kernel_release(nflognl); 419 419 return ret; 420 420 } 421 421 if (nflog) ··· 434 434 if (nflog) 435 435 nf_log_unregister(&ipt_ulog_logger); 436 436 xt_unregister_target(&ulog_tg_reg); 437 - sock_release(nflognl->sk_socket); 437 + netlink_kernel_release(nflognl); 438 438 439 439 /* remove pending timers and free allocated skb's */ 440 440 for (i = 0; i < ULOG_MAXNLGROUPS; i++) {
+2 -2
net/ipv6/netfilter/ip6_queue.c
··· 609 609 proc_net_remove(&init_net, IPQ_PROC_FS_NAME); 610 610 611 611 cleanup_ipqnl: 612 - sock_release(ipqnl->sk_socket); 612 + netlink_kernel_release(ipqnl); 613 613 mutex_lock(&ipqnl_mutex); 614 614 mutex_unlock(&ipqnl_mutex); 615 615 ··· 628 628 unregister_netdevice_notifier(&ipq_dev_notifier); 629 629 proc_net_remove(&init_net, IPQ_PROC_FS_NAME); 630 630 631 - sock_release(ipqnl->sk_socket); 631 + netlink_kernel_release(ipqnl); 632 632 mutex_lock(&ipqnl_mutex); 633 633 mutex_unlock(&ipqnl_mutex); 634 634
+1 -1
net/netfilter/nfnetlink.c
··· 179 179 static void __exit nfnetlink_exit(void) 180 180 { 181 181 printk("Removing netfilter NETLINK layer.\n"); 182 - sock_release(nfnl->sk_socket); 182 + netlink_kernel_release(nfnl); 183 183 return; 184 184 } 185 185
+11
net/netlink/af_netlink.c
··· 1405 1405 } 1406 1406 EXPORT_SYMBOL(netlink_kernel_create); 1407 1407 1408 + 1409 + void 1410 + netlink_kernel_release(struct sock *sk) 1411 + { 1412 + if (sk == NULL || sk->sk_socket == NULL) 1413 + return; 1414 + sock_release(sk->sk_socket); 1415 + } 1416 + EXPORT_SYMBOL(netlink_kernel_release); 1417 + 1418 + 1408 1419 /** 1409 1420 * netlink_change_ngroups - change number of multicast groups 1410 1421 *
+1 -1
net/xfrm/xfrm_user.c
··· 2420 2420 xfrm_unregister_km(&netlink_mgr); 2421 2421 rcu_assign_pointer(xfrm_nl, NULL); 2422 2422 synchronize_rcu(); 2423 - sock_release(nlsk->sk_socket); 2423 + netlink_kernel_release(nlsk); 2424 2424 } 2425 2425 2426 2426 module_init(xfrm_user_init);