--- net/bluetooth/rfcomm/sock.c- 2004-05-21 11:49:58.375676516 +0100 +++ net/bluetooth/rfcomm/sock.c 2004-05-21 12:00:33.374126744 +0100 @@ -397,6 +397,19 @@ err = -EBADFD; goto done; } + if (!rfcomm_pi(sk)->channel) { + u8 channel; + bdaddr_t *src = &bt_sk(sk)->src; + for (channel = 1; channel < 31; channel++) + if (!__rfcomm_get_sock_by_addr(channel, src)) { + rfcomm_pi(sk)->channel = channel; + break; + } + if (channel == 31) { + err = -ENOMEM; + goto done; + } + } sk->sk_max_ack_backlog = backlog; sk->sk_ack_backlog = 0;