Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 22291
b: refs/heads/master
c: be33690
h: refs/heads/master
i:
  22289: 6986b7c
  22287: 5ebd1d9
v: v3
  • Loading branch information
Patrick McHardy authored and David S. Miller committed Mar 21, 2006
1 parent 8623855 commit 09b1b60
Show file tree
Hide file tree
Showing 3 changed files with 21 additions and 6 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 15d99e02babae8bc20b836917ace07d93e318149
refs/heads/master: be33690d8fcf40377f16193c463681170eb6b295
10 changes: 9 additions & 1 deletion trunk/include/net/xfrm.h
Original file line number Diff line number Diff line change
Expand Up @@ -1001,7 +1001,15 @@ static inline int xfrm_policy_id2dir(u32 index)

static inline int xfrm_aevent_is_on(void)
{
return netlink_has_listeners(xfrm_nl,XFRMNLGRP_AEVENTS);
struct sock *nlsk;
int ret = 0;

rcu_read_lock();
nlsk = rcu_dereference(xfrm_nl);
if (nlsk)
ret = netlink_has_listeners(nlsk, XFRMNLGRP_AEVENTS);
rcu_read_unlock();
return ret;
}

static inline void xfrm_aevent_doreplay(struct xfrm_state *x)
Expand Down
15 changes: 11 additions & 4 deletions trunk/net/xfrm/xfrm_user.c
Original file line number Diff line number Diff line change
Expand Up @@ -1947,12 +1947,15 @@ static struct xfrm_mgr netlink_mgr = {

static int __init xfrm_user_init(void)
{
struct sock *nlsk;

printk(KERN_INFO "Initializing IPsec netlink socket\n");

xfrm_nl = netlink_kernel_create(NETLINK_XFRM, XFRMNLGRP_MAX,
xfrm_netlink_rcv, THIS_MODULE);
if (xfrm_nl == NULL)
nlsk = netlink_kernel_create(NETLINK_XFRM, XFRMNLGRP_MAX,
xfrm_netlink_rcv, THIS_MODULE);
if (nlsk == NULL)
return -ENOMEM;
rcu_assign_pointer(xfrm_nl, nlsk);

xfrm_register_km(&netlink_mgr);

Expand All @@ -1961,8 +1964,12 @@ static int __init xfrm_user_init(void)

static void __exit xfrm_user_exit(void)
{
struct sock *nlsk = xfrm_nl;

xfrm_unregister_km(&netlink_mgr);
sock_release(xfrm_nl->sk_socket);
rcu_assign_pointer(xfrm_nl, NULL);
synchronize_rcu();
sock_release(nlsk->sk_socket);
}

module_init(xfrm_user_init);
Expand Down

0 comments on commit 09b1b60

Please sign in to comment.