mirror of
https://git.savannah.nongnu.org/git/lwip.git
synced 2026-05-23 08:37:02 +08:00
fixed bug #45559: Window scaling casts u32_t to u16_t without checks
This commit is contained in:
@@ -1245,7 +1245,7 @@
|
||||
* explicit window update
|
||||
*/
|
||||
#ifndef TCP_WND_UPDATE_THRESHOLD
|
||||
#define TCP_WND_UPDATE_THRESHOLD (TCP_WND / 4)
|
||||
#define TCP_WND_UPDATE_THRESHOLD LWIP_MIN((TCP_WND / 4), (TCP_MSS * 4))
|
||||
#endif
|
||||
|
||||
/**
|
||||
|
||||
@@ -128,13 +128,15 @@ typedef err_t (*tcp_connected_fn)(void *arg, struct tcp_pcb *tpcb, err_t err);
|
||||
#if LWIP_WND_SCALE
|
||||
#define RCV_WND_SCALE(pcb, wnd) (((wnd) >> (pcb)->rcv_scale))
|
||||
#define SND_WND_SCALE(pcb, wnd) (((wnd) << (pcb)->snd_scale))
|
||||
#define TCPWND16(x) ((u16_t)LWIP_MIN((x), 0xFFFF))
|
||||
#define TCPWND16(x) ((u16_t)LWIP_MIN((x), 0xFFFF))
|
||||
#define TCP_WND_MAX(pcb) ((tcpwnd_size_t)(((pcb)->flags & TF_WND_SCALE) ? TCP_WND : TCPWND16(TCP_WND)))
|
||||
typedef u32_t tcpwnd_size_t;
|
||||
typedef u16_t tcpflags_t;
|
||||
#else
|
||||
#define RCV_WND_SCALE(pcb, wnd) (wnd)
|
||||
#define SND_WND_SCALE(pcb, wnd) (wnd)
|
||||
#define TCPWND16(x) (x)
|
||||
#define TCPWND16(x) (x)
|
||||
#define TCP_WND_MAX(pcb) TCP_WND
|
||||
typedef u16_t tcpwnd_size_t;
|
||||
typedef u8_t tcpflags_t;
|
||||
#endif
|
||||
|
||||
@@ -332,11 +332,15 @@ struct tcp_seg {
|
||||
#define TCP_BUILD_MSS_OPTION(mss) htonl(0x02040000 | ((mss) & 0xFFFF))
|
||||
|
||||
#if LWIP_WND_SCALE
|
||||
#define TCPWNDSIZE_F U32_F
|
||||
#define TCPWND_MAX 0xFFFFFFFFU
|
||||
#define TCPWNDSIZE_F U32_F
|
||||
#define TCPWND_MAX 0xFFFFFFFFU
|
||||
#define TCPWND_CHECK16(x) LWIP_ASSERT("window size > 0xFFFF", (x) <= 0xFFFF)
|
||||
#define TCPWND_MIN16(x) ((u16_t)LWIP_MIN((x), 0xFFFF))
|
||||
#else /* LWIP_WND_SCALE */
|
||||
#define TCPWNDSIZE_F U16_F
|
||||
#define TCPWND_MAX 0xFFFFU
|
||||
#define TCPWNDSIZE_F U16_F
|
||||
#define TCPWND_MAX 0xFFFFU
|
||||
#define TCPWND_CHECK16(x)
|
||||
#define TCPWND_MIN16(x) x
|
||||
#endif /* LWIP_WND_SCALE */
|
||||
|
||||
/* Global variables: */
|
||||
|
||||
Reference in New Issue
Block a user