Commit 876d9484edf77d228adb42aecd4debd58d7739d6
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) { |