• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1From 003d34eebd223c16a3dbf6a970bb6e23cb7d1a24 Mon Sep 17 00:00:00 2001
2From: Simon Goldschmidt <goldsimon@gmx.de>
3Date: Fri, 27 Mar 2020 22:59:05 +0100
4Subject: [PATCH] tcp: fix sequence number comparison
5This fixes both undefined behavior (see bug #51447) as well as a possible bug
6where sequence numbers in 31 bit distance may come through.
7Conflict: NA
8Reference: https://git.savannah.gnu.org/cgit/lwip.git/commit/?id=003d34eebd223c16a3dbf6a970bb6e23cb7d1a24
9---
10 src/include/lwip/priv/tcp_priv.h | 11 ++++-------
11 1 file changed, 4 insertions(+), 7 deletions(-)
12diff --git a/src/include/lwip/priv/tcp_priv.h b/src/include/lwip/priv/tcp_priv.h
13index 72f9126d..c84b5be8 100644
14--- a/src/include/lwip/priv/tcp_priv.h
15+++ b/src/include/lwip/priv/tcp_priv.h
16@@ -106,14 +106,11 @@ err_t            tcp_process_refused_data(struct tcp_pcb *pcb);
17 #define tcp_output_nagle(tpcb) (tcp_do_output_nagle(tpcb) ? tcp_output(tpcb) : ERR_OK)
18
19
20-#define TCP_SEQ_LT(a,b)     ((s32_t)((u32_t)(a) - (u32_t)(b)) < 0)
21-#define TCP_SEQ_LEQ(a,b)    ((s32_t)((u32_t)(a) - (u32_t)(b)) <= 0)
22-#define TCP_SEQ_GT(a,b)     ((s32_t)((u32_t)(a) - (u32_t)(b)) > 0)
23-#define TCP_SEQ_GEQ(a,b)    ((s32_t)((u32_t)(a) - (u32_t)(b)) >= 0)
24+#define TCP_SEQ_LT(a,b)     (((u32_t)((u32_t)(a) - (u32_t)(b)) & 0x80000000u) != 0)
25+#define TCP_SEQ_LEQ(a,b)    (!(TCP_SEQ_LT(b,a)))
26+#define TCP_SEQ_GT(a,b)     TCP_SEQ_LT(b,a)
27+#define TCP_SEQ_GEQ(a,b)    TCP_SEQ_LEQ(b,a)
28 /* is b<=a<=c? */
29-#if 0 /* see bug #10548 */
30-#define TCP_SEQ_BETWEEN(a,b,c) ((c)-(b) >= (a)-(b))
31-#endif
32 #define TCP_SEQ_BETWEEN(a,b,c) (TCP_SEQ_GEQ(a,b) && TCP_SEQ_LEQ(a,c))
33
34 #ifndef TCP_TMR_INTERVAL
35--
362.28.0.windows.1
37