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

Commit 6dcabf88 authored by Stanley Tng's avatar Stanley Tng Committed by Myles Watson
Browse files

Allow L2CAP first packet with partial header

This change will allow a fragmented and first L2CAP packet that has
partial L2CAP Header to be parsed. Only the first 2 bytes of L2CAP
header are necessary for the packet assembler to work and the subsequent
bytes of the header can be in later packets.

Test: Run RfComm and LE CoC SL4A Tests. Also verify on an OTA received packet
with the partial L2CAP CoC header.
Bug: 70683224

Change-Id: I659ebbe86eab57aa9d725f7b685525b445195e5e
parent 0d7fb838
Loading
Loading
Loading
Loading
+5 −3
Original line number Diff line number Diff line
@@ -39,7 +39,9 @@
#define HANDLE_MASK 0x0FFF
#define START_PACKET_BOUNDARY 2
#define CONTINUATION_PACKET_BOUNDARY 1
#define L2CAP_HEADER_SIZE 4
#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)

// Our interface and callbacks

@@ -146,9 +148,9 @@ static void reassemble_and_dispatch(UNUSED_ATTR BT_HDR* packet) {
        buffer_allocator->free(hdl);
      }

      if (acl_length < L2CAP_HEADER_SIZE) {
      if (acl_length < L2CAP_HEADER_PDU_LEN_SIZE) {
        LOG_WARN(LOG_TAG, "%s L2CAP packet too small (%d < %d). Dropping it.",
                 __func__, packet->len, L2CAP_HEADER_SIZE);
                 __func__, packet->len, L2CAP_HEADER_PDU_LEN_SIZE);
        buffer_allocator->free(packet);
        return;
      }