|
|
@@ -153,7 +153,7 @@ static struct sock *nr_find_listener(ax25_address *addr)
|
|
|
sk_for_each(s, &nr_list)
|
|
|
if (!ax25cmp(&nr_sk(s)->source_addr, addr) &&
|
|
|
s->sk_state == TCP_LISTEN) {
|
|
|
- bh_lock_sock(s);
|
|
|
+ sock_hold(s);
|
|
|
goto found;
|
|
|
}
|
|
|
s = NULL;
|
|
|
@@ -174,7 +174,7 @@ static struct sock *nr_find_socket(unsigned char index, unsigned char id)
|
|
|
struct nr_sock *nr = nr_sk(s);
|
|
|
|
|
|
if (nr->my_index == index && nr->my_id == id) {
|
|
|
- bh_lock_sock(s);
|
|
|
+ sock_hold(s);
|
|
|
goto found;
|
|
|
}
|
|
|
}
|
|
|
@@ -198,7 +198,7 @@ static struct sock *nr_find_peer(unsigned char index, unsigned char id,
|
|
|
|
|
|
if (nr->your_index == index && nr->your_id == id &&
|
|
|
!ax25cmp(&nr->dest_addr, dest)) {
|
|
|
- bh_lock_sock(s);
|
|
|
+ sock_hold(s);
|
|
|
goto found;
|
|
|
}
|
|
|
}
|
|
|
@@ -224,7 +224,7 @@ static unsigned short nr_find_next_circuit(void)
|
|
|
if (i != 0 && j != 0) {
|
|
|
if ((sk=nr_find_socket(i, j)) == NULL)
|
|
|
break;
|
|
|
- bh_unlock_sock(sk);
|
|
|
+ sock_put(sk);
|
|
|
}
|
|
|
|
|
|
id++;
|
|
|
@@ -920,6 +920,7 @@ int nr_rx_frame(struct sk_buff *skb, struct net_device *dev)
|
|
|
}
|
|
|
|
|
|
if (sk != NULL) {
|
|
|
+ bh_lock_sock(sk);
|
|
|
skb_reset_transport_header(skb);
|
|
|
|
|
|
if (frametype == NR_CONNACK && skb->len == 22)
|
|
|
@@ -929,6 +930,7 @@ int nr_rx_frame(struct sk_buff *skb, struct net_device *dev)
|
|
|
|
|
|
ret = nr_process_rx_frame(sk, skb);
|
|
|
bh_unlock_sock(sk);
|
|
|
+ sock_put(sk);
|
|
|
return ret;
|
|
|
}
|
|
|
|
|
|
@@ -960,10 +962,12 @@ int nr_rx_frame(struct sk_buff *skb, struct net_device *dev)
|
|
|
(make = nr_make_new(sk)) == NULL) {
|
|
|
nr_transmit_refusal(skb, 0);
|
|
|
if (sk)
|
|
|
- bh_unlock_sock(sk);
|
|
|
+ sock_put(sk);
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
+ bh_lock_sock(sk);
|
|
|
+
|
|
|
window = skb->data[20];
|
|
|
|
|
|
skb->sk = make;
|
|
|
@@ -1016,6 +1020,7 @@ int nr_rx_frame(struct sk_buff *skb, struct net_device *dev)
|
|
|
sk->sk_data_ready(sk);
|
|
|
|
|
|
bh_unlock_sock(sk);
|
|
|
+ sock_put(sk);
|
|
|
|
|
|
nr_insert_socket(make);
|
|
|
|