.. | .. |
---|
400 | 400 | struct sock *sk = sock->sk; |
---|
401 | 401 | |
---|
402 | 402 | lock_sock(sk); |
---|
| 403 | + if (sock->state != SS_UNCONNECTED) { |
---|
| 404 | + release_sock(sk); |
---|
| 405 | + return -EINVAL; |
---|
| 406 | + } |
---|
| 407 | + |
---|
403 | 408 | if (sk->sk_state != TCP_LISTEN) { |
---|
404 | 409 | memset(&nr_sk(sk)->user_addr, 0, AX25_ADDR_LEN); |
---|
405 | 410 | sk->sk_max_ack_backlog = backlog; |
---|
.. | .. |
---|
655 | 660 | goto out_release; |
---|
656 | 661 | } |
---|
657 | 662 | |
---|
| 663 | + if (sock->state == SS_CONNECTING) { |
---|
| 664 | + err = -EALREADY; |
---|
| 665 | + goto out_release; |
---|
| 666 | + } |
---|
| 667 | + |
---|
658 | 668 | sk->sk_state = TCP_CLOSE; |
---|
659 | 669 | sock->state = SS_UNCONNECTED; |
---|
660 | 670 | |
---|