From acbd2cce99bca77a7b59bd49ec5567dfc979908c Mon Sep 17 00:00:00 2001 From: Patrick Rohr Date: Tue, 25 Feb 2025 09:43:18 -0800 Subject: [PATCH] Stop forwarding when BluetoothSocket read returns -1 When BluetoothSocket.InputStream#read() returns -1, the Bluetooth stack closes the socket. Instead of dropping these packets, throw an exception to tear down the link. Test: TH Change-Id: I7b78d01bc62383d9f93fa70cc4237e3604c98913 --- service/src/com/android/server/net/L2capPacketForwarder.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/service/src/com/android/server/net/L2capPacketForwarder.java b/service/src/com/android/server/net/L2capPacketForwarder.java index 737cb9cfba..8420d60dde 100644 --- a/service/src/com/android/server/net/L2capPacketForwarder.java +++ b/service/src/com/android/server/net/L2capPacketForwarder.java @@ -109,10 +109,10 @@ public class L2capPacketForwarder { public int read(byte[] bytes, int off, int len) throws IOException { // Note: EINTR is handled internally and automatically triggers a retry loop. int bytesRead = mInputStream.read(bytes, off, len); - if (bytesRead > MTU) { + if (bytesRead < 0 || bytesRead > MTU) { // Don't try to recover, just trigger network teardown. This might indicate a bug in // the Bluetooth stack. - throw new IOException("Packet exceeds MTU"); + throw new IOException("Packet exceeds MTU or reached EOF. Read: " + bytesRead); } return bytesRead; }