summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSimon Goldschmidt <[email protected]>2018-11-12 20:47:01 +0100
committerSimon Goldschmidt <[email protected]>2018-11-12 20:47:01 +0100
commit1940cae8273c930fd2e82cfac3d7bbfb04e46efc (patch)
treeeb85b4dc72d4c53b592ad30a72912e67231b9024
parentd184463e2a7ae354a1ef888a6ac3061e285367d6 (diff)
Revert "tcp_recved: check for overflow and warn about too big values"
This reverts commit ebb0dc14a7336c793d32c8e9ebde5bd9666f2a65. It changes the behaviour to assert for applications running good so far. Signed-off-by: Simon Goldschmidt <[email protected]>
-rw-r--r--src/core/tcp.c13
1 files changed, 4 insertions, 9 deletions
diff --git a/src/core/tcp.c b/src/core/tcp.c
index 2abe0b6a..0743eaf4 100644
--- a/src/core/tcp.c
+++ b/src/core/tcp.c
@@ -968,7 +968,6 @@ void
tcp_recved(struct tcp_pcb *pcb, u16_t len)
{
u32_t wnd_inflation;
- tcpwnd_size_t rcv_wnd;
LWIP_ASSERT_CORE_LOCKED();
@@ -978,8 +977,10 @@ tcp_recved(struct tcp_pcb *pcb, u16_t len)
LWIP_ASSERT("don't call tcp_recved for listen-pcbs",
pcb->state != LISTEN);
- rcv_wnd = pcb->rcv_wnd + len;
- if (rcv_wnd < pcb->rcv_wnd || (len != 0 && rcv_wnd == pcb->rcv_wnd)) {
+ pcb->rcv_wnd = (tcpwnd_size_t)(pcb->rcv_wnd + len);
+ if (pcb->rcv_wnd > TCP_WND_MAX(pcb)) {
+ pcb->rcv_wnd = TCP_WND_MAX(pcb);
+ } else if (pcb->rcv_wnd == 0) {
/* rcv_wnd overflowed */
if (TCP_STATE_IS_CLOSING(pcb->state)) {
/* In passive close, we allow this, since the FIN bit is added to rcv_wnd
@@ -989,12 +990,6 @@ tcp_recved(struct tcp_pcb *pcb, u16_t len)
} else {
LWIP_ASSERT("tcp_recved: len wrapped rcv_wnd\n", 0);
}
- } else if (rcv_wnd <= TCP_WND_MAX(pcb)) {
- pcb->rcv_wnd = rcv_wnd;
- } else {
- LWIP_ASSERT("tcp_recved: len overflowed TCP_WND_MAX",
- rcv_wnd <= TCP_WND_MAX(pcb));
- pcb->rcv_wnd = TCP_WND_MAX(pcb);
}
wnd_inflation = tcp_update_rcv_ann_wnd(pcb);