Some platforms use different filtering and for this purpose, some of the ACL/SCO/ISO/SDP data is truncated. In such a case, included length is smaller than the original size. Without this fix, btmon stops working after first truncated packet. --- src/shared/btsnoop.c | 2 +- tools/btsnoop.c | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/shared/btsnoop.c b/src/shared/btsnoop.c index 0a68282bc..8b93203b3 100644 --- a/src/shared/btsnoop.c +++ b/src/shared/btsnoop.c @@ -513,7 +513,7 @@ bool btsnoop_read_hci(struct btsnoop *btsnoop, struct timeval *tv, return false; } - toread = be32toh(pkt.size); + toread = be32toh(pkt.len); if (toread > BTSNOOP_MAX_PACKET_SIZE) { btsnoop->aborted = true; return false; diff --git a/tools/btsnoop.c b/tools/btsnoop.c index a0d6cf356..efaa45db4 100644 --- a/tools/btsnoop.c +++ b/tools/btsnoop.c @@ -283,7 +283,7 @@ next_packet: if (len < 0 || len != BTSNOOP_PKT_SIZE) goto close_input; - toread = be32toh(pkt.size); + toread = be32toh(pkt.len); flags = be32toh(pkt.flags); opcode = flags & 0x00ff; @@ -356,7 +356,7 @@ next_packet: if (len < 0 || len != BTSNOOP_PKT_SIZE) goto close_input; - toread = be32toh(pkt.size); + toread = be32toh(pkt.len); flags = be32toh(pkt.flags); opcode = flags & 0x00ff; @@ -433,7 +433,7 @@ next_packet: if (len < 0 || len != BTSNOOP_PKT_SIZE) goto close_input; - toread = be32toh(pkt.size); + toread = be32toh(pkt.len); len = read(fd, buf, toread); if (len < 0 || len != (ssize_t) toread) { -- 2.34.1