Commit 876d9484edf77d228adb42aecd4debd58d7739d6

Authored by Marcel Holtmann
Committed by David S. Miller
1 parent a9de924806

[Bluetooth] Finish L2CAP configuration only with acceptable settings

The parameters of the L2CAP output configuration might not be accepted
after the first configuration round. So only indicate a finished output
configuration when acceptable settings are provided.

Signed-off-by: Marcel Holtmann <marcel@holtmann.org>

Showing 1 changed file with 10 additions and 6 deletions Side-by-side Diff

net/bluetooth/l2cap.c
... ... @@ -1370,8 +1370,10 @@
1370 1370  
1371 1371 if (pi->conf_mtu < pi->omtu)
1372 1372 result = L2CAP_CONF_UNACCEPT;
1373   - else
  1373 + else {
1374 1374 pi->omtu = pi->conf_mtu;
  1375 + pi->conf_state |= L2CAP_CONF_OUTPUT_DONE;
  1376 + }
1375 1377  
1376 1378 l2cap_add_conf_opt(&ptr, L2CAP_CONF_MTU, 2, pi->omtu);
1377 1379 }
1378 1380  
1379 1381  
... ... @@ -1577,16 +1579,19 @@
1577 1579  
1578 1580 l2cap_send_cmd(conn, cmd->ident, L2CAP_CONF_RSP, len, rsp);
1579 1581  
1580   - /* Output config done. */
1581   - l2cap_pi(sk)->conf_state |= L2CAP_CONF_OUTPUT_DONE;
1582   -
1583 1582 /* Reset config buffer. */
1584 1583 l2cap_pi(sk)->conf_len = 0;
1585 1584  
  1585 + if (!(l2cap_pi(sk)->conf_state & L2CAP_CONF_OUTPUT_DONE))
  1586 + goto unlock;
  1587 +
1586 1588 if (l2cap_pi(sk)->conf_state & L2CAP_CONF_INPUT_DONE) {
1587 1589 sk->sk_state = BT_CONNECTED;
1588 1590 l2cap_chan_ready(sk);
1589   - } else if (!(l2cap_pi(sk)->conf_state & L2CAP_CONF_REQ_SENT)) {
  1591 + goto unlock;
  1592 + }
  1593 +
  1594 + if (!(l2cap_pi(sk)->conf_state & L2CAP_CONF_REQ_SENT)) {
1590 1595 u8 req[64];
1591 1596 l2cap_send_cmd(conn, l2cap_get_ident(conn), L2CAP_CONF_REQ,
1592 1597 l2cap_build_conf_req(sk, req), req);
... ... @@ -1646,7 +1651,6 @@
1646 1651 if (flags & 0x01)
1647 1652 goto done;
1648 1653  
1649   - /* Input config done */
1650 1654 l2cap_pi(sk)->conf_state |= L2CAP_CONF_INPUT_DONE;
1651 1655  
1652 1656 if (l2cap_pi(sk)->conf_state & L2CAP_CONF_OUTPUT_DONE) {