RDMA/nes: Check for sequence number wrap-around
authorFaisal Latif <faisal.latif@intel.com>
Mon, 27 Apr 2009 20:38:31 +0000 (13:38 -0700)
committerRoland Dreier <rolandd@cisco.com>
Mon, 27 Apr 2009 20:38:31 +0000 (13:38 -0700)
check_seq() was not checking if the seq#s have wrapped.  Fix it.

Signed-off-by: Faisal Latif <faisal.latif@intel.com>
Signed-off-by: Roland Dreier <rolandd@cisco.com>
drivers/infiniband/hw/nes/nes_cm.c

index 1efe0beca0637a8210bb17c7bd60320331b6bfa9..1f7a659e6e9a3095232e1e2eedc370a4b28e9f95 100644 (file)
@@ -56,6 +56,7 @@
 #include <net/neighbour.h>
 #include <net/route.h>
 #include <net/ip_fib.h>
+#include <net/tcp.h>
 
 #include "nes.h"
 
@@ -1514,7 +1515,7 @@ static int check_seq(struct nes_cm_node *cm_node, struct tcphdr *tcph,
        rcv_wnd = cm_node->tcp_cntxt.rcv_wnd;
        if (ack_seq != loc_seq_num)
                err = 1;
-       else if ((seq + rcv_wnd) < rcv_nxt)
+       else if (!between(seq, rcv_nxt, (rcv_nxt+rcv_wnd)))
                err = 1;
        if (err) {
                nes_debug(NES_DBG_CM, "%s[%u] create abort for cm_node=%p "