• R/O
  • HTTP
  • SSH
  • HTTPS

Commit

Tags
No Tags

Frequently used words (click to add to your profile)

javac++androidlinuxc#windowsobjective-ccocoa誰得qtpythonphprubygameguibathyscaphec計画中(planning stage)翻訳omegatframeworktwitterdomtestvb.netdirectxゲームエンジンbtronarduinopreviewer

system/bt


Commit MetaInfo

Revision771973450c41b71b6fc590f17d00b1edcd5fcde6 (tree)
Time2020-01-20 19:51:15
AuthorChih-Wei Huang <cwhuang@linu...>
CommiterChih-Wei Huang

Log Message

Android 9.0.0 release 52
-----BEGIN PGP SIGNATURE-----

iF0EABECAB0WIQRDQNE1cO+UXoOBCWTorT+BmrEOeAUCXhOwsgAKCRDorT+BmrEO
eDoxAJ44V2t/Tt+GwLDRNqBNt2BJqppEnQCfZ26WzmibtVcI0EdiML9JFs3DnZI=
=LQYB
-----END PGP SIGNATURE-----

Merge tag 'android-9.0.0_r52' into pie-x86

Android 9.0.0 release 52

Change Summary

Incremental Difference

--- a/bta/av/bta_av_aact.cc
+++ b/bta/av/bta_av_aact.cc
@@ -3057,14 +3057,14 @@ void bta_av_open_at_inc(tBTA_AV_SCB* p_scb, tBTA_AV_DATA* p_data) {
30573057 }
30583058
30593059 void offload_vendor_callback(tBTM_VSC_CMPL* param) {
3060- uint8_t status = 0;
3060+ tBTA_AV value{0};
30613061 uint8_t sub_opcode = 0;
30623062 if (param->param_len) {
30633063 APPL_TRACE_DEBUG("%s: param_len = %d status = %d", __func__,
30643064 param->param_len, param->p_param_buf[0]);
3065- status = param->p_param_buf[0];
3065+ value.status = param->p_param_buf[0];
30663066 }
3067- if (status == 0) {
3067+ if (value.status == 0) {
30683068 sub_opcode = param->p_param_buf[1];
30693069 APPL_TRACE_DEBUG("%s: subopcode = %d", __func__, sub_opcode);
30703070 switch (sub_opcode) {
@@ -3072,7 +3072,7 @@ void offload_vendor_callback(tBTM_VSC_CMPL* param) {
30723072 APPL_TRACE_DEBUG("%s: VS_HCI_STOP_A2DP_MEDIA successful", __func__);
30733073 break;
30743074 case VS_HCI_A2DP_OFFLOAD_START:
3075- (*bta_av_cb.p_cback)(BTA_AV_OFFLOAD_START_RSP_EVT, (tBTA_AV*)&status);
3075+ (*bta_av_cb.p_cback)(BTA_AV_OFFLOAD_START_RSP_EVT, &value);
30763076 break;
30773077 default:
30783078 break;
@@ -3081,7 +3081,7 @@ void offload_vendor_callback(tBTM_VSC_CMPL* param) {
30813081 APPL_TRACE_DEBUG("%s: Offload failed for subopcode= %d", __func__,
30823082 sub_opcode);
30833083 if (param->opcode != VS_HCI_A2DP_OFFLOAD_STOP)
3084- (*bta_av_cb.p_cback)(BTA_AV_OFFLOAD_START_RSP_EVT, (tBTA_AV*)&status);
3084+ (*bta_av_cb.p_cback)(BTA_AV_OFFLOAD_START_RSP_EVT, &value);
30853085 }
30863086 }
30873087
--- a/btcore/src/device_class.cc
+++ b/btcore/src/device_class.cc
@@ -88,7 +88,9 @@ void device_class_from_int(bt_device_class_t* dc, int data) {
8888 int device_class_to_int(const bt_device_class_t* dc) {
8989 CHECK(dc != NULL);
9090 // Careful with endianess.
91- return (int)(le32toh(*(int*)dc) & 0xffffff);
91+ int val = 0;
92+ memcpy(&val, dc, sizeof(*dc));
93+ return static_cast<int>(le32toh(val) & 0xffffff);
9294 }
9395
9496 bool device_class_equals(const bt_device_class_t* p1,
--- a/btcore/test/device_class_test.cc
+++ b/btcore/test/device_class_test.cc
@@ -22,9 +22,6 @@
2222
2323 #include "btcore/include/device_class.h"
2424
25-// Device Class is 3 bytes.
26-static const int DC_MASK = 0xffffff;
27-
2825 ::testing::AssertionResult check_bitfield(const char* m_expr,
2926 const char* n_expr, int m, int n) {
3027 if (m == n) return ::testing::AssertionSuccess();
@@ -84,8 +81,9 @@ TEST_F(DeviceClassTest, to_stream) {
8481 int rc = device_class_to_stream(&dc, dc_stream1, sizeof(dc_stream1));
8582 EXPECT_EQ(3, rc);
8683
87- uint32_t* val = (uint32_t*)&dc;
88- EXPECT_PRED_FORMAT2(check_bitfield, 0x00000000, *val & 0xffffff);
84+ uint32_t val = 0;
85+ memcpy(&val, &dc, sizeof(dc));
86+ EXPECT_PRED_FORMAT2(check_bitfield, 0x00000000, val);
8987
9088 EXPECT_PRED_FORMAT2(check_bitfield, 0x00, dc_stream1[0]);
9189 EXPECT_PRED_FORMAT2(check_bitfield, 0x00, dc_stream1[1]);
@@ -101,8 +99,9 @@ TEST_F(DeviceClassTest, to_stream) {
10199
102100 int rc = device_class_to_stream(&dc, dc_stream1, sizeof(dc_stream1));
103101 EXPECT_EQ(3, rc);
104- uint32_t* val = (uint32_t*)&dc;
105- EXPECT_PRED_FORMAT2(check_bitfield, 0x00aa55aa, *val & 0xffffff);
102+ uint32_t val = 0;
103+ memcpy(&val, &dc, sizeof(dc));
104+ EXPECT_PRED_FORMAT2(check_bitfield, 0x00aa55aa, val);
106105
107106 EXPECT_PRED_FORMAT2(check_bitfield, 0xaa, dc_stream1[0]);
108107 EXPECT_PRED_FORMAT2(check_bitfield, 0x55, dc_stream1[1]);
@@ -118,8 +117,9 @@ TEST_F(DeviceClassTest, to_stream) {
118117
119118 int rc = device_class_to_stream(&dc, dc_stream1, sizeof(dc_stream1));
120119 EXPECT_EQ(3, rc);
121- uint32_t* val = (uint32_t*)&dc;
122- EXPECT_PRED_FORMAT2(check_bitfield, 0x452301, *val & 0xffffff);
120+ uint32_t val = 0;
121+ memcpy(&val, &dc, sizeof(dc));
122+ EXPECT_PRED_FORMAT2(check_bitfield, 0x452301, val);
123123
124124 EXPECT_PRED_FORMAT2(check_bitfield, 0x01, dc_stream1[0]);
125125 EXPECT_PRED_FORMAT2(check_bitfield, 0x23, dc_stream1[1]);
@@ -131,24 +131,33 @@ TEST_F(DeviceClassTest, limited_discoverable_mode) {
131131 uint8_t dc_stream[] = {0x00, 0x00, 0x00};
132132 bt_device_class_t dc;
133133 device_class_from_stream(&dc, dc_stream);
134- uint32_t* test = (uint32_t*)&dc;
134+ uint32_t test = 0;
135+ memcpy(&test, &dc, sizeof(dc));
135136
136137 EXPECT_FALSE(device_class_get_limited(&dc));
137- EXPECT_EQ((unsigned)0x00000000, *test & DC_MASK);
138+ EXPECT_EQ((unsigned)0x00000000, test);
138139
139140 device_class_set_limited(&dc, true);
141+ test = 0;
142+ memcpy(&test, &dc, sizeof(dc));
140143 EXPECT_TRUE(device_class_get_limited(&dc));
141- EXPECT_EQ((unsigned)0x00002000, *test & DC_MASK);
144+ EXPECT_EQ((unsigned)0x00002000, test);
142145
143146 device_class_set_limited(&dc, false);
147+ test = 0;
148+ memcpy(&test, &dc, sizeof(dc));
144149 EXPECT_FALSE(device_class_get_limited(&dc));
145- EXPECT_EQ((unsigned)0x00000000, *test & DC_MASK);
150+ EXPECT_EQ((unsigned)0x00000000, test);
146151
147152 device_class_set_limited(&dc, true);
148- EXPECT_PRED_FORMAT2(check_bitfield, 0x00002000, *test & DC_MASK);
153+ test = 0;
154+ memcpy(&test, &dc, sizeof(dc));
155+ EXPECT_PRED_FORMAT2(check_bitfield, 0x00002000, test);
149156
150157 device_class_set_limited(&dc, false);
151- EXPECT_PRED_FORMAT2(check_bitfield, 0x00000000, *test & DC_MASK);
158+ test = 0;
159+ memcpy(&test, &dc, sizeof(dc));
160+ EXPECT_PRED_FORMAT2(check_bitfield, 0x00000000, test);
152161 }
153162
154163 TEST_F(DeviceClassTest, equals) {
--- a/btif/src/btif_dm.cc
+++ b/btif/src/btif_dm.cc
@@ -965,21 +965,12 @@ static void btif_dm_ssp_cfm_req_evt(tBTA_DM_SP_CFM_REQ* p_ssp_cfm_req) {
965965
966966 /* If JustWorks auto-accept */
967967 if (p_ssp_cfm_req->just_works) {
968- /* Pairing consent for JustWorks needed if:
969- * 1. Incoming (non-temporary) pairing is detected AND
970- * 2. local IO capabilities are DisplayYesNo AND
971- * 3. remote IO capabiltiies are DisplayOnly or NoInputNoOutput;
968+ /* Pairing consent for JustWorks NOT needed if:
969+ * 1. Incoming temporary pairing is detected
972970 */
973- if (is_incoming && pairing_cb.bond_type != BOND_TYPE_TEMPORARY &&
974- ((p_ssp_cfm_req->loc_io_caps == HCI_IO_CAP_DISPLAY_YESNO) &&
975- (p_ssp_cfm_req->rmt_io_caps == HCI_IO_CAP_DISPLAY_ONLY ||
976- p_ssp_cfm_req->rmt_io_caps == HCI_IO_CAP_NO_IO))) {
971+ if (is_incoming && pairing_cb.bond_type == BOND_TYPE_TEMPORARY) {
977972 BTIF_TRACE_EVENT(
978- "%s: User consent needed for incoming pairing request. loc_io_caps: "
979- "%d, rmt_io_caps: %d",
980- __func__, p_ssp_cfm_req->loc_io_caps, p_ssp_cfm_req->rmt_io_caps);
981- } else {
982- BTIF_TRACE_EVENT("%s: Auto-accept JustWorks pairing", __func__);
973+ "%s: Auto-accept JustWorks pairing for temporary incoming", __func__);
983974 btif_dm_ssp_reply(&bd_addr, BT_SSP_VARIANT_CONSENT, true, 0);
984975 return;
985976 }
--- a/service/low_energy_client.cc
+++ b/service/low_energy_client.cc
@@ -188,8 +188,8 @@ void LowEnergyClient::MtuChangedCallback(
188188
189189 if (!bda) return;
190190
191- const char* addr = BtAddrString(bda).c_str();
192- if (delegate_) delegate_->OnMtuChanged(this, status, addr, mtu);
191+ std::string addr = BtAddrString(bda);
192+ if (delegate_) delegate_->OnMtuChanged(this, status, addr.c_str(), mtu);
193193 }
194194
195195 // LowEnergyClientFactory implementation
--- a/stack/sdp/sdp_discovery.cc
+++ b/stack/sdp/sdp_discovery.cc
@@ -341,11 +341,13 @@ static void process_service_search_rsp(tCONN_CB* p_ccb, uint8_t* p_reply,
341341 * Description copy the raw data
342342 *
343343 *
344- * Returns void
344+ * Returns bool
345+ * true if successful
346+ * false if not copied
345347 *
346348 ******************************************************************************/
347349 #if (SDP_RAW_DATA_INCLUDED == TRUE)
348-static void sdp_copy_raw_data(tCONN_CB* p_ccb, bool offset) {
350+static bool sdp_copy_raw_data(tCONN_CB* p_ccb, bool offset) {
349351 unsigned int cpy_len, rem_len;
350352 uint32_t list_len;
351353 uint8_t* p;
@@ -376,11 +378,11 @@ static void sdp_copy_raw_data(tCONN_CB* p_ccb, bool offset) {
376378 p = sdpu_get_len_from_type(p, p_end, type, &list_len);
377379 if (p == NULL || (p + list_len) > p_end) {
378380 SDP_TRACE_WARNING("%s: bad length", __func__);
379- return;
381+ return false;
380382 }
381383 if ((int)cpy_len < (p - old_p)) {
382384 SDP_TRACE_WARNING("%s: no bytes left for data", __func__);
383- return;
385+ return false;
384386 }
385387 cpy_len -= (p - old_p);
386388 }
@@ -400,6 +402,7 @@ static void sdp_copy_raw_data(tCONN_CB* p_ccb, bool offset) {
400402 memcpy(&p_ccb->p_db->raw_data[p_ccb->p_db->raw_used], p, cpy_len);
401403 p_ccb->p_db->raw_used += cpy_len;
402404 }
405+ return true;
403406 }
404407 #endif
405408
@@ -468,7 +471,11 @@ static void process_service_attr_rsp(tCONN_CB* p_ccb, uint8_t* p_reply,
468471 } else {
469472 #if (SDP_RAW_DATA_INCLUDED == TRUE)
470473 SDP_TRACE_WARNING("process_service_attr_rsp");
471- sdp_copy_raw_data(p_ccb, false);
474+ if (!sdp_copy_raw_data(p_ccb, false)) {
475+ SDP_TRACE_ERROR("sdp_copy_raw_data failed");
476+ sdp_disconnect(p_ccb, SDP_ILLEGAL_PARAMETER);
477+ }
478+
472479 #endif
473480
474481 /* Save the response in the database. Stop on any error */
@@ -693,7 +700,10 @@ static void process_service_search_attr_rsp(tCONN_CB* p_ccb, uint8_t* p_reply,
693700
694701 #if (SDP_RAW_DATA_INCLUDED == TRUE)
695702 SDP_TRACE_WARNING("process_service_search_attr_rsp");
696- sdp_copy_raw_data(p_ccb, true);
703+ if (!sdp_copy_raw_data(p_ccb, true)) {
704+ SDP_TRACE_ERROR("sdp_copy_raw_data failed");
705+ sdp_disconnect(p_ccb, SDP_ILLEGAL_PARAMETER);
706+ }
697707 #endif
698708
699709 p = &p_ccb->rsp_list[0];
@@ -708,6 +718,7 @@ static void process_service_search_attr_rsp(tCONN_CB* p_ccb, uint8_t* p_reply,
708718 p = sdpu_get_len_from_type(p, p + p_ccb->list_len, type, &seq_len);
709719 if (p == NULL || (p + seq_len) > (p + p_ccb->list_len)) {
710720 SDP_TRACE_WARNING("%s: bad length", __func__);
721+ sdp_disconnect(p_ccb, SDP_ILLEGAL_PARAMETER);
711722 return;
712723 }
713724 p_end = &p_ccb->rsp_list[p_ccb->list_len];