diff options
Diffstat (limited to 'net/ipv6')
-rw-r--r-- | net/ipv6/ipcomp6.c | 15 | ||||
-rw-r--r-- | net/ipv6/netfilter/ip6_queue.c | 11 | ||||
-rw-r--r-- | net/ipv6/xfrm6_tunnel.c | 11 |
3 files changed, 20 insertions, 17 deletions
diff --git a/net/ipv6/ipcomp6.c b/net/ipv6/ipcomp6.c index 6107592fbd8c..3c7b324cd20c 100644 --- a/net/ipv6/ipcomp6.c +++ b/net/ipv6/ipcomp6.c | |||
@@ -50,6 +50,7 @@ | |||
50 | #include <net/protocol.h> | 50 | #include <net/protocol.h> |
51 | #include <linux/ipv6.h> | 51 | #include <linux/ipv6.h> |
52 | #include <linux/icmpv6.h> | 52 | #include <linux/icmpv6.h> |
53 | #include <linux/mutex.h> | ||
53 | 54 | ||
54 | struct ipcomp6_tfms { | 55 | struct ipcomp6_tfms { |
55 | struct list_head list; | 56 | struct list_head list; |
@@ -57,7 +58,7 @@ struct ipcomp6_tfms { | |||
57 | int users; | 58 | int users; |
58 | }; | 59 | }; |
59 | 60 | ||
60 | static DECLARE_MUTEX(ipcomp6_resource_sem); | 61 | static DEFINE_MUTEX(ipcomp6_resource_mutex); |
61 | static void **ipcomp6_scratches; | 62 | static void **ipcomp6_scratches; |
62 | static int ipcomp6_scratch_users; | 63 | static int ipcomp6_scratch_users; |
63 | static LIST_HEAD(ipcomp6_tfms_list); | 64 | static LIST_HEAD(ipcomp6_tfms_list); |
@@ -405,9 +406,9 @@ static void ipcomp6_destroy(struct xfrm_state *x) | |||
405 | if (!ipcd) | 406 | if (!ipcd) |
406 | return; | 407 | return; |
407 | xfrm_state_delete_tunnel(x); | 408 | xfrm_state_delete_tunnel(x); |
408 | down(&ipcomp6_resource_sem); | 409 | mutex_lock(&ipcomp6_resource_mutex); |
409 | ipcomp6_free_data(ipcd); | 410 | ipcomp6_free_data(ipcd); |
410 | up(&ipcomp6_resource_sem); | 411 | mutex_unlock(&ipcomp6_resource_mutex); |
411 | kfree(ipcd); | 412 | kfree(ipcd); |
412 | 413 | ||
413 | xfrm6_tunnel_free_spi((xfrm_address_t *)&x->props.saddr); | 414 | xfrm6_tunnel_free_spi((xfrm_address_t *)&x->props.saddr); |
@@ -436,14 +437,14 @@ static int ipcomp6_init_state(struct xfrm_state *x) | |||
436 | if (x->props.mode) | 437 | if (x->props.mode) |
437 | x->props.header_len += sizeof(struct ipv6hdr); | 438 | x->props.header_len += sizeof(struct ipv6hdr); |
438 | 439 | ||
439 | down(&ipcomp6_resource_sem); | 440 | mutex_lock(&ipcomp6_resource_mutex); |
440 | if (!ipcomp6_alloc_scratches()) | 441 | if (!ipcomp6_alloc_scratches()) |
441 | goto error; | 442 | goto error; |
442 | 443 | ||
443 | ipcd->tfms = ipcomp6_alloc_tfms(x->calg->alg_name); | 444 | ipcd->tfms = ipcomp6_alloc_tfms(x->calg->alg_name); |
444 | if (!ipcd->tfms) | 445 | if (!ipcd->tfms) |
445 | goto error; | 446 | goto error; |
446 | up(&ipcomp6_resource_sem); | 447 | mutex_unlock(&ipcomp6_resource_mutex); |
447 | 448 | ||
448 | if (x->props.mode) { | 449 | if (x->props.mode) { |
449 | err = ipcomp6_tunnel_attach(x); | 450 | err = ipcomp6_tunnel_attach(x); |
@@ -459,10 +460,10 @@ static int ipcomp6_init_state(struct xfrm_state *x) | |||
459 | out: | 460 | out: |
460 | return err; | 461 | return err; |
461 | error_tunnel: | 462 | error_tunnel: |
462 | down(&ipcomp6_resource_sem); | 463 | mutex_lock(&ipcomp6_resource_mutex); |
463 | error: | 464 | error: |
464 | ipcomp6_free_data(ipcd); | 465 | ipcomp6_free_data(ipcd); |
465 | up(&ipcomp6_resource_sem); | 466 | mutex_unlock(&ipcomp6_resource_mutex); |
466 | kfree(ipcd); | 467 | kfree(ipcd); |
467 | 468 | ||
468 | goto out; | 469 | goto out; |
diff --git a/net/ipv6/netfilter/ip6_queue.c b/net/ipv6/netfilter/ip6_queue.c index af0635084df8..344eab3b5da8 100644 --- a/net/ipv6/netfilter/ip6_queue.c +++ b/net/ipv6/netfilter/ip6_queue.c | |||
@@ -35,6 +35,7 @@ | |||
35 | #include <linux/spinlock.h> | 35 | #include <linux/spinlock.h> |
36 | #include <linux/sysctl.h> | 36 | #include <linux/sysctl.h> |
37 | #include <linux/proc_fs.h> | 37 | #include <linux/proc_fs.h> |
38 | #include <linux/mutex.h> | ||
38 | #include <net/sock.h> | 39 | #include <net/sock.h> |
39 | #include <net/ipv6.h> | 40 | #include <net/ipv6.h> |
40 | #include <net/ip6_route.h> | 41 | #include <net/ip6_route.h> |
@@ -65,7 +66,7 @@ static unsigned int queue_dropped = 0; | |||
65 | static unsigned int queue_user_dropped = 0; | 66 | static unsigned int queue_user_dropped = 0; |
66 | static struct sock *ipqnl; | 67 | static struct sock *ipqnl; |
67 | static LIST_HEAD(queue_list); | 68 | static LIST_HEAD(queue_list); |
68 | static DECLARE_MUTEX(ipqnl_sem); | 69 | static DEFINE_MUTEX(ipqnl_mutex); |
69 | 70 | ||
70 | static void | 71 | static void |
71 | ipq_issue_verdict(struct ipq_queue_entry *entry, int verdict) | 72 | ipq_issue_verdict(struct ipq_queue_entry *entry, int verdict) |
@@ -537,7 +538,7 @@ ipq_rcv_sk(struct sock *sk, int len) | |||
537 | struct sk_buff *skb; | 538 | struct sk_buff *skb; |
538 | unsigned int qlen; | 539 | unsigned int qlen; |
539 | 540 | ||
540 | down(&ipqnl_sem); | 541 | mutex_lock(&ipqnl_mutex); |
541 | 542 | ||
542 | for (qlen = skb_queue_len(&sk->sk_receive_queue); qlen; qlen--) { | 543 | for (qlen = skb_queue_len(&sk->sk_receive_queue); qlen; qlen--) { |
543 | skb = skb_dequeue(&sk->sk_receive_queue); | 544 | skb = skb_dequeue(&sk->sk_receive_queue); |
@@ -545,7 +546,7 @@ ipq_rcv_sk(struct sock *sk, int len) | |||
545 | kfree_skb(skb); | 546 | kfree_skb(skb); |
546 | } | 547 | } |
547 | 548 | ||
548 | up(&ipqnl_sem); | 549 | mutex_unlock(&ipqnl_mutex); |
549 | } | 550 | } |
550 | 551 | ||
551 | static int | 552 | static int |
@@ -704,8 +705,8 @@ cleanup_sysctl: | |||
704 | 705 | ||
705 | cleanup_ipqnl: | 706 | cleanup_ipqnl: |
706 | sock_release(ipqnl->sk_socket); | 707 | sock_release(ipqnl->sk_socket); |
707 | down(&ipqnl_sem); | 708 | mutex_lock(&ipqnl_mutex); |
708 | up(&ipqnl_sem); | 709 | mutex_unlock(&ipqnl_mutex); |
709 | 710 | ||
710 | cleanup_netlink_notifier: | 711 | cleanup_netlink_notifier: |
711 | netlink_unregister_notifier(&ipq_nl_notifier); | 712 | netlink_unregister_notifier(&ipq_nl_notifier); |
diff --git a/net/ipv6/xfrm6_tunnel.c b/net/ipv6/xfrm6_tunnel.c index 8cfc58b96fc2..08f9abbdf1d7 100644 --- a/net/ipv6/xfrm6_tunnel.c +++ b/net/ipv6/xfrm6_tunnel.c | |||
@@ -31,6 +31,7 @@ | |||
31 | #include <net/protocol.h> | 31 | #include <net/protocol.h> |
32 | #include <linux/ipv6.h> | 32 | #include <linux/ipv6.h> |
33 | #include <linux/icmpv6.h> | 33 | #include <linux/icmpv6.h> |
34 | #include <linux/mutex.h> | ||
34 | 35 | ||
35 | #ifdef CONFIG_IPV6_XFRM6_TUNNEL_DEBUG | 36 | #ifdef CONFIG_IPV6_XFRM6_TUNNEL_DEBUG |
36 | # define X6TDEBUG 3 | 37 | # define X6TDEBUG 3 |
@@ -357,19 +358,19 @@ static int xfrm6_tunnel_input(struct xfrm_state *x, struct xfrm_decap_state *dec | |||
357 | } | 358 | } |
358 | 359 | ||
359 | static struct xfrm6_tunnel *xfrm6_tunnel_handler; | 360 | static struct xfrm6_tunnel *xfrm6_tunnel_handler; |
360 | static DECLARE_MUTEX(xfrm6_tunnel_sem); | 361 | static DEFINE_MUTEX(xfrm6_tunnel_mutex); |
361 | 362 | ||
362 | int xfrm6_tunnel_register(struct xfrm6_tunnel *handler) | 363 | int xfrm6_tunnel_register(struct xfrm6_tunnel *handler) |
363 | { | 364 | { |
364 | int ret; | 365 | int ret; |
365 | 366 | ||
366 | down(&xfrm6_tunnel_sem); | 367 | mutex_lock(&xfrm6_tunnel_mutex); |
367 | ret = 0; | 368 | ret = 0; |
368 | if (xfrm6_tunnel_handler != NULL) | 369 | if (xfrm6_tunnel_handler != NULL) |
369 | ret = -EINVAL; | 370 | ret = -EINVAL; |
370 | if (!ret) | 371 | if (!ret) |
371 | xfrm6_tunnel_handler = handler; | 372 | xfrm6_tunnel_handler = handler; |
372 | up(&xfrm6_tunnel_sem); | 373 | mutex_unlock(&xfrm6_tunnel_mutex); |
373 | 374 | ||
374 | return ret; | 375 | return ret; |
375 | } | 376 | } |
@@ -380,13 +381,13 @@ int xfrm6_tunnel_deregister(struct xfrm6_tunnel *handler) | |||
380 | { | 381 | { |
381 | int ret; | 382 | int ret; |
382 | 383 | ||
383 | down(&xfrm6_tunnel_sem); | 384 | mutex_lock(&xfrm6_tunnel_mutex); |
384 | ret = 0; | 385 | ret = 0; |
385 | if (xfrm6_tunnel_handler != handler) | 386 | if (xfrm6_tunnel_handler != handler) |
386 | ret = -EINVAL; | 387 | ret = -EINVAL; |
387 | if (!ret) | 388 | if (!ret) |
388 | xfrm6_tunnel_handler = NULL; | 389 | xfrm6_tunnel_handler = NULL; |
389 | up(&xfrm6_tunnel_sem); | 390 | mutex_unlock(&xfrm6_tunnel_mutex); |
390 | 391 | ||
391 | synchronize_net(); | 392 | synchronize_net(); |
392 | 393 | ||