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

Commit 830f5297 authored by Treehugger Robot's avatar Treehugger Robot Committed by Gerrit Code Review
Browse files

Merge "Explicitly initialize union'ed structures"

parents a4477ccb d11d3f68
Loading
Loading
Loading
Loading
+15 −10
Original line number Diff line number Diff line
@@ -1976,8 +1976,6 @@ static void bta_dm_pinname_cback(void* p_data) {
 ******************************************************************************/
static uint8_t bta_dm_pin_cback(const RawAddress& bd_addr, DEV_CLASS dev_class,
                                BD_NAME bd_name, bool min_16_digit) {
  tBTA_DM_SEC sec_event;

  if (!bta_dm_cb.p_sec_cback) return BTM_NOT_AUTHORIZED;

  /* If the device name is not known, save bdaddr and devclass and initiate a
@@ -1994,7 +1992,9 @@ static uint8_t bta_dm_pin_cback(const RawAddress& bd_addr, DEV_CLASS dev_class,
        " bta_dm_pin_cback() -> Failed to start Remote Name Request  ");
  }

  sec_event.pin_req.bd_addr = bd_addr;
  tBTA_DM_SEC sec_event = {.pin_req = {
                               .bd_addr = bd_addr,
                           }};
  BTA_COPY_DEVICE_CLASS(sec_event.pin_req.dev_class, dev_class);
  strlcpy((char*)sec_event.pin_req.bd_name, (char*)bd_name, BD_NAME_LEN + 1);
  sec_event.pin_req.min_16_digit = min_16_digit;
@@ -3524,16 +3524,17 @@ static uint8_t bta_dm_ble_smp_cback(tBTM_LE_EVT event, const RawAddress& bda,
 ******************************************************************************/
static void bta_dm_ble_id_key_cback(uint8_t key_type,
                                    tBTM_BLE_LOCAL_KEYS* p_key) {
  uint8_t evt;
  tBTA_DM_SEC dm_key;

  switch (key_type) {
    case BTM_BLE_KEY_TYPE_ID:
    case BTM_BLE_KEY_TYPE_ER:
      if (bta_dm_cb.p_sec_cback) {
        tBTA_DM_SEC dm_key = {
            .ble_id_keys{},
        };
        memcpy(&dm_key.ble_id_keys, p_key, sizeof(tBTM_BLE_LOCAL_KEYS));

        evt = (key_type == BTM_BLE_KEY_TYPE_ID) ? BTA_DM_BLE_LOCAL_IR_EVT
        uint8_t evt = (key_type == BTM_BLE_KEY_TYPE_ID)
                          ? BTA_DM_BLE_LOCAL_IR_EVT
                          : BTA_DM_BLE_LOCAL_ER_EVT;
        bta_dm_cb.p_sec_cback(evt, &dm_key);
      }
@@ -3650,10 +3651,14 @@ void bta_dm_ble_observe(bool start, uint8_t duration,
  tBTM_STATUS status = BTM_BleObserve(true, duration, bta_dm_observe_results_cb,
                                      bta_dm_observe_cmpl_cb);
  if (status != BTM_CMD_STARTED) {
    tBTA_DM_SEARCH data;
    APPL_TRACE_WARNING(" %s BTM_BleObserve  failed. status %d", __func__,
                       status);
    data.inq_cmpl.num_resps = 0;
    tBTA_DM_SEARCH data = {
        .inq_cmpl =
            {
                .num_resps = 0,
            },
    };
    if (bta_dm_search_cb.p_scan_cback) {
      bta_dm_search_cb.p_scan_cback(BTA_DM_INQ_CMPL_EVT, &data);
    }
+32 −16
Original line number Diff line number Diff line
@@ -355,7 +355,6 @@ void smp_send_keypress_notification(tSMP_CB* p_cb, tSMP_INT_DATA* p_data) {
 * Description  send encryption information command.
 ******************************************************************************/
void smp_send_enc_info(tSMP_CB* p_cb, tSMP_INT_DATA* p_data) {
  tBTM_LE_KEY_VALUE le_key;

  SMP_TRACE_DEBUG("%s: p_cb->loc_enc_size = %d", __func__, p_cb->loc_enc_size);
  smp_update_key_mask(p_cb, SMP_SEC_KEY_TYPE_ENC, false);
@@ -364,10 +363,15 @@ void smp_send_enc_info(tSMP_CB* p_cb, tSMP_INT_DATA* p_data) {
  smp_send_cmd(SMP_OPCODE_CENTRAL_ID, p_cb);

  /* save the DIV and key size information when acting as peripheral device */
  le_key.lenc_key.ltk = p_cb->ltk;
  le_key.lenc_key.div = p_cb->div;
  le_key.lenc_key.key_size = p_cb->loc_enc_size;
  le_key.lenc_key.sec_level = p_cb->sec_level;
  tBTM_LE_KEY_VALUE le_key = {
      .lenc_key =
          {
              .ltk = p_cb->ltk,
              .div = p_cb->div,
              .key_size = p_cb->loc_enc_size,
              .sec_level = p_cb->sec_level,
          },
  };

  if ((p_cb->peer_auth_req & SMP_AUTH_BOND) &&
      (p_cb->loc_auth_req & SMP_AUTH_BOND))
@@ -383,7 +387,6 @@ void smp_send_enc_info(tSMP_CB* p_cb, tSMP_INT_DATA* p_data) {
 * Description  send ID information command.
 ******************************************************************************/
void smp_send_id_info(tSMP_CB* p_cb, tSMP_INT_DATA* p_data) {
  tBTM_LE_KEY_VALUE le_key;
  SMP_TRACE_DEBUG("%s", __func__);
  smp_update_key_mask(p_cb, SMP_SEC_KEY_TYPE_ID, false);

@@ -392,22 +395,26 @@ void smp_send_id_info(tSMP_CB* p_cb, tSMP_INT_DATA* p_data) {

  if ((p_cb->peer_auth_req & SMP_AUTH_BOND) &&
      (p_cb->loc_auth_req & SMP_AUTH_BOND))
    btm_sec_save_le_key(p_cb->pairing_bda, BTM_LE_KEY_LID, &le_key, true);
    btm_sec_save_le_key(p_cb->pairing_bda, BTM_LE_KEY_LID, nullptr, true);

  smp_key_distribution_by_transport(p_cb, NULL);
}

/**  send CSRK command. */
void smp_send_csrk_info(tSMP_CB* p_cb, tSMP_INT_DATA* p_data) {
  tBTM_LE_KEY_VALUE key;
  SMP_TRACE_DEBUG("%s", __func__);
  smp_update_key_mask(p_cb, SMP_SEC_KEY_TYPE_CSRK, false);

  if (smp_send_cmd(SMP_OPCODE_SIGN_INFO, p_cb)) {
    key.lcsrk_key.div = p_cb->div;
    key.lcsrk_key.sec_level = p_cb->sec_level;
    key.lcsrk_key.counter = 0; /* initialize the local counter */
    key.lcsrk_key.csrk = p_cb->csrk;
    tBTM_LE_KEY_VALUE key = {
        .lcsrk_key =
            {
                .div = p_cb->div,
                .sec_level = p_cb->sec_level,
                .counter = 0, /* initialize the local counter */
                .csrk = p_cb->csrk,
            },
    };
    btm_sec_save_le_key(p_cb->pairing_bda, BTM_LE_KEY_LCSRK, &key, true);
  }

@@ -973,7 +980,6 @@ void smp_proc_enc_info(tSMP_CB* p_cb, tSMP_INT_DATA* p_data) {
/** process central ID from peripheral device */
void smp_proc_central_id(tSMP_CB* p_cb, tSMP_INT_DATA* p_data) {
  uint8_t* p = p_data->p_data;
  tBTM_LE_KEY_VALUE le_key;

  SMP_TRACE_DEBUG("%s", __func__);

@@ -986,6 +992,9 @@ void smp_proc_central_id(tSMP_CB* p_cb, tSMP_INT_DATA* p_data) {

  smp_update_key_mask(p_cb, SMP_SEC_KEY_TYPE_ENC, true);

  tBTM_LE_KEY_VALUE le_key = {
      .penc_key = {},
  };
  STREAM_TO_UINT16(le_key.penc_key.ediv, p);
  STREAM_TO_ARRAY(le_key.penc_key.rand, p, BT_OCTET8_LEN);

@@ -1022,7 +1031,6 @@ void smp_proc_id_info(tSMP_CB* p_cb, tSMP_INT_DATA* p_data) {
/** process identity address from peer device */
void smp_proc_id_addr(tSMP_CB* p_cb, tSMP_INT_DATA* p_data) {
  uint8_t* p = p_data->p_data;
  tBTM_LE_KEY_VALUE pid_key;

  SMP_TRACE_DEBUG("%s", __func__);

@@ -1036,6 +1044,10 @@ void smp_proc_id_addr(tSMP_CB* p_cb, tSMP_INT_DATA* p_data) {

  smp_update_key_mask(p_cb, SMP_SEC_KEY_TYPE_ID, true);

  tBTM_LE_KEY_VALUE pid_key = {
      .pid_key = {},
  };
  ;
  STREAM_TO_UINT8(pid_key.pid_key.identity_addr_type, p);
  STREAM_TO_BDADDR(pid_key.pid_key.identity_addr, p);
  pid_key.pid_key.irk = p_cb->tk;
@@ -1054,7 +1066,6 @@ void smp_proc_id_addr(tSMP_CB* p_cb, tSMP_INT_DATA* p_data) {

/* process security information from peer device */
void smp_proc_srk_info(tSMP_CB* p_cb, tSMP_INT_DATA* p_data) {
  tBTM_LE_KEY_VALUE le_key;

  SMP_TRACE_DEBUG("%s", __func__);

@@ -1069,7 +1080,12 @@ void smp_proc_srk_info(tSMP_CB* p_cb, tSMP_INT_DATA* p_data) {
  smp_update_key_mask(p_cb, SMP_SEC_KEY_TYPE_CSRK, true);

  /* save CSRK to security record */
  le_key.pcsrk_key.sec_level = p_cb->sec_level;
  tBTM_LE_KEY_VALUE le_key = {
      .pcsrk_key =
          {
              .sec_level = p_cb->sec_level,
          },
  };

  /* get peer CSRK */
  maybe_non_aligned_memcpy(le_key.pcsrk_key.csrk.data(), p_data->p_data,
+3 −2
Original line number Diff line number Diff line
@@ -88,8 +88,9 @@ void smp_proc_passkey(tSMP_CB* p_cb, BT_OCTET8 rand) {
  UINT32_TO_STREAM(tt, passkey);

  if (p_cb->p_callback) {
    tSMP_EVT_DATA smp_evt_data;
    smp_evt_data.passkey = passkey;
    tSMP_EVT_DATA smp_evt_data = {
        .passkey = passkey,
    };
    (*p_cb->p_callback)(SMP_PASSKEY_NOTIF_EVT, p_cb->pairing_bda,
                        &smp_evt_data);
  }
+18 −10
Original line number Diff line number Diff line
@@ -1463,22 +1463,30 @@ bool smp_check_commitment(tSMP_CB* p_cb) {
 *
 ******************************************************************************/
void smp_save_secure_connections_long_term_key(tSMP_CB* p_cb) {
  tBTM_LE_KEY_VALUE lle_key;
  tBTM_LE_KEY_VALUE ple_key;

  SMP_TRACE_DEBUG("%s-Save LTK as local LTK key", __func__);
  lle_key.lenc_key.ltk = p_cb->ltk;
  lle_key.lenc_key.div = 0;
  lle_key.lenc_key.key_size = p_cb->loc_enc_size;
  lle_key.lenc_key.sec_level = p_cb->sec_level;
  tBTM_LE_KEY_VALUE lle_key = {
      .lenc_key =
          {
              .ltk = p_cb->ltk,
              .div = 0,
              .key_size = p_cb->loc_enc_size,
              .sec_level = p_cb->sec_level,
          },
  };
  btm_sec_save_le_key(p_cb->pairing_bda, BTM_LE_KEY_LENC, &lle_key, true);

  SMP_TRACE_DEBUG("%s-Save LTK as peer LTK key", __func__);
  ple_key.penc_key.ediv = 0;
  tBTM_LE_KEY_VALUE ple_key = {
      .penc_key =
          {
              .ltk = p_cb->ltk,
              .sec_level = p_cb->sec_level,
              .key_size = p_cb->loc_enc_size,
              .ediv = 0,
          },
  };
  memset(ple_key.penc_key.rand, 0, BT_OCTET8_LEN);
  ple_key.penc_key.ltk = p_cb->ltk;
  ple_key.penc_key.sec_level = p_cb->sec_level;
  ple_key.penc_key.key_size = p_cb->loc_enc_size;
  btm_sec_save_le_key(p_cb->pairing_bda, BTM_LE_KEY_PENC, &ple_key, true);
}