fixed bug #34111 RST for ACK to listening pcb has wrong seqno

This commit is contained in:
Simon Goldschmidt 2011-09-01 21:00:11 +02:00 committed by goldsimon
parent 6145af516b
commit a030b741a5
2 changed files with 10 additions and 3 deletions

View File

@ -24,6 +24,9 @@ HISTORY
++ Bugfixes:
2011-09-01: Simon Goldschmidt
* tcp_in.c: fixed bug #34111 RST for ACK to listening pcb has wrong seqno
2011-08-24: Simon Goldschmidt
* api_msg.c, sockets.c: fixed bug #33956 Wrong error returned when calling
accept() on UDP connections

View File

@ -444,15 +444,19 @@ tcp_listen_input(struct tcp_pcb_listen *pcb)
struct tcp_pcb *npcb;
err_t rc;
if (flags & TCP_RST) {
/* An incoming RST should be ignored. Return. */
return ERR_OK;
}
/* In the LISTEN state, we check for incoming SYN segments,
creates a new PCB, and responds with a SYN|ACK. */
if (flags & TCP_ACK) {
/* For incoming segments with the ACK flag set, respond with a
RST. */
LWIP_DEBUGF(TCP_RST_DEBUG, ("tcp_listen_input: ACK in LISTEN, sending reset\n"));
tcp_rst(ackno + 1, seqno + tcplen,
ip_current_dest_addr(), ip_current_src_addr(),
tcphdr->dest, tcphdr->src);
tcp_rst(ackno, seqno + tcplen, ip_current_dest_addr(),
ip_current_src_addr(), tcphdr->dest, tcphdr->src);
} else if (flags & TCP_SYN) {
LWIP_DEBUGF(TCP_DEBUG, ("TCP connection request %"U16_F" -> %"U16_F".\n", tcphdr->src, tcphdr->dest));
#if TCP_LISTEN_BACKLOG