From 8eedf70a1f1267f7f01cea2cbaa1056734800e5f Mon Sep 17 00:00:00 2001 From: Adam Ierymenko Date: Wed, 11 Jan 2023 20:08:27 -0500 Subject: [PATCH] Fix logic to still dedup properly. --- zssp/src/zssp.rs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/zssp/src/zssp.rs b/zssp/src/zssp.rs index 49cf71bb8..ffef800b1 100644 --- a/zssp/src/zssp.rs +++ b/zssp/src/zssp.rs @@ -328,16 +328,16 @@ impl Session { /// Check the receive window without mutating state. #[inline(always)] fn check_receive_window(&self, counter: u64) -> bool { - counter.wrapping_sub(self.receive_window[(counter as usize) % COUNTER_WINDOW_MAX_OUT_OF_ORDER].load(Ordering::Acquire)) - < COUNTER_WINDOW_MAX_SKIP_AHEAD + let c = self.receive_window[(counter as usize) % COUNTER_WINDOW_MAX_OUT_OF_ORDER].load(Ordering::Acquire); + c < counter && counter.wrapping_sub(c) < COUNTER_WINDOW_MAX_SKIP_AHEAD } /// Update the receive window, returning true if the packet is still valid. /// This should only be called after the packet is authenticated. #[inline(always)] fn update_receive_window(&self, counter: u64) -> bool { - counter.wrapping_sub(self.receive_window[(counter as usize) % COUNTER_WINDOW_MAX_OUT_OF_ORDER].fetch_max(counter, Ordering::AcqRel)) - < COUNTER_WINDOW_MAX_SKIP_AHEAD + let c = self.receive_window[(counter as usize) % COUNTER_WINDOW_MAX_OUT_OF_ORDER].fetch_max(counter, Ordering::AcqRel); + c < counter && counter.wrapping_sub(c) < COUNTER_WINDOW_MAX_SKIP_AHEAD } }