@@ -680,9 +680,9 @@ static void l2cap_chan_le_connect_reject(struct l2cap_chan *chan)
680680 u16 result ;
681681
682682 if (test_bit (FLAG_DEFER_SETUP , & chan -> flags ))
683- result = L2CAP_CR_AUTHORIZATION ;
683+ result = L2CAP_CR_LE_AUTHORIZATION ;
684684 else
685- result = L2CAP_CR_BAD_PSM ;
685+ result = L2CAP_CR_LE_BAD_PSM ;
686686
687687 l2cap_state_change (chan , BT_DISCONN );
688688
@@ -3670,7 +3670,7 @@ void __l2cap_le_connect_rsp_defer(struct l2cap_chan *chan)
36703670 rsp .mtu = cpu_to_le16 (chan -> imtu );
36713671 rsp .mps = cpu_to_le16 (chan -> mps );
36723672 rsp .credits = cpu_to_le16 (chan -> rx_credits );
3673- rsp .result = cpu_to_le16 (L2CAP_CR_SUCCESS );
3673+ rsp .result = cpu_to_le16 (L2CAP_CR_LE_SUCCESS );
36743674
36753675 l2cap_send_cmd (conn , chan -> ident , L2CAP_LE_CONN_RSP , sizeof (rsp ),
36763676 & rsp );
@@ -3816,9 +3816,17 @@ static struct l2cap_chan *l2cap_connect(struct l2cap_conn *conn,
38163816
38173817 result = L2CAP_CR_NO_MEM ;
38183818
3819+ /* Check for valid dynamic CID range (as per Erratum 3253) */
3820+ if (scid < L2CAP_CID_DYN_START || scid > L2CAP_CID_DYN_END ) {
3821+ result = L2CAP_CR_INVALID_SCID ;
3822+ goto response ;
3823+ }
3824+
38193825 /* Check if we already have channel with that dcid */
3820- if (__l2cap_get_chan_by_dcid (conn , scid ))
3826+ if (__l2cap_get_chan_by_dcid (conn , scid )) {
3827+ result = L2CAP_CR_SCID_IN_USE ;
38213828 goto response ;
3829+ }
38223830
38233831 chan = pchan -> ops -> new_connection (pchan );
38243832 if (!chan )
@@ -5280,7 +5288,7 @@ static int l2cap_le_connect_rsp(struct l2cap_conn *conn,
52805288 credits = __le16_to_cpu (rsp -> credits );
52815289 result = __le16_to_cpu (rsp -> result );
52825290
5283- if (result == L2CAP_CR_SUCCESS && (mtu < 23 || mps < 23 ||
5291+ if (result == L2CAP_CR_LE_SUCCESS && (mtu < 23 || mps < 23 ||
52845292 dcid < L2CAP_CID_DYN_START ||
52855293 dcid > L2CAP_CID_LE_DYN_END ))
52865294 return - EPROTO ;
@@ -5301,7 +5309,7 @@ static int l2cap_le_connect_rsp(struct l2cap_conn *conn,
53015309 l2cap_chan_lock (chan );
53025310
53035311 switch (result ) {
5304- case L2CAP_CR_SUCCESS :
5312+ case L2CAP_CR_LE_SUCCESS :
53055313 if (__l2cap_get_chan_by_dcid (conn , dcid )) {
53065314 err = - EBADSLT ;
53075315 break ;
@@ -5315,8 +5323,8 @@ static int l2cap_le_connect_rsp(struct l2cap_conn *conn,
53155323 l2cap_chan_ready (chan );
53165324 break ;
53175325
5318- case L2CAP_CR_AUTHENTICATION :
5319- case L2CAP_CR_ENCRYPTION :
5326+ case L2CAP_CR_LE_AUTHENTICATION :
5327+ case L2CAP_CR_LE_ENCRYPTION :
53205328 /* If we already have MITM protection we can't do
53215329 * anything.
53225330 */
@@ -5459,7 +5467,7 @@ static int l2cap_le_connect_req(struct l2cap_conn *conn,
54595467 pchan = l2cap_global_chan_by_psm (BT_LISTEN , psm , & conn -> hcon -> src ,
54605468 & conn -> hcon -> dst , LE_LINK );
54615469 if (!pchan ) {
5462- result = L2CAP_CR_BAD_PSM ;
5470+ result = L2CAP_CR_LE_BAD_PSM ;
54635471 chan = NULL ;
54645472 goto response ;
54655473 }
@@ -5469,28 +5477,28 @@ static int l2cap_le_connect_req(struct l2cap_conn *conn,
54695477
54705478 if (!smp_sufficient_security (conn -> hcon , pchan -> sec_level ,
54715479 SMP_ALLOW_STK )) {
5472- result = L2CAP_CR_AUTHENTICATION ;
5480+ result = L2CAP_CR_LE_AUTHENTICATION ;
54735481 chan = NULL ;
54745482 goto response_unlock ;
54755483 }
54765484
54775485 /* Check for valid dynamic CID range */
54785486 if (scid < L2CAP_CID_DYN_START || scid > L2CAP_CID_LE_DYN_END ) {
5479- result = L2CAP_CR_INVALID_SCID ;
5487+ result = L2CAP_CR_LE_INVALID_SCID ;
54805488 chan = NULL ;
54815489 goto response_unlock ;
54825490 }
54835491
54845492 /* Check if we already have channel with that dcid */
54855493 if (__l2cap_get_chan_by_dcid (conn , scid )) {
5486- result = L2CAP_CR_SCID_IN_USE ;
5494+ result = L2CAP_CR_LE_SCID_IN_USE ;
54875495 chan = NULL ;
54885496 goto response_unlock ;
54895497 }
54905498
54915499 chan = pchan -> ops -> new_connection (pchan );
54925500 if (!chan ) {
5493- result = L2CAP_CR_NO_MEM ;
5501+ result = L2CAP_CR_LE_NO_MEM ;
54945502 goto response_unlock ;
54955503 }
54965504
@@ -5526,7 +5534,7 @@ static int l2cap_le_connect_req(struct l2cap_conn *conn,
55265534 chan -> ops -> defer (chan );
55275535 } else {
55285536 l2cap_chan_ready (chan );
5529- result = L2CAP_CR_SUCCESS ;
5537+ result = L2CAP_CR_LE_SUCCESS ;
55305538 }
55315539
55325540response_unlock :
0 commit comments