From f31d6f271fe7b1989fb335a251cfa07a22f83f57 Mon Sep 17 00:00:00 2001 From: Adam Dunkels Date: Fri, 22 Nov 2013 15:37:21 +0100 Subject: [PATCH 1/4] Bugfix: if a SYN is received in the SYN_RCVD state we should not send a blank SYN, but a SYNACK in response. --- core/net/uip6.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/core/net/uip6.c b/core/net/uip6.c index e79486ff1..7f51ce4e9 100644 --- a/core/net/uip6.c +++ b/core/net/uip6.c @@ -1833,8 +1833,12 @@ uip_process(uint8_t flag) UIP_TCP_BUF->seqno[2] != uip_connr->rcv_nxt[2] || UIP_TCP_BUF->seqno[3] != uip_connr->rcv_nxt[3])) { - if(UIP_TCP_BUF->flags & TCP_SYN) { - goto tcp_send_synack; + if((UIP_TCP_BUF->flags & TCP_SYN)) { + if((uip_connr->tcpstateflags & UIP_TS_MASK) == UIP_SYN_RCVD) { + goto tcp_send_synack; + } else if((uip_connr->tcpstateflags & UIP_TS_MASK) == UIP_SYN_SENT) { + goto tcp_send_syn; + } } goto tcp_send_ack; } From d577d03e212daa32a7b332a5e4297daf264f9c94 Mon Sep 17 00:00:00 2001 From: Adam Dunkels Date: Fri, 22 Nov 2013 15:38:20 +0100 Subject: [PATCH 2/4] Bugfix: correctly handle the case if uip_sappdata is NULL. --- core/net/uip6.c | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/core/net/uip6.c b/core/net/uip6.c index 7f51ce4e9..f0d93688c 100644 --- a/core/net/uip6.c +++ b/core/net/uip6.c @@ -2320,12 +2320,23 @@ uip_send(const void *data, int len) { int copylen; #define MIN(a,b) ((a) < (b)? (a): (b)) - copylen = MIN(len, UIP_BUFSIZE - UIP_LLH_LEN - UIP_TCPIP_HLEN - - (int)((char *)uip_sappdata - (char *)&uip_buf[UIP_LLH_LEN + UIP_TCPIP_HLEN])); + + if(uip_sappdata != NULL) { + copylen = MIN(len, UIP_BUFSIZE - UIP_LLH_LEN - UIP_TCPIP_HLEN - + (int)((char *)uip_sappdata - + (char *)&uip_buf[UIP_LLH_LEN + UIP_TCPIP_HLEN])); + } else { + copylen = MIN(len, UIP_BUFSIZE - UIP_LLH_LEN - UIP_TCPIP_HLEN); + } if(copylen > 0) { uip_slen = copylen; if(data != uip_sappdata) { - memcpy(uip_sappdata, (data), uip_slen); + if(uip_sappdata == NULL) { + memcpy((char *)&uip_buf[UIP_LLH_LEN + UIP_TCPIP_HLEN], + (data), uip_slen); + } else { + memcpy(uip_sappdata, (data), uip_slen); + } } } } From 61a8fa9977a0078af84ca5e41890c84a1ff5d686 Mon Sep 17 00:00:00 2001 From: Adam Dunkels Date: Fri, 22 Nov 2013 15:44:48 +0100 Subject: [PATCH 3/4] Allow the default TTL to be configured with UIP_CONF_TTL --- core/net/uipopt.h | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/core/net/uipopt.h b/core/net/uipopt.h index 7c9939003..ce871985f 100644 --- a/core/net/uipopt.h +++ b/core/net/uipopt.h @@ -144,7 +144,11 @@ * * This should normally not be changed. */ +#ifdef UIP_CONF_TTL +#define UIP_TTL UIP_CONF_TTL +#else /* UIP_CONF_TTL */ #define UIP_TTL 64 +#endif /* UIP_CONF_TTL */ /** * The maximum time an IP fragment should wait in the reassembly From ea4bc3816f649175f2d2d3592dd2abd84735ac49 Mon Sep 17 00:00:00 2001 From: Adam Dunkels Date: Fri, 22 Nov 2013 15:46:48 +0100 Subject: [PATCH 4/4] Produce an error if the UIP_TCP_MSS is too large for UIP_BUFSIZE --- core/net/uipopt.h | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/core/net/uipopt.h b/core/net/uipopt.h index ce871985f..d0d3219ad 100644 --- a/core/net/uipopt.h +++ b/core/net/uipopt.h @@ -382,7 +382,10 @@ * UIP_BUFSIZE - UIP_LLH_LEN - UIP_TCPIP_HLEN. */ #ifdef UIP_CONF_TCP_MSS -#define UIP_TCP_MSS (UIP_CONF_TCP_MSS) +#if UIP_CONF_TCP_MSS < (UIP_BUFSIZE - UIP_LLH_LEN - UIP_TCPIP_HLEN) +#error UIP_CONF_TCP_MSS is too large for the current UIP_BUFSIZE +#endif /* UIP_CONF_TCP_MSS < (UIP_BUFSIZE - UIP_LLH_LEN - UIP_TCPIP_HLEN) */ +#define UIP_TCP_MSS (UIP_CONF_TCP_MSS) #else #define UIP_TCP_MSS (UIP_BUFSIZE - UIP_LLH_LEN - UIP_TCPIP_HLEN) #endif