aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMyles Watson <mylesgw@google.com>2020-10-29 13:05:21 -0700
committerandroid-build-team Robot <android-build-team-robot@google.com>2020-11-18 22:51:50 +0000
commit35fad6ff76f5bc4079b8e1cbee7bddae3e349222 (patch)
treeec1db008f1638fc2321a05343df588222314d6a7
parent87c6f2c1cbd191efd18d985c791d8feaa9794cee (diff)
downloadbt-35fad6ff76f5bc4079b8e1cbee7bddae3e349222.tar.gz
ACL: Drop broadcasts
Bug: 169327567 Test: compiles Tag: #security Change-Id: Id4231fd7a142d630a2ada0f41a90e01afc011045 Merged-In: Id4231fd7a142d630a2ada0f41a90e01afc011045 (cherry picked from commit 83c32e8e8c0c27333779c64b74473cad86670265)
-rw-r--r--hci/src/packet_fragmenter.cc10
1 files changed, 10 insertions, 0 deletions
diff --git a/hci/src/packet_fragmenter.cc b/hci/src/packet_fragmenter.cc
index ebd9c3ada..4c235aee0 100644
--- a/hci/src/packet_fragmenter.cc
+++ b/hci/src/packet_fragmenter.cc
@@ -35,10 +35,12 @@
#define APPLY_START_FLAG(handle) (((handle)&0xCFFF) | 0x2000)
#define SUB_EVENT(event) ((event)&MSG_SUB_EVT_MASK)
#define GET_BOUNDARY_FLAG(handle) (((handle) >> 12) & 0x0003)
+#define GET_BROADCAST_FLAG(handle) (((handle) >> 14) & 0x0003)
#define HANDLE_MASK 0x0FFF
#define START_PACKET_BOUNDARY 2
#define CONTINUATION_PACKET_BOUNDARY 1
+#define POINT_TO_POINT 0
#define L2CAP_HEADER_PDU_LEN_SIZE 2
#define L2CAP_HEADER_CID_SIZE 2
#define L2CAP_HEADER_SIZE (L2CAP_HEADER_PDU_LEN_SIZE + L2CAP_HEADER_CID_SIZE)
@@ -131,8 +133,16 @@ static void reassemble_and_dispatch(BT_HDR* packet) {
CHECK(acl_length == packet->len - HCI_ACL_PREAMBLE_SIZE);
uint8_t boundary_flag = GET_BOUNDARY_FLAG(handle);
+ uint8_t broadcast_flag = GET_BROADCAST_FLAG(handle);
handle = handle & HANDLE_MASK;
+ if (broadcast_flag != POINT_TO_POINT) {
+ LOG_WARN(LOG_TAG, "dropping broadcast packet");
+ android_errorWriteLog(0x534e4554, "169327567");
+ buffer_allocator->free(packet);
+ return;
+ }
+
if (boundary_flag == START_PACKET_BOUNDARY) {
if (acl_length < 2) {
LOG_WARN(LOG_TAG, "%s invalid acl_length %d", __func__, acl_length);