Skip to content

Commit

Permalink
Bluetooth: Errata Service Release 8, Erratum 3253
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Mallikarjun Phulari authored and Marcel Holtmann committed Oct 14, 2018
1 parent 571f739 commit dd1a8f8
Show file tree
Hide file tree
Showing 2 changed files with 11 additions and 1 deletion.
2 changes: 2 additions & 0 deletions include/net/bluetooth/l2cap.h
Original file line number Diff line number Diff line change
Expand Up @@ -277,6 +277,8 @@ struct l2cap_conn_rsp {
#define L2CAP_CR_SEC_BLOCK 0x0003
#define L2CAP_CR_NO_MEM 0x0004
#define L2CAP_CR_BAD_AMP 0x0005
#define L2CAP_CR_INVALID_SCID 0x0006
#define L2CAP_CR_SCID_IN_USE 0x0007

/* credit based connect results */
#define L2CAP_CR_LE_SUCCESS 0x0000
Expand Down
10 changes: 9 additions & 1 deletion net/bluetooth/l2cap_core.c
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down

0 comments on commit dd1a8f8

Please sign in to comment.