[IPSEC]: Reject packets within replay window but outside the bit mask
authorHerbert Xu <herbert@gondor.apana.org.au>
Thu, 5 Apr 2007 07:07:39 +0000 (00:07 -0700)
committerDavid S. Miller <davem@davemloft.net>
Thu, 5 Apr 2007 07:07:39 +0000 (00:07 -0700)
Up until this point we've accepted replay window settings greater than
32 but our bit mask can only accomodate 32 packets.  Thus any packet
with a sequence number within the window but outside the bit mask would
be accepted.

This patch causes those packets to be rejected instead.

Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/xfrm/xfrm_state.c

index 5c5f6dcab974d954ce3940bb8e8b46071b4cd1c8..e3a0bcfa5df1ccd11884dfd537473de44ba56c60 100644 (file)
@@ -1371,7 +1371,8 @@ int xfrm_replay_check(struct xfrm_state *x, __be32 net_seq)
                return 0;
 
        diff = x->replay.seq - seq;
-       if (diff >= x->props.replay_window) {
+       if (diff >= min_t(unsigned int, x->props.replay_window,
+                         sizeof(x->replay.bitmap) * 8)) {
                x->stats.replay_window++;
                return -EINVAL;
        }