]> git.proxmox.com Git - mirror_ubuntu-eoan-kernel.git/commitdiff
Bluetooth: Fix HCI H5 corrupted ack value
authorLoic Poulain <loic.poulain@intel.com>
Fri, 8 Aug 2014 17:07:16 +0000 (19:07 +0200)
committerMarcel Holtmann <marcel@holtmann.org>
Thu, 14 Aug 2014 06:49:19 +0000 (08:49 +0200)
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>
Cc: stable@vger.kernel.org
drivers/bluetooth/hci_h5.c

index caacb422995dd4a69e18585275f32904a17bf708..a22838669b4ed227d447925ea45337f5efd9f72d 100644 (file)
@@ -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)