From 247c64ee940b88cb7c14c857cb8630b8f3f1a979 Mon Sep 17 00:00:00 2001 From: Adam Seaton Date: Fri, 22 Nov 2019 18:46:38 +0000 Subject: [PATCH] Revert "Fix potential OOB write in btm_read_remote_ext_features_complete" This reverts commit efcedeb60ea270cf6be228a88da4cf3bad65975c. Reason for revert: reverting from release branches due to functional regressions in Auto. Bug: 144205318 Change-Id: I80d7fb4f910e6c5c88668141e83ca48401151496 --- stack/btm/btm_acl.cc | 17 +---------------- stack/btm/btm_int.h | 2 +- stack/btu/btu_hcif.cc | 10 ++++------ stack/include/hcidefs.h | 2 -- 4 files changed, 6 insertions(+), 25 deletions(-) diff --git a/stack/btm/btm_acl.cc b/stack/btm/btm_acl.cc index c5f4176df..dcb2fb4d9 100644 --- a/stack/btm/btm_acl.cc +++ b/stack/btm/btm_acl.cc @@ -1084,7 +1084,7 @@ void btm_read_remote_features_complete(uint8_t* p) { * Returns void * ******************************************************************************/ -void btm_read_remote_ext_features_complete(uint8_t* p, uint8_t evt_len) { +void btm_read_remote_ext_features_complete(uint8_t* p) { tACL_CONN* p_acl_cb; uint8_t page_num, max_page; uint16_t handle; @@ -1092,14 +1092,6 @@ void btm_read_remote_ext_features_complete(uint8_t* p, uint8_t evt_len) { BTM_TRACE_DEBUG("btm_read_remote_ext_features_complete"); - if (evt_len < HCI_EXT_FEATURES_SUCCESS_EVT_LEN) { - android_errorWriteLog(0x534e4554, "141552859"); - BTM_TRACE_ERROR( - "btm_read_remote_ext_features_complete evt length too short. length=%d", - evt_len); - return; - } - ++p; STREAM_TO_UINT16(handle, p); STREAM_TO_UINT8(page_num, p); @@ -1119,13 +1111,6 @@ void btm_read_remote_ext_features_complete(uint8_t* p, uint8_t evt_len) { return; } - if (page_num > max_page) { - android_errorWriteLog(0x534e4554, "141552859"); - BTM_TRACE_ERROR("btm_read_remote_ext_features_complete num_page=%d invalid", - page_num); - return; - } - p_acl_cb = &btm_cb.acl_db[acl_idx]; /* Copy the received features page */ diff --git a/stack/btm/btm_int.h b/stack/btm/btm_int.h index ee1d6554a..6b80717c0 100644 --- a/stack/btm/btm_int.h +++ b/stack/btm/btm_int.h @@ -119,7 +119,7 @@ extern uint16_t btm_get_acl_disc_reason_code(void); extern tBTM_STATUS btm_remove_acl(const RawAddress& bd_addr, tBT_TRANSPORT transport); extern void btm_read_remote_features_complete(uint8_t* p); -extern void btm_read_remote_ext_features_complete(uint8_t* p, uint8_t evt_len); +extern void btm_read_remote_ext_features_complete(uint8_t* p); extern void btm_read_remote_ext_features_failed(uint8_t status, uint16_t handle); extern void btm_read_remote_version_complete(uint8_t* p); diff --git a/stack/btu/btu_hcif.cc b/stack/btu/btu_hcif.cc index c70448e81..461242297 100644 --- a/stack/btu/btu_hcif.cc +++ b/stack/btu/btu_hcif.cc @@ -75,8 +75,7 @@ static void btu_hcif_authentication_comp_evt(uint8_t* p); static void btu_hcif_rmt_name_request_comp_evt(uint8_t* p, uint16_t evt_len); static void btu_hcif_encryption_change_evt(uint8_t* p); static void btu_hcif_read_rmt_features_comp_evt(uint8_t* p); -static void btu_hcif_read_rmt_ext_features_comp_evt(uint8_t* p, - uint8_t evt_len); +static void btu_hcif_read_rmt_ext_features_comp_evt(uint8_t* p); static void btu_hcif_read_rmt_version_comp_evt(uint8_t* p); static void btu_hcif_qos_setup_comp_evt(uint8_t* p); static void btu_hcif_command_complete_evt(BT_HDR* response, void* context); @@ -296,7 +295,7 @@ void btu_hcif_process_event(UNUSED_ATTR uint8_t controller_id, BT_HDR* p_msg) { btu_hcif_read_rmt_features_comp_evt(p); break; case HCI_READ_RMT_EXT_FEATURES_COMP_EVT: - btu_hcif_read_rmt_ext_features_comp_evt(p, hci_evt_len); + btu_hcif_read_rmt_ext_features_comp_evt(p); break; case HCI_READ_RMT_VERSION_COMP_EVT: btu_hcif_read_rmt_version_comp_evt(p); @@ -1212,8 +1211,7 @@ static void btu_hcif_read_rmt_features_comp_evt(uint8_t* p) { * Returns void * ******************************************************************************/ -static void btu_hcif_read_rmt_ext_features_comp_evt(uint8_t* p, - uint8_t evt_len) { +static void btu_hcif_read_rmt_ext_features_comp_evt(uint8_t* p) { uint8_t* p_cur = p; uint8_t status; uint16_t handle; @@ -1221,7 +1219,7 @@ static void btu_hcif_read_rmt_ext_features_comp_evt(uint8_t* p, STREAM_TO_UINT8(status, p_cur); if (status == HCI_SUCCESS) - btm_read_remote_ext_features_complete(p, evt_len); + btm_read_remote_ext_features_complete(p); else { STREAM_TO_UINT16(handle, p_cur); btm_read_remote_ext_features_failed(status, handle); diff --git a/stack/include/hcidefs.h b/stack/include/hcidefs.h index b11ea6cd5..ef87b5b61 100644 --- a/stack/include/hcidefs.h +++ b/stack/include/hcidefs.h @@ -1323,8 +1323,6 @@ typedef struct { #define HCI_FEATURE_BYTES_PER_PAGE 8 -#define HCI_EXT_FEATURES_SUCCESS_EVT_LEN 13 - #define HCI_FEATURES_KNOWN(x) \ (((x)[0] | (x)[1] | (x)[2] | (x)[3] | (x)[4] | (x)[5] | (x)[6] | (x)[7]) != 0) -- 2.11.0