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

Commit ffb197c5 authored by Myles Watson's avatar Myles Watson
Browse files

Security: Move parsing to HCI: IO Cap Rsp

The security code should not have to parse packets.

Bug: 301661850
Test: mma -j32
Change-Id: Ib3f5b0deb4a011cce2c1e7fa27716b5330419045
parent a477ae45
Loading
Loading
Loading
Loading
+1 −11
Original line number Diff line number Diff line
@@ -2787,18 +2787,8 @@ void btm_io_capabilities_req(RawAddress p) {
 * Returns          void
 *
 ******************************************************************************/
void btm_io_capabilities_rsp(const uint8_t* p) {
void btm_io_capabilities_rsp(const tBTM_SP_IO_RSP evt_data) {
  tBTM_SEC_DEV_REC* p_dev_rec;
  tBTM_SP_IO_RSP evt_data;

  STREAM_TO_BDADDR(evt_data.bd_addr, p);

  uint8_t io_cap;
  STREAM_TO_UINT8(io_cap, p);
  evt_data.io_cap = static_cast<tBTM_IO_CAP>(io_cap);

  STREAM_TO_UINT8(evt_data.oob_data, p);
  STREAM_TO_UINT8(evt_data.auth_req, p);

  /* Allocate a new device record or reuse the oldest one */
  p_dev_rec = btm_find_or_alloc_dev(evt_data.bd_addr);
+1 −1
Original line number Diff line number Diff line
@@ -544,7 +544,7 @@ void btm_io_capabilities_req(RawAddress p);
 * Returns          void
 *
 ******************************************************************************/
void btm_io_capabilities_rsp(const uint8_t* p);
void btm_io_capabilities_rsp(const tBTM_SP_IO_RSP evt_data);

/*******************************************************************************
 *
+25 −1
Original line number Diff line number Diff line
@@ -100,6 +100,7 @@ static void btu_hcif_create_conn_cancel_complete(const uint8_t* p,

/* Simple Pairing Events */
static void btu_hcif_io_cap_request_evt(const uint8_t* p);
static void btu_hcif_io_cap_response_evt(const uint8_t* p);

static void btu_ble_ll_conn_param_upd_evt(uint8_t* p, uint16_t evt_len);
static void btu_ble_proc_ltk_req(uint8_t* p, uint16_t evt_len);
@@ -299,7 +300,7 @@ void btu_hcif_process_event(UNUSED_ATTR uint8_t controller_id,
      btu_hcif_io_cap_request_evt(p);
      break;
    case HCI_IO_CAPABILITY_RESPONSE_EVT:
      btm_io_capabilities_rsp(p);
      btu_hcif_io_cap_response_evt(p);
      break;
    case HCI_USER_CONFIRMATION_REQUEST_EVT:
      btm_proc_sp_req_evt(BTM_SP_CFM_REQ_EVT, p);
@@ -1500,6 +1501,29 @@ static void btu_hcif_io_cap_request_evt(const uint8_t* p) {
  btm_io_capabilities_req(bda);
}

/*******************************************************************************
 *
 * Function         btu_hcif_io_cap_request_evt
 *
 * Description      Process event HCI_IO_CAPABILITY_REQUEST_EVT
 *
 * Returns          void
 *
 ******************************************************************************/
static void btu_hcif_io_cap_response_evt(const uint8_t* p) {
  tBTM_SP_IO_RSP evt_data;

  STREAM_TO_BDADDR(evt_data.bd_addr, p);

  uint8_t io_cap;
  STREAM_TO_UINT8(io_cap, p);
  evt_data.io_cap = static_cast<tBTM_IO_CAP>(io_cap);

  STREAM_TO_UINT8(evt_data.oob_data, p);
  STREAM_TO_UINT8(evt_data.auth_req, p);
  btm_io_capabilities_rsp(evt_data);
}

/**********************************************
 * End of Simple Pairing Events
 **********************************************/
+1 −1
Original line number Diff line number Diff line
@@ -27,7 +27,7 @@

void btm_create_conn_cancel_complete(uint8_t status, const RawAddress bd_addr);
void btm_io_capabilities_req(RawAddress p);
void btm_io_capabilities_rsp(const uint8_t* p);
void btm_io_capabilities_rsp(const tBTM_SP_IO_RSP evt_data);
void btm_proc_sp_req_evt(tBTM_SP_EVT event, const uint8_t* p);
void btm_read_local_oob_complete(uint8_t* p, uint16_t evt_len);
void btm_rem_oob_req(const uint8_t* p);
+2 −2
Original line number Diff line number Diff line
@@ -308,9 +308,9 @@ void btm_io_capabilities_req(RawAddress p) {
  inc_func_call_count(__func__);
  test::mock::stack_btm_sec::btm_io_capabilities_req(p);
}
void btm_io_capabilities_rsp(const uint8_t* p) {
void btm_io_capabilities_rsp(const tBTM_SP_IO_RSP evt_data) {
  inc_func_call_count(__func__);
  test::mock::stack_btm_sec::btm_io_capabilities_rsp(p);
  test::mock::stack_btm_sec::btm_io_capabilities_rsp(evt_data);
}
void btm_proc_sp_req_evt(tBTM_SP_EVT event, const uint8_t* p) {
  inc_func_call_count(__func__);
Loading