| To: | netdev@xxxxxxxxxxx, linux-hams@xxxxxxxxxxxxxxx |
|---|---|
| Subject: | [PATCH] Fix ax25_get_socket locking |
| From: | Ralf Baechle DL5RB <ralf@xxxxxxxxxxxxxx> |
| Date: | Mon, 14 Mar 2005 08:37:44 +0000 |
| Cc: | "David S. Miller" <davem@xxxxxxxxxxxxx> |
| Sender: | netdev-bounce@xxxxxxxxxxx |
| User-agent: | Mutt/1.4.1i |
In an attempt to return a locked socket ax25_get_socket() was calling
lock_sock() with a spinlock held, bad idea. Making matters worse it's
only user is running in bottom half context resulting in a potencial
attempt to sleep in bottom half context, so fix the locking there as well.
Index: bk-afu/net/ax25/ax25_in.c
===================================================================
--- bk-afu.orig/net/ax25/ax25_in.c 2005-03-14 00:20:42.153164936 +0000
+++ bk-afu/net/ax25/ax25_in.c 2005-03-14 00:21:07.469316296 +0000
@@ -275,6 +275,7 @@
/* Now find a suitable dgram socket */
sk = ax25_get_socket(&dest, &src, SOCK_DGRAM);
if (sk != NULL) {
+ bh_lock_sock(sk);
if (atomic_read(&sk->sk_rmem_alloc) >=
sk->sk_rcvbuf) {
kfree_skb(skb);
@@ -286,7 +287,8 @@
if (sock_queue_rcv_skb(sk, skb) != 0)
kfree_skb(skb);
}
- release_sock(sk);
+ bh_unlock_sock(sk);
+ sock_put(sk);
} else {
kfree_skb(skb);
}
Index: bk-afu/net/ax25/af_ax25.c
===================================================================
--- bk-afu.orig/net/ax25/af_ax25.c 2005-03-14 00:21:03.757880520 +0000
+++ bk-afu/net/ax25/af_ax25.c 2005-03-14 00:21:07.471315992 +0000
@@ -180,8 +180,7 @@
!ax25cmp(&s->dest_addr, dest_addr) &&
s->sk->sk_type == type) {
sk = s->sk;
- /* XXX Sleeps with spinlock held, use refcounts
instead. XXX */
- lock_sock(sk);
+ sock_hold(sk);
break;
}
}
|
| <Prev in Thread] | Current Thread | [Next in Thread> |
|---|---|---|
| ||
| Previous by Date: | [12/*] [IPSEC] Handle local_df in IPv4, Herbert Xu |
|---|---|
| Next by Date: | Resending ethernet packets to direct neighbours, Weber Matthias |
| Previous by Thread: | [NETLINK] Fix multicast bind/autobind race, Herbert Xu |
| Next by Thread: | Re: [PATCH] Fix ax25_get_socket locking, David S. Miller |
| Indexes: | [Date] [Thread] [Top] [All Lists] |