Skip to content

Commit

Permalink
Bluetooth: Disallow usage of L2CAP CID setting for now
Browse files Browse the repository at this point in the history
In the future the L2CAP layer will have full support for fixed channels
and right now it already can export the channel assignment, but for the
functions bind() and connect() the usage of only CID 0 is allowed. This
allows an easy detection if the kernel supports fixed channels or not,
because otherwise it would impossible for application to tell.

Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
  • Loading branch information
Marcel Holtmann committed Feb 27, 2009
1 parent 8bf4794 commit 2a517ca
Showing 1 changed file with 10 additions and 6 deletions.
16 changes: 10 additions & 6 deletions net/bluetooth/l2cap.c
Original file line number Diff line number Diff line change
Expand Up @@ -799,6 +799,9 @@ static int l2cap_sock_bind(struct socket *sock, struct sockaddr *addr, int alen)
len = min_t(unsigned int, sizeof(la), alen);
memcpy(&la, addr, len);

if (la.l2_cid)
return -EINVAL;

lock_sock(sk);

if (sk->sk_state != BT_OPEN) {
Expand Down Expand Up @@ -929,19 +932,20 @@ static int l2cap_sock_connect(struct socket *sock, struct sockaddr *addr, int al
struct sockaddr_l2 la;
int len, err = 0;

lock_sock(sk);

BT_DBG("sk %p", sk);

if (!addr || addr->sa_family != AF_BLUETOOTH) {
err = -EINVAL;
goto done;
}
if (!addr || addr->sa_family != AF_BLUETOOTH)
return -EINVAL;

memset(&la, 0, sizeof(la));
len = min_t(unsigned int, sizeof(la), alen);
memcpy(&la, addr, len);

if (la.l2_cid)
return -EINVAL;

lock_sock(sk);

if (sk->sk_type == SOCK_SEQPACKET && !la.l2_psm) {
err = -EINVAL;
goto done;
Expand Down

0 comments on commit 2a517ca

Please sign in to comment.