diff options
Diffstat (limited to 'net/ax25')
-rw-r--r-- | net/ax25/af_ax25.c | 6 | ||||
-rw-r--r-- | net/ax25/ax25_std_timer.c | 8 |
2 files changed, 4 insertions, 10 deletions
diff --git a/net/ax25/af_ax25.c b/net/ax25/af_ax25.c index 2712544cf0ca..97eaa23ad9ea 100644 --- a/net/ax25/af_ax25.c +++ b/net/ax25/af_ax25.c | |||
@@ -893,13 +893,11 @@ struct sock *ax25_make_new(struct sock *osk, struct ax25_dev *ax25_dev) | |||
893 | 893 | ||
894 | sk->sk_destruct = ax25_free_sock; | 894 | sk->sk_destruct = ax25_free_sock; |
895 | sk->sk_type = osk->sk_type; | 895 | sk->sk_type = osk->sk_type; |
896 | sk->sk_socket = osk->sk_socket; | ||
897 | sk->sk_priority = osk->sk_priority; | 896 | sk->sk_priority = osk->sk_priority; |
898 | sk->sk_protocol = osk->sk_protocol; | 897 | sk->sk_protocol = osk->sk_protocol; |
899 | sk->sk_rcvbuf = osk->sk_rcvbuf; | 898 | sk->sk_rcvbuf = osk->sk_rcvbuf; |
900 | sk->sk_sndbuf = osk->sk_sndbuf; | 899 | sk->sk_sndbuf = osk->sk_sndbuf; |
901 | sk->sk_state = TCP_ESTABLISHED; | 900 | sk->sk_state = TCP_ESTABLISHED; |
902 | sk->sk_sleep = osk->sk_sleep; | ||
903 | sock_copy_flags(sk, osk); | 901 | sock_copy_flags(sk, osk); |
904 | 902 | ||
905 | oax25 = ax25_sk(osk); | 903 | oax25 = ax25_sk(osk); |
@@ -1361,13 +1359,11 @@ static int ax25_accept(struct socket *sock, struct socket *newsock, int flags) | |||
1361 | goto out; | 1359 | goto out; |
1362 | 1360 | ||
1363 | newsk = skb->sk; | 1361 | newsk = skb->sk; |
1364 | newsk->sk_socket = newsock; | 1362 | sock_graft(newsk, newsock); |
1365 | newsk->sk_sleep = &newsock->wait; | ||
1366 | 1363 | ||
1367 | /* Now attach up the new socket */ | 1364 | /* Now attach up the new socket */ |
1368 | kfree_skb(skb); | 1365 | kfree_skb(skb); |
1369 | sk->sk_ack_backlog--; | 1366 | sk->sk_ack_backlog--; |
1370 | newsock->sk = newsk; | ||
1371 | newsock->state = SS_CONNECTED; | 1367 | newsock->state = SS_CONNECTED; |
1372 | 1368 | ||
1373 | out: | 1369 | out: |
diff --git a/net/ax25/ax25_std_timer.c b/net/ax25/ax25_std_timer.c index 96e4b9273250..cdc7e751ef36 100644 --- a/net/ax25/ax25_std_timer.c +++ b/net/ax25/ax25_std_timer.c | |||
@@ -39,11 +39,9 @@ void ax25_std_heartbeat_expiry(ax25_cb *ax25) | |||
39 | 39 | ||
40 | switch (ax25->state) { | 40 | switch (ax25->state) { |
41 | case AX25_STATE_0: | 41 | case AX25_STATE_0: |
42 | /* Magic here: If we listen() and a new link dies before it | 42 | if (!sk || |
43 | is accepted() it isn't 'dead' so doesn't get removed. */ | 43 | sock_flag(sk, SOCK_DESTROY) || |
44 | if (!sk || sock_flag(sk, SOCK_DESTROY) || | 44 | sock_flag(sk, SOCK_DEAD)) { |
45 | (sk->sk_state == TCP_LISTEN && | ||
46 | sock_flag(sk, SOCK_DEAD))) { | ||
47 | if (sk) { | 45 | if (sk) { |
48 | sock_hold(sk); | 46 | sock_hold(sk); |
49 | ax25_destroy_socket(ax25); | 47 | ax25_destroy_socket(ax25); |