btmon: Fix decoding truncated data
authorŁukasz Rymanowski <lukasz.rymanowski@codecoup.pl>
Sat, 11 Mar 2023 23:36:40 +0000 (00:36 +0100)
committerAyush Garg <ayush.garg@samsung.com>
Fri, 5 Jan 2024 10:21:48 +0000 (15:51 +0530)
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
tools/btsnoop.c

index 086c17a..daeab0b 100755 (executable)
@@ -705,7 +705,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;
index 3fa54ba..707f24d 100644 (file)
@@ -398,7 +398,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;
@@ -471,7 +471,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;
@@ -548,7 +548,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) {