diff options
Diffstat (limited to 'net/ipv4')
-rw-r--r-- | net/ipv4/ipcomp.c | 17 | ||||
-rw-r--r-- | net/ipv4/netfilter/ip_queue.c | 11 | ||||
-rw-r--r-- | net/ipv4/xfrm4_tunnel.c | 11 |
3 files changed, 21 insertions, 18 deletions
diff --git a/net/ipv4/ipcomp.c b/net/ipv4/ipcomp.c index d64e2ec8da7b..c95020f7c81e 100644 --- a/net/ipv4/ipcomp.c +++ b/net/ipv4/ipcomp.c | |||
@@ -24,6 +24,7 @@ | |||
24 | #include <linux/list.h> | 24 | #include <linux/list.h> |
25 | #include <linux/vmalloc.h> | 25 | #include <linux/vmalloc.h> |
26 | #include <linux/rtnetlink.h> | 26 | #include <linux/rtnetlink.h> |
27 | #include <linux/mutex.h> | ||
27 | #include <net/ip.h> | 28 | #include <net/ip.h> |
28 | #include <net/xfrm.h> | 29 | #include <net/xfrm.h> |
29 | #include <net/icmp.h> | 30 | #include <net/icmp.h> |
@@ -36,7 +37,7 @@ struct ipcomp_tfms { | |||
36 | int users; | 37 | int users; |
37 | }; | 38 | }; |
38 | 39 | ||
39 | static DECLARE_MUTEX(ipcomp_resource_sem); | 40 | static DEFINE_MUTEX(ipcomp_resource_mutex); |
40 | static void **ipcomp_scratches; | 41 | static void **ipcomp_scratches; |
41 | static int ipcomp_scratch_users; | 42 | static int ipcomp_scratch_users; |
42 | static LIST_HEAD(ipcomp_tfms_list); | 43 | static LIST_HEAD(ipcomp_tfms_list); |
@@ -253,7 +254,7 @@ error: | |||
253 | } | 254 | } |
254 | 255 | ||
255 | /* | 256 | /* |
256 | * Must be protected by xfrm_cfg_sem. State and tunnel user references are | 257 | * Must be protected by xfrm_cfg_mutex. State and tunnel user references are |
257 | * always incremented on success. | 258 | * always incremented on success. |
258 | */ | 259 | */ |
259 | static int ipcomp_tunnel_attach(struct xfrm_state *x) | 260 | static int ipcomp_tunnel_attach(struct xfrm_state *x) |
@@ -411,9 +412,9 @@ static void ipcomp_destroy(struct xfrm_state *x) | |||
411 | if (!ipcd) | 412 | if (!ipcd) |
412 | return; | 413 | return; |
413 | xfrm_state_delete_tunnel(x); | 414 | xfrm_state_delete_tunnel(x); |
414 | down(&ipcomp_resource_sem); | 415 | mutex_lock(&ipcomp_resource_mutex); |
415 | ipcomp_free_data(ipcd); | 416 | ipcomp_free_data(ipcd); |
416 | up(&ipcomp_resource_sem); | 417 | mutex_unlock(&ipcomp_resource_mutex); |
417 | kfree(ipcd); | 418 | kfree(ipcd); |
418 | } | 419 | } |
419 | 420 | ||
@@ -440,14 +441,14 @@ static int ipcomp_init_state(struct xfrm_state *x) | |||
440 | if (x->props.mode) | 441 | if (x->props.mode) |
441 | x->props.header_len += sizeof(struct iphdr); | 442 | x->props.header_len += sizeof(struct iphdr); |
442 | 443 | ||
443 | down(&ipcomp_resource_sem); | 444 | mutex_lock(&ipcomp_resource_mutex); |
444 | if (!ipcomp_alloc_scratches()) | 445 | if (!ipcomp_alloc_scratches()) |
445 | goto error; | 446 | goto error; |
446 | 447 | ||
447 | ipcd->tfms = ipcomp_alloc_tfms(x->calg->alg_name); | 448 | ipcd->tfms = ipcomp_alloc_tfms(x->calg->alg_name); |
448 | if (!ipcd->tfms) | 449 | if (!ipcd->tfms) |
449 | goto error; | 450 | goto error; |
450 | up(&ipcomp_resource_sem); | 451 | mutex_unlock(&ipcomp_resource_mutex); |
451 | 452 | ||
452 | if (x->props.mode) { | 453 | if (x->props.mode) { |
453 | err = ipcomp_tunnel_attach(x); | 454 | err = ipcomp_tunnel_attach(x); |
@@ -464,10 +465,10 @@ out: | |||
464 | return err; | 465 | return err; |
465 | 466 | ||
466 | error_tunnel: | 467 | error_tunnel: |
467 | down(&ipcomp_resource_sem); | 468 | mutex_lock(&ipcomp_resource_mutex); |
468 | error: | 469 | error: |
469 | ipcomp_free_data(ipcd); | 470 | ipcomp_free_data(ipcd); |
470 | up(&ipcomp_resource_sem); | 471 | mutex_unlock(&ipcomp_resource_mutex); |
471 | kfree(ipcd); | 472 | kfree(ipcd); |
472 | goto out; | 473 | goto out; |
473 | } | 474 | } |
diff --git a/net/ipv4/netfilter/ip_queue.c b/net/ipv4/netfilter/ip_queue.c index 08f80e2ea2aa..1655866c55b9 100644 --- a/net/ipv4/netfilter/ip_queue.c +++ b/net/ipv4/netfilter/ip_queue.c | |||
@@ -35,6 +35,7 @@ | |||
35 | #include <linux/sysctl.h> | 35 | #include <linux/sysctl.h> |
36 | #include <linux/proc_fs.h> | 36 | #include <linux/proc_fs.h> |
37 | #include <linux/security.h> | 37 | #include <linux/security.h> |
38 | #include <linux/mutex.h> | ||
38 | #include <net/sock.h> | 39 | #include <net/sock.h> |
39 | #include <net/route.h> | 40 | #include <net/route.h> |
40 | 41 | ||
@@ -61,7 +62,7 @@ static unsigned int queue_dropped = 0; | |||
61 | static unsigned int queue_user_dropped = 0; | 62 | static unsigned int queue_user_dropped = 0; |
62 | static struct sock *ipqnl; | 63 | static struct sock *ipqnl; |
63 | static LIST_HEAD(queue_list); | 64 | static LIST_HEAD(queue_list); |
64 | static DECLARE_MUTEX(ipqnl_sem); | 65 | static DEFINE_MUTEX(ipqnl_mutex); |
65 | 66 | ||
66 | static void | 67 | static void |
67 | ipq_issue_verdict(struct ipq_queue_entry *entry, int verdict) | 68 | ipq_issue_verdict(struct ipq_queue_entry *entry, int verdict) |
@@ -539,7 +540,7 @@ ipq_rcv_sk(struct sock *sk, int len) | |||
539 | struct sk_buff *skb; | 540 | struct sk_buff *skb; |
540 | unsigned int qlen; | 541 | unsigned int qlen; |
541 | 542 | ||
542 | down(&ipqnl_sem); | 543 | mutex_lock(&ipqnl_mutex); |
543 | 544 | ||
544 | for (qlen = skb_queue_len(&sk->sk_receive_queue); qlen; qlen--) { | 545 | for (qlen = skb_queue_len(&sk->sk_receive_queue); qlen; qlen--) { |
545 | skb = skb_dequeue(&sk->sk_receive_queue); | 546 | skb = skb_dequeue(&sk->sk_receive_queue); |
@@ -547,7 +548,7 @@ ipq_rcv_sk(struct sock *sk, int len) | |||
547 | kfree_skb(skb); | 548 | kfree_skb(skb); |
548 | } | 549 | } |
549 | 550 | ||
550 | up(&ipqnl_sem); | 551 | mutex_unlock(&ipqnl_mutex); |
551 | } | 552 | } |
552 | 553 | ||
553 | static int | 554 | static int |
@@ -708,8 +709,8 @@ cleanup_sysctl: | |||
708 | 709 | ||
709 | cleanup_ipqnl: | 710 | cleanup_ipqnl: |
710 | sock_release(ipqnl->sk_socket); | 711 | sock_release(ipqnl->sk_socket); |
711 | down(&ipqnl_sem); | 712 | mutex_lock(&ipqnl_mutex); |
712 | up(&ipqnl_sem); | 713 | mutex_unlock(&ipqnl_mutex); |
713 | 714 | ||
714 | cleanup_netlink_notifier: | 715 | cleanup_netlink_notifier: |
715 | netlink_unregister_notifier(&ipq_nl_notifier); | 716 | netlink_unregister_notifier(&ipq_nl_notifier); |
diff --git a/net/ipv4/xfrm4_tunnel.c b/net/ipv4/xfrm4_tunnel.c index afbb0d4cc305..b08d56b117f8 100644 --- a/net/ipv4/xfrm4_tunnel.c +++ b/net/ipv4/xfrm4_tunnel.c | |||
@@ -5,6 +5,7 @@ | |||
5 | 5 | ||
6 | #include <linux/skbuff.h> | 6 | #include <linux/skbuff.h> |
7 | #include <linux/module.h> | 7 | #include <linux/module.h> |
8 | #include <linux/mutex.h> | ||
8 | #include <net/xfrm.h> | 9 | #include <net/xfrm.h> |
9 | #include <net/ip.h> | 10 | #include <net/ip.h> |
10 | #include <net/protocol.h> | 11 | #include <net/protocol.h> |
@@ -26,19 +27,19 @@ static int ipip_xfrm_rcv(struct xfrm_state *x, struct xfrm_decap_state *decap, s | |||
26 | } | 27 | } |
27 | 28 | ||
28 | static struct xfrm_tunnel *ipip_handler; | 29 | static struct xfrm_tunnel *ipip_handler; |
29 | static DECLARE_MUTEX(xfrm4_tunnel_sem); | 30 | static DEFINE_MUTEX(xfrm4_tunnel_mutex); |
30 | 31 | ||
31 | int xfrm4_tunnel_register(struct xfrm_tunnel *handler) | 32 | int xfrm4_tunnel_register(struct xfrm_tunnel *handler) |
32 | { | 33 | { |
33 | int ret; | 34 | int ret; |
34 | 35 | ||
35 | down(&xfrm4_tunnel_sem); | 36 | mutex_lock(&xfrm4_tunnel_mutex); |
36 | ret = 0; | 37 | ret = 0; |
37 | if (ipip_handler != NULL) | 38 | if (ipip_handler != NULL) |
38 | ret = -EINVAL; | 39 | ret = -EINVAL; |
39 | if (!ret) | 40 | if (!ret) |
40 | ipip_handler = handler; | 41 | ipip_handler = handler; |
41 | up(&xfrm4_tunnel_sem); | 42 | mutex_unlock(&xfrm4_tunnel_mutex); |
42 | 43 | ||
43 | return ret; | 44 | return ret; |
44 | } | 45 | } |
@@ -49,13 +50,13 @@ int xfrm4_tunnel_deregister(struct xfrm_tunnel *handler) | |||
49 | { | 50 | { |
50 | int ret; | 51 | int ret; |
51 | 52 | ||
52 | down(&xfrm4_tunnel_sem); | 53 | mutex_lock(&xfrm4_tunnel_mutex); |
53 | ret = 0; | 54 | ret = 0; |
54 | if (ipip_handler != handler) | 55 | if (ipip_handler != handler) |
55 | ret = -EINVAL; | 56 | ret = -EINVAL; |
56 | if (!ret) | 57 | if (!ret) |
57 | ipip_handler = NULL; | 58 | ipip_handler = NULL; |
58 | up(&xfrm4_tunnel_sem); | 59 | mutex_unlock(&xfrm4_tunnel_mutex); |
59 | 60 | ||
60 | synchronize_net(); | 61 | synchronize_net(); |
61 | 62 | ||