Bluetooth: Check if we really are in WAIT_F when F bit comes
authorGustavo F. Padovan <padovan@profusion.mobi>
Wed, 5 May 2010 23:05:57 +0000 (20:05 -0300)
committerMarcel Holtmann <marcel@holtmann.org>
Mon, 10 May 2010 07:28:52 +0000 (09:28 +0200)
F-bit set should be processed only if we are in the WAIT_F state.

Signed-off-by: Gustavo F. Padovan <padovan@profusion.mobi>
Reviewed-by: João Paulo Rechi Vita <jprvita@profusion.mobi>
Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
net/bluetooth/l2cap.c

index 5a5203f03642040ad3074708084598c1102b64db..eb5cb29115a7e27e03e3a6842e53469d3e2308de 100644 (file)
@@ -3503,7 +3503,8 @@ static inline int l2cap_data_channel_iframe(struct sock *sk, u16 rx_control, str
 
        BT_DBG("sk %p rx_control 0x%4.4x len %d", sk, rx_control, skb->len);
 
-       if (L2CAP_CTRL_FINAL & rx_control) {
+       if (L2CAP_CTRL_FINAL & rx_control &&
+                       l2cap_pi(sk)->conn_state & L2CAP_CONN_WAIT_F) {
                del_timer(&pi->monitor_timer);
                if (pi->unacked_frames > 0)
                        __mod_retrans_timer();
@@ -3727,7 +3728,8 @@ static inline int l2cap_data_channel_sframe(struct sock *sk, u16 rx_control, str
 {
        BT_DBG("sk %p rx_control 0x%4.4x len %d", sk, rx_control, skb->len);
 
-       if (L2CAP_CTRL_FINAL & rx_control) {
+       if (L2CAP_CTRL_FINAL & rx_control &&
+                       l2cap_pi(sk)->conn_state & L2CAP_CONN_WAIT_F) {
                del_timer(&l2cap_pi(sk)->monitor_timer);
                if (l2cap_pi(sk)->unacked_frames > 0)
                        __mod_retrans_timer();