diff options
author | Mathias Krause <minipli@googlemail.com> | 2013-03-20 22:59:11 +0100 |
---|---|---|
committer | Steffen Klassert <steffen.klassert@secunet.com> | 2013-03-25 07:25:50 +0100 |
commit | 799ef90c55e692e096d8bd9e5871b95264b1e9ba (patch) | |
tree | 8dc4b7c9fc0f0fc13e1e7a04ce62107fa1d02b4b /net/xfrm | |
parent | 0017c0b57500606aab894cdb02fdf3380ddd60ee (diff) | |
download | kernel-common-799ef90c55e692e096d8bd9e5871b95264b1e9ba.tar.gz kernel-common-799ef90c55e692e096d8bd9e5871b95264b1e9ba.tar.bz2 kernel-common-799ef90c55e692e096d8bd9e5871b95264b1e9ba.zip |
xfrm: Fix esn sequence number diff calculation in xfrm_replay_notify_esn()
Commit 0017c0b "xfrm: Fix replay notification for esn." is off by one
for the sequence number wrapped case as UINT_MAX is 0xffffffff, not
0x100000000. ;)
Just calculate the diff like done everywhere else in the file.
Signed-off-by: Mathias Krause <minipli@googlemail.com>
Signed-off-by: Steffen Klassert <steffen.klassert@secunet.com>
Diffstat (limited to 'net/xfrm')
-rw-r--r-- | net/xfrm/xfrm_replay.c | 6 |
1 files changed, 2 insertions, 4 deletions
diff --git a/net/xfrm/xfrm_replay.c b/net/xfrm/xfrm_replay.c index a3906737f49e..8dafe6d3c6e4 100644 --- a/net/xfrm/xfrm_replay.c +++ b/net/xfrm/xfrm_replay.c @@ -359,14 +359,12 @@ static void xfrm_replay_notify_esn(struct xfrm_state *x, int event) if (replay_esn->seq_hi == preplay_esn->seq_hi) seq_diff = replay_esn->seq - preplay_esn->seq; else - seq_diff = UINT_MAX - preplay_esn->seq - + replay_esn->seq; + seq_diff = ~preplay_esn->seq + replay_esn->seq + 1; if (replay_esn->oseq_hi == preplay_esn->oseq_hi) oseq_diff = replay_esn->oseq - preplay_esn->oseq; else - oseq_diff = UINT_MAX - preplay_esn->oseq - + replay_esn->oseq; + oseq_diff = ~preplay_esn->oseq + replay_esn->oseq + 1; if (seq_diff < x->replay_maxdiff && oseq_diff < x->replay_maxdiff) { |