Bluetooth: Host: Remove SCO security check
Remove SCO security management code block. Currently, security related checks are not necessary. It can be added if needed. Signed-off-by: Lyle Zhu <lyle.zhu@nxp.com>
This commit is contained in:
parent
faeb9bf681
commit
39162fd71a
3 changed files with 0 additions and 141 deletions
|
|
@ -241,8 +241,6 @@ static int sco_accept(struct bt_conn *acl, struct bt_conn *sco)
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
chan->required_sec_level = sco_server->sec_level;
|
|
||||||
|
|
||||||
bt_sco_chan_add(sco, chan);
|
bt_sco_chan_add(sco, chan);
|
||||||
bt_sco_chan_set_state(chan, BT_SCO_STATE_CONNECTING);
|
bt_sco_chan_set_state(chan, BT_SCO_STATE_CONNECTING);
|
||||||
|
|
||||||
|
|
@ -330,31 +328,6 @@ void bt_sco_cleanup_acl(struct bt_conn *sco)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static int sco_chan_connect_security(struct bt_conn *sco, struct bt_sco_chan *chan)
|
|
||||||
{
|
|
||||||
struct bt_conn *acl;
|
|
||||||
|
|
||||||
acl = sco->sco.acl;
|
|
||||||
|
|
||||||
if (acl->sec_level < chan->required_sec_level) {
|
|
||||||
int err;
|
|
||||||
|
|
||||||
err = bt_conn_set_security(acl, chan->required_sec_level);
|
|
||||||
if (err != 0) {
|
|
||||||
LOG_DBG("Failed to set security: %d", err);
|
|
||||||
|
|
||||||
/* Restore states */
|
|
||||||
bt_sco_cleanup_acl(sco);
|
|
||||||
bt_sco_chan_set_state(chan, BT_SCO_STATE_DISCONNECTED);
|
|
||||||
|
|
||||||
return err;
|
|
||||||
}
|
|
||||||
bt_sco_chan_set_state(chan, BT_SCO_STATE_ENCRYPT_PENDING);
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int sco_setup_sync_conn(struct bt_conn *sco_conn)
|
static int sco_setup_sync_conn(struct bt_conn *sco_conn)
|
||||||
{
|
{
|
||||||
struct net_buf *buf;
|
struct net_buf *buf;
|
||||||
|
|
@ -421,15 +394,6 @@ struct bt_conn *bt_conn_create_sco(const bt_addr_t *peer, struct bt_sco_chan *ch
|
||||||
bt_conn_set_state(chan->sco, BT_CONN_CONNECTING);
|
bt_conn_set_state(chan->sco, BT_CONN_CONNECTING);
|
||||||
bt_sco_chan_set_state(chan, BT_SCO_STATE_CONNECTING);
|
bt_sco_chan_set_state(chan, BT_SCO_STATE_CONNECTING);
|
||||||
|
|
||||||
if (sco_chan_connect_security(sco_conn, chan) != 0) {
|
|
||||||
bt_sco_cleanup(sco_conn);
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (chan->state == BT_SCO_STATE_ENCRYPT_PENDING) {
|
|
||||||
return sco_conn;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (sco_setup_sync_conn(sco_conn) < 0) {
|
if (sco_setup_sync_conn(sco_conn) < 0) {
|
||||||
bt_conn_set_state(chan->sco, BT_CONN_DISCONNECTED);
|
bt_conn_set_state(chan->sco, BT_CONN_DISCONNECTED);
|
||||||
bt_sco_chan_set_state(chan, BT_SCO_STATE_DISCONNECTED);
|
bt_sco_chan_set_state(chan, BT_SCO_STATE_DISCONNECTED);
|
||||||
|
|
@ -439,90 +403,3 @@ struct bt_conn *bt_conn_create_sco(const bt_addr_t *peer, struct bt_sco_chan *ch
|
||||||
|
|
||||||
return sco_conn;
|
return sco_conn;
|
||||||
}
|
}
|
||||||
|
|
||||||
struct sco_conns_scanning_data {
|
|
||||||
struct bt_conn *acl;
|
|
||||||
struct bt_conn *sco[CONFIG_BT_MAX_SCO_CONN];
|
|
||||||
};
|
|
||||||
|
|
||||||
static void sco_conns_scanning_cb(struct bt_conn *sco, void *user_data)
|
|
||||||
{
|
|
||||||
struct sco_conns_scanning_data *data;
|
|
||||||
struct bt_sco_chan *chan;
|
|
||||||
int i;
|
|
||||||
|
|
||||||
data = (struct sco_conns_scanning_data *)user_data;
|
|
||||||
|
|
||||||
if (sco->sco.acl != data->acl) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
chan = SCO_CHAN(sco);
|
|
||||||
if (chan->state != BT_SCO_STATE_ENCRYPT_PENDING) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
for (i = 0; i < CONFIG_BT_MAX_SCO_CONN; i++) {
|
|
||||||
if (data->sco[i] == NULL) {
|
|
||||||
data->sco[i] = sco;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
bt_sco_chan_set_state(chan, BT_SCO_STATE_DISCONNECTED);
|
|
||||||
}
|
|
||||||
|
|
||||||
void bt_sco_security_changed(struct bt_conn *acl, uint8_t hci_status)
|
|
||||||
{
|
|
||||||
struct sco_conns_scanning_data data;
|
|
||||||
struct bt_sco_chan *chan;
|
|
||||||
int err;
|
|
||||||
int i;
|
|
||||||
uint8_t hci_err;
|
|
||||||
|
|
||||||
/* The peripheral does not accept any SCO requests if security is
|
|
||||||
* insufficient, so we only need to handle central here.
|
|
||||||
* BT_SCO_STATE_ENCRYPT_PENDING is only set by the central.
|
|
||||||
*/
|
|
||||||
if (!IS_ENABLED(CONFIG_BT_CENTRAL) ||
|
|
||||||
acl->role != BT_CONN_ROLE_CENTRAL) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
(void)memset(&data, 0, sizeof(data));
|
|
||||||
|
|
||||||
bt_conn_foreach(BT_CONN_TYPE_SCO, sco_conns_scanning_cb, &data);
|
|
||||||
|
|
||||||
for (i = 0; i < CONFIG_BT_MAX_SCO_CONN; i++) {
|
|
||||||
struct bt_conn *sco;
|
|
||||||
|
|
||||||
sco = data.sco[i];
|
|
||||||
if (sco != NULL) {
|
|
||||||
chan = SCO_CHAN(sco);
|
|
||||||
hci_err = hci_status;
|
|
||||||
|
|
||||||
if (hci_status == BT_HCI_ERR_SUCCESS) {
|
|
||||||
err = sco_setup_sync_conn(sco);
|
|
||||||
if (err < 0) {
|
|
||||||
LOG_ERR("Failed to setup sync conn: %d", err);
|
|
||||||
bt_sco_cleanup(sco);
|
|
||||||
hci_err = BT_HCI_ERR_UNSPECIFIED;
|
|
||||||
} else {
|
|
||||||
/* Set connection states */
|
|
||||||
bt_sco_chan_set_state(chan, BT_SCO_STATE_CONNECTING);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (hci_err != BT_HCI_ERR_SUCCESS) {
|
|
||||||
LOG_DBG("Failed to encrypt ACL %p for SCO %p: %u", acl,
|
|
||||||
sco, hci_status);
|
|
||||||
|
|
||||||
/* Notify upper-layer that the SCO connection
|
|
||||||
* cannot be created due to the error.
|
|
||||||
*/
|
|
||||||
if (chan->ops->disconnected) {
|
|
||||||
chan->ops->disconnected(chan, hci_err);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
|
||||||
|
|
@ -53,16 +53,6 @@ struct bt_sco_chan {
|
||||||
struct bt_sco_chan_ops *ops;
|
struct bt_sco_chan_ops *ops;
|
||||||
|
|
||||||
enum bt_sco_state state;
|
enum bt_sco_state state;
|
||||||
|
|
||||||
/** @brief The required security level of the channel
|
|
||||||
*
|
|
||||||
* This value can be set as the central before calling bt_conn_create_sco().
|
|
||||||
* The value is overwritten to @ref bt_iso_server::sec_level for the
|
|
||||||
* peripheral once a channel has been accepted.
|
|
||||||
*
|
|
||||||
* Only available when @kconfig{CONFIG_BT_SMP} is enabled.
|
|
||||||
*/
|
|
||||||
bt_security_t required_sec_level;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
/** @brief Initiate an SCO connection to a remote device.
|
/** @brief Initiate an SCO connection to a remote device.
|
||||||
|
|
@ -149,12 +139,8 @@ void bt_sco_connected(struct bt_conn *sco);
|
||||||
*/
|
*/
|
||||||
void bt_sco_disconnected(struct bt_conn *sco);
|
void bt_sco_disconnected(struct bt_conn *sco);
|
||||||
|
|
||||||
/* Notify SCO connected channels of security changed */
|
|
||||||
void bt_sco_security_changed(struct bt_conn *acl, uint8_t hci_status);
|
|
||||||
|
|
||||||
uint8_t bt_esco_conn_req(struct bt_hci_evt_conn_request *evt);
|
uint8_t bt_esco_conn_req(struct bt_hci_evt_conn_request *evt);
|
||||||
|
|
||||||
|
|
||||||
#if defined(CONFIG_BT_CONN_LOG_LEVEL_DBG)
|
#if defined(CONFIG_BT_CONN_LOG_LEVEL_DBG)
|
||||||
void bt_sco_chan_set_state_debug(struct bt_sco_chan *chan,
|
void bt_sco_chan_set_state_debug(struct bt_sco_chan *chan,
|
||||||
enum bt_sco_state state,
|
enum bt_sco_state state,
|
||||||
|
|
|
||||||
|
|
@ -2325,10 +2325,6 @@ void bt_conn_security_changed(struct bt_conn *conn, uint8_t hci_err,
|
||||||
bt_iso_security_changed(conn, hci_err);
|
bt_iso_security_changed(conn, hci_err);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (IS_ENABLED(CONFIG_BT_CLASSIC)) {
|
|
||||||
bt_sco_security_changed(conn, hci_err);
|
|
||||||
}
|
|
||||||
|
|
||||||
for (struct bt_conn_cb *cb = callback_list; cb; cb = cb->_next) {
|
for (struct bt_conn_cb *cb = callback_list; cb; cb = cb->_next) {
|
||||||
if (cb->security_changed) {
|
if (cb->security_changed) {
|
||||||
cb->security_changed(conn, conn->sec_level, err);
|
cb->security_changed(conn, conn->sec_level, err);
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue