From 8de8b5bb41446222b6a62758e4c741b4429998e3 Mon Sep 17 00:00:00 2001 From: Evgeny Date: Sat, 30 May 2026 23:06:28 +0300 Subject: [PATCH] fix RST storm: tcp_recved before tcp_close in proxy_poll_cb cleanup --- src/tcp_proxy.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/tcp_proxy.c b/src/tcp_proxy.c index 642b7147..599d09bf 100644 --- a/src/tcp_proxy.c +++ b/src/tcp_proxy.c @@ -325,7 +325,10 @@ static err_t proxy_poll_cb(void *arg, struct tcp_pcb *pcb) { (unsigned long long)pc->remote_stream_id, pc->closing_rem, pc->closing_sent, pc->pcb->cwnd, pc->pcb->snd_buf, (void*)pc->pcb->unsent, (void*)pc->pcb->unacked); struct tcp_pcb *save = pc->pcb; - tcp_arg(save, NULL); pc->pcb = NULL; tcp_close(save); + tcp_arg(save, NULL); pc->pcb = NULL; + { uint16_t wnd_gap = TCP_WND_MAX(save) - save->rcv_wnd; + if (wnd_gap > 0) tcp_recved(save, wnd_gap); } + tcp_close(save); struct tcp_proxy *proxy = pc->proxy; struct proxy_conn **prev = &proxy->conns; while (*prev) { if (*prev == pc) { *prev = pc->next; proxy->conn_count--; break; } prev = &(*prev)->next; }