2023-03-11 23:36:49

by Łukasz Rymanowski

[permalink] [raw]
Subject: [PATCH BlueZ v2 0/1] Btmon: Fix handling not complete packets

When for security reasons or any other, packets in the btsnoop logs are
not complete, then Included length is smaller then Original size.

For the moment, Bluez always assumes to get complete packets.
If it not happen, then it stops decoding after fist packet which
Original size is bigger then Included lenght. e.g.
In the file where we had some ISO packets but with payload = 0,
btmon ended like that:

./btmon -r btsnoop.log
Bluetooth monitor ver 5.66

After the fix logs looks like that (from the same btsnoop log)

> HCI Event: Number of Completed Packets (0x13) plen 5 #1 0.926288
Num handles: 1
Handle: 96
Count: 2
> HCI Event: Number of Completed Packets (0x13) plen 5 #2 0.932776
Num handles: 1
Handle: 97
Count: 2
> HCI Event: Number of Completed Packets (0x13) plen 5 #3 0.945915
Num handles: 1
Handle: 96
Count: 2


And here is an example how truncated ACL packet will look after fix.
> ACL Data RX: Handle 64 flags 0x02 dlen 51 #138 7.118921
invalid packet size (10 != 51)
2f 00 04 00 1b 05 11 01 01 00 /.........


Łukasz Rymanowski (1):
btmon: Fix decoding truncated data

src/shared/btsnoop.c | 2 +-
tools/btsnoop.c | 6 +++---
2 files changed, 4 insertions(+), 4 deletions(-)

--
2.34.1



2023-03-11 23:36:49

by Łukasz Rymanowski

[permalink] [raw]
Subject: [PATCH BlueZ v2 1/1] btmon: Fix decoding truncated data

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


2023-03-12 02:16:07

by bluez.test.bot

[permalink] [raw]
Subject: RE: Btmon: Fix handling not complete packets

This is automated email and please do not reply to this email!

Dear submitter,

Thank you for submitting the patches to the linux bluetooth mailing list.
This is a CI test results with your patch series:
PW Link:https://patchwork.kernel.org/project/bluetooth/list/?series=729126

---Test result---

Test Summary:
CheckPatch PASS 0.37 seconds
GitLint PASS 0.24 seconds
BuildEll PASS 27.08 seconds
BluezMake PASS 982.87 seconds
MakeCheck PASS 11.40 seconds
MakeDistcheck PASS 150.81 seconds
CheckValgrind PASS 247.53 seconds
CheckSmatch PASS 330.11 seconds
bluezmakeextell PASS 99.16 seconds
IncrementalBuild PASS 843.22 seconds
ScanBuild PASS 1040.12 seconds



---
Regards,
Linux Bluetooth

2023-03-14 19:50:53

by patchwork-bot+bluetooth

[permalink] [raw]
Subject: Re: [PATCH BlueZ v2 0/1] Btmon: Fix handling not complete packets

Hello:

This patch was applied to bluetooth/bluez.git (master)
by Luiz Augusto von Dentz <[email protected]>:

On Sun, 12 Mar 2023 00:36:39 +0100 you wrote:
> When for security reasons or any other, packets in the btsnoop logs are
> not complete, then Included length is smaller then Original size.
>
> For the moment, Bluez always assumes to get complete packets.
> If it not happen, then it stops decoding after fist packet which
> Original size is bigger then Included lenght. e.g.
> In the file where we had some ISO packets but with payload = 0,
> btmon ended like that:
>
> [...]

Here is the summary with links:
- [BlueZ,v2,1/1] btmon: Fix decoding truncated data
https://git.kernel.org/pub/scm/bluetooth/bluez.git/?id=6ae44c74aaf9

You are awesome, thank you!
--
Deet-doot-dot, I am a bot.
https://korg.docs.kernel.org/patchwork/pwbot.html