diff options
author | Loic Poulain <loic.poulain@intel.com> | 2014-08-08 21:07:16 +0400 |
---|---|---|
committer | Jiri Slaby <jslaby@suse.cz> | 2014-10-31 17:11:23 +0300 |
commit | d511101482bad689a3f19afa8d44d834e5c0e0a9 (patch) | |
tree | f59e73ff56175c5e763f74cf85e897c49d49494c /drivers/bluetooth | |
parent | 82176ab062d34f524121f11af4aa770c517d1898 (diff) | |
download | linux-d511101482bad689a3f19afa8d44d834e5c0e0a9.tar.xz |
Bluetooth: Fix HCI H5 corrupted ack value
commit 4807b51895dce8aa650ebebc51fa4a795ed6b8b8 upstream.
In this expression: seq = (seq - 1) % 8
seq (u8) is implicitly converted to an int in the arithmetic operation.
So if seq value is 0, operation is ((0 - 1) % 8) => (-1 % 8) => -1.
The new seq value is 0xff which is an invalid ACK value, we expect 0x07.
It leads to frequent dropped ACK and retransmission.
Fix this by using '&' binary operator instead of '%'.
Signed-off-by: Loic Poulain <loic.poulain@intel.com>
Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
Signed-off-by: Jiri Slaby <jslaby@suse.cz>
Diffstat (limited to 'drivers/bluetooth')
-rw-r--r-- | drivers/bluetooth/hci_h5.c | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/drivers/bluetooth/hci_h5.c b/drivers/bluetooth/hci_h5.c index db0be2fb05fe..db35c542eb20 100644 --- a/drivers/bluetooth/hci_h5.c +++ b/drivers/bluetooth/hci_h5.c @@ -237,7 +237,7 @@ static void h5_pkt_cull(struct h5 *h5) break; to_remove--; - seq = (seq - 1) % 8; + seq = (seq - 1) & 0x07; } if (seq != h5->rx_ack) |