Skip to content

Commit

Permalink
Bluetooth: L2CAP: Fix handling LE modes by L2CAP_OPTIONS
Browse files Browse the repository at this point in the history
commit b86b0b1 upstream.

L2CAP_OPTIONS shall only be used with BR/EDR modes.

Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
Signed-off-by: Zubin Mithra <zsm@chromium.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
  • Loading branch information
Vudentz authored and gregkh committed May 26, 2021
1 parent d3d6481 commit a6f5ef8
Showing 1 changed file with 20 additions and 4 deletions.
24 changes: 20 additions & 4 deletions net/bluetooth/l2cap_sock.c
Original file line number Diff line number Diff line change
Expand Up @@ -426,6 +426,20 @@ static int l2cap_sock_getsockopt_old(struct socket *sock, int optname,
break;
}

/* Only BR/EDR modes are supported here */
switch (chan->mode) {
case L2CAP_MODE_BASIC:
case L2CAP_MODE_ERTM:
case L2CAP_MODE_STREAMING:
break;
default:
err = -EINVAL;
break;
}

if (err < 0)
break;

memset(&opts, 0, sizeof(opts));
opts.imtu = chan->imtu;
opts.omtu = chan->omtu;
Expand Down Expand Up @@ -685,10 +699,8 @@ static int l2cap_sock_setsockopt_old(struct socket *sock, int optname,
break;
}

chan->mode = opts.mode;
switch (chan->mode) {
case L2CAP_MODE_LE_FLOWCTL:
break;
/* Only BR/EDR modes are supported here */
switch (opts.mode) {
case L2CAP_MODE_BASIC:
clear_bit(CONF_STATE2_DEVICE, &chan->conf_state);
break;
Expand All @@ -702,6 +714,10 @@ static int l2cap_sock_setsockopt_old(struct socket *sock, int optname,
break;
}

if (err < 0)
break;

chan->mode = opts.mode;
chan->imtu = opts.imtu;
chan->omtu = opts.omtu;
chan->fcs = opts.fcs;
Expand Down

0 comments on commit a6f5ef8

Please sign in to comment.