Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit f65ccb03 authored by Rahul Sabnis's avatar Rahul Sabnis
Browse files

Shows a consent dialog on the local device when pairing a bluetooth low

energy device if the local device has a display.

Tag: #security
Bug: 157038281
Test: Manual
Merged-In: I7de396230beb84bd0fa2b0cea346523b6824472a
Change-Id: I7de396230beb84bd0fa2b0cea346523b6824472a
parent 5cc2beaf
Loading
Loading
Loading
Loading
+10 −0
Original line number Diff line number Diff line
@@ -4055,6 +4055,16 @@ static uint8_t bta_dm_ble_smp_cback(tBTM_LE_EVT event, BD_ADDR bda,

      break;

    case BTM_LE_CONSENT_REQ_EVT:
      bdcpy(sec_event.ble_req.bd_addr, bda);
      p_name = BTM_SecReadDevName(bda);
      if (p_name != NULL)
        strlcpy((char*)sec_event.ble_req.bd_name, p_name, BD_NAME_LEN);
      else
        sec_event.ble_req.bd_name[0] = 0;
      bta_dm_cb.p_sec_cback(BTA_DM_BLE_CONSENT_REQ_EVT, &sec_event);
      break;

    case BTM_LE_SEC_REQUEST_EVT:
      bdcpy(sec_event.ble_req.bd_addr, bda);
      p_name = BTM_SecReadDevName(bda);
+1 −0
Original line number Diff line number Diff line
@@ -393,6 +393,7 @@ typedef uint8_t tBTA_SIG_STRENGTH_MASK;
                                    */
#define BTA_DM_ENER_INFO_READ 28 /* Energy info read */
#define BTA_DM_BLE_SC_OOB_REQ_EVT 29 /* SMP SC OOB request event */
#define BTA_DM_BLE_CONSENT_REQ_EVT 30 /* SMP consent request event */
typedef uint8_t tBTA_DM_SEC_EVT;

/* Structure associated with BTA_DM_ENABLE_EVT */
+1 −1
Original line number Diff line number Diff line
@@ -100,7 +100,7 @@ void btif_dm_get_ble_local_keys(tBTA_DM_BLE_LOCAL_KEY_MASK* p_key_mask,
                                tBTA_BLE_LOCAL_ID_KEYS* p_id_keys);
void btif_dm_save_ble_bonding_keys(bt_bdaddr_t bd_addr);
void btif_dm_remove_ble_bonding_keys(void);
void btif_dm_ble_sec_req_evt(tBTA_DM_BLE_SEC_REQ* p_ble_req);
void btif_dm_ble_sec_req_evt(tBTA_DM_BLE_SEC_REQ* p_ble_req, bool is_consent);

void btif_dm_update_ble_remote_properties(BD_ADDR bd_addr, BD_NAME bd_name,
                                          tBT_DEVICE_TYPE dev_type);
+7 −3
Original line number Diff line number Diff line
@@ -1818,9 +1818,13 @@ static void btif_dm_upstreams_evt(uint16_t event, char* p_param) {
          break;
      }
      break;
    case BTA_DM_BLE_CONSENT_REQ_EVT:
      BTIF_TRACE_DEBUG("BTA_DM_BLE_CONSENT_REQ_EVT. ");
      btif_dm_ble_sec_req_evt(&p_data->ble_req, true);
      break;
    case BTA_DM_BLE_SEC_REQ_EVT:
      BTIF_TRACE_DEBUG("BTA_DM_BLE_SEC_REQ_EVT. ");
      btif_dm_ble_sec_req_evt(&p_data->ble_req);
      btif_dm_ble_sec_req_evt(&p_data->ble_req, false);
      break;
    case BTA_DM_BLE_PASSKEY_NOTIF_EVT:
      BTIF_TRACE_DEBUG("BTA_DM_BLE_PASSKEY_NOTIF_EVT. ");
@@ -3062,7 +3066,7 @@ void btif_dm_remove_ble_bonding_keys(void) {
 * Returns          void
 *
 ******************************************************************************/
void btif_dm_ble_sec_req_evt(tBTA_DM_BLE_SEC_REQ* p_ble_req) {
void btif_dm_ble_sec_req_evt(tBTA_DM_BLE_SEC_REQ* p_ble_req, bool is_consent) {
  bt_bdaddr_t bd_addr;
  bt_bdname_t bd_name;
  uint32_t cod;
@@ -3070,7 +3074,7 @@ void btif_dm_ble_sec_req_evt(tBTA_DM_BLE_SEC_REQ* p_ble_req) {

  BTIF_TRACE_DEBUG("%s", __func__);

  if (pairing_cb.state == BT_BOND_STATE_BONDING) {
  if (!is_consent && pairing_cb.state == BT_BOND_STATE_BONDING) {
    BTIF_TRACE_DEBUG("%s Discard security request", __func__);
    return;
  }
+4 −1
Original line number Diff line number Diff line
@@ -1888,6 +1888,7 @@ uint8_t btm_proc_smp_cback(tSMP_EVT event, BD_ADDR bd_addr,
        /* fall through */
        p_dev_rec->sec_flags |= BTM_SEC_LE_AUTHENTICATED;

      case SMP_CONSENT_REQ_EVT:
      case SMP_SEC_REQUEST_EVT:
        if (event == SMP_SEC_REQUEST_EVT &&
            btm_cb.pairing_state != BTM_PAIR_STATE_IDLE) {
@@ -1895,7 +1896,9 @@ uint8_t btm_proc_smp_cback(tSMP_EVT event, BD_ADDR bd_addr,
          break;
        }
        memcpy(btm_cb.pairing_bda, bd_addr, BD_ADDR_LEN);
        if (event != SMP_CONSENT_REQ_EVT) {
          p_dev_rec->sec_state = BTM_SEC_STATE_AUTHENTICATING;
        }
        btm_cb.pairing_flags |= BTM_PAIR_FLAGS_LE_ACTIVE;
      /* fall through */

Loading