diff options
author | Mallikarjun Phulari <mallikarjun.phulari@intel.com> | 2018-10-05 14:48:13 +0530 |
---|---|---|
committer | Marcel Holtmann <marcel@holtmann.org> | 2018-10-14 10:25:47 +0200 |
commit | dd1a8f8a88eecbc903f9ffff12332bec6d3f3be3 (patch) | |
tree | a0d00a5c212423c1ad07838eb7dcac19ee94a6f8 /net/bluetooth | |
parent | 571f739083e2544b343b5998608de679519de4e9 (diff) | |
download | linux-stable-dd1a8f8a88eecbc903f9ffff12332bec6d3f3be3.tar.gz linux-stable-dd1a8f8a88eecbc903f9ffff12332bec6d3f3be3.tar.bz2 linux-stable-dd1a8f8a88eecbc903f9ffff12332bec6d3f3be3.zip |
Bluetooth: Errata Service Release 8, Erratum 3253
L2CAP: New result values
0x0006 - Connection refused – Invalid Source CID
0x0007 - Connection refused – Source CID already allocated
As per the ESR08_V1.0.0, 1.11.2 Erratum 3253, Page No. 54,
"Remote CID invalid Issue".
Applies to Core Specification versions: V5.0, V4.2, v4.1, v4.0, and v3.0 + HS
Vol 3, Part A, Section 4.2, 4.3, 4.14, 4.15.
Core Specification Version 5.0, Page No.1753, Table 4.6 and
Page No. 1767, Table 4.14
New result values are added to l2cap connect/create channel response as
0x0006 - Connection refused – Invalid Source CID
0x0007 - Connection refused – Source CID already allocated
Signed-off-by: Mallikarjun Phulari <mallikarjun.phulari@intel.com>
Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
Diffstat (limited to 'net/bluetooth')
-rw-r--r-- | net/bluetooth/l2cap_core.c | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/net/bluetooth/l2cap_core.c b/net/bluetooth/l2cap_core.c index cf03a0122b2b..2146e0f3b6f8 100644 --- a/net/bluetooth/l2cap_core.c +++ b/net/bluetooth/l2cap_core.c @@ -3816,9 +3816,17 @@ static struct l2cap_chan *l2cap_connect(struct l2cap_conn *conn, result = L2CAP_CR_NO_MEM; + /* Check for valid dynamic CID range (as per Erratum 3253) */ + if (scid < L2CAP_CID_DYN_START || scid > L2CAP_CID_DYN_END) { + result = L2CAP_CR_INVALID_SCID; + goto response; + } + /* Check if we already have channel with that dcid */ - if (__l2cap_get_chan_by_dcid(conn, scid)) + if (__l2cap_get_chan_by_dcid(conn, scid)) { + result = L2CAP_CR_SCID_IN_USE; goto response; + } chan = pchan->ops->new_connection(pchan); if (!chan) |