From 36cb95c4d2f5b1945d1bfe512de2a00324573a70 Mon Sep 17 00:00:00 2001 From: Simon Goldschmidt Date: Wed, 27 Sep 2023 20:38:41 +0200 Subject: [PATCH 01/94] next release will probably be 2.2.1... --- doc/doxygen/lwip.Doxyfile | 2 +- src/Filelists.cmake | 4 ++-- src/include/lwip/init.h | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/doc/doxygen/lwip.Doxyfile b/doc/doxygen/lwip.Doxyfile index 4b4d2ec5..d51fe67e 100644 --- a/doc/doxygen/lwip.Doxyfile +++ b/doc/doxygen/lwip.Doxyfile @@ -38,7 +38,7 @@ PROJECT_NAME = "lwIP" # could be handy for archiving the generated documentation or if some version # control system is used. -PROJECT_NUMBER = "2.2.0" +PROJECT_NUMBER = "2.2.1.dev" # Using the PROJECT_BRIEF tag one can provide an optional one line description # for a project that appears at the top of each page and should give viewer a diff --git a/src/Filelists.cmake b/src/Filelists.cmake index 3a0430e4..8008a440 100644 --- a/src/Filelists.cmake +++ b/src/Filelists.cmake @@ -14,11 +14,11 @@ endif() set(LWIP_VERSION_MAJOR "2") set(LWIP_VERSION_MINOR "2") -set(LWIP_VERSION_REVISION "0") +set(LWIP_VERSION_REVISION "1") # LWIP_VERSION_RC is set to LWIP_RC_RELEASE for official releases # LWIP_VERSION_RC is set to LWIP_RC_DEVELOPMENT for Git versions # Numbers 1..31 are reserved for release candidates -set(LWIP_VERSION_RC "LWIP_RC_RELEASE") +set(LWIP_VERSION_RC "LWIP_RC_DEVELOPMENT") if ("${LWIP_VERSION_RC}" STREQUAL "LWIP_RC_RELEASE") set(LWIP_VERSION_STRING diff --git a/src/include/lwip/init.h b/src/include/lwip/init.h index 43e5e04f..b10f7ec4 100644 --- a/src/include/lwip/init.h +++ b/src/include/lwip/init.h @@ -54,11 +54,11 @@ extern "C" { /** x.X.x: Minor version of the stack */ #define LWIP_VERSION_MINOR 2 /** x.x.X: Revision of the stack */ -#define LWIP_VERSION_REVISION 0 +#define LWIP_VERSION_REVISION 1 /** For release candidates, this is set to 1..254 * For official releases, this is set to 255 (LWIP_RC_RELEASE) * For development versions (Git), this is set to 0 (LWIP_RC_DEVELOPMENT) */ -#define LWIP_VERSION_RC LWIP_RC_RELEASE +#define LWIP_VERSION_RC LWIP_RC_DEVELOPMENT /** LWIP_VERSION_RC is set to LWIP_RC_RELEASE for official releases */ #define LWIP_RC_RELEASE 255 From 4e6dd9c5765a11d3a81d7cb39d8c2cb48d15385b Mon Sep 17 00:00:00 2001 From: Maxim Uvarov Date: Fri, 15 Sep 2023 16:42:33 +0200 Subject: [PATCH 02/94] ping: add stop function ping in raw mode does some set up and sets timeout, but clean up procedure is missing. That is needed for case if PING_RESULT() macro is used for application exit. Also implement stop functionality when using sockets. Running ping is stopped when calling ping_init() again. Signed-off-by: Maxim Uvarov Signed-off-by: Simon Goldschmidt --- contrib/apps/ping/ping.c | 33 ++++++++++++++++++++++++++++++++- contrib/apps/ping/ping.h | 1 + 2 files changed, 33 insertions(+), 1 deletion(-) diff --git a/contrib/apps/ping/ping.c b/contrib/apps/ping/ping.c index 143fb83e..bd0688f3 100644 --- a/contrib/apps/ping/ping.c +++ b/contrib/apps/ping/ping.c @@ -268,7 +268,7 @@ ping_thread(void *arg) LWIP_ASSERT("setting receive timeout failed", ret == 0); LWIP_UNUSED_ARG(ret); - while (1) { + while (ping_target != NULL) { if (ping_send(s, ping_target) == ERR_OK) { LWIP_DEBUGF( PING_DEBUG, ("ping: send ")); ip_addr_debug_print(PING_DEBUG, ping_target); @@ -285,6 +285,7 @@ ping_thread(void *arg) } sys_msleep(PING_DELAY); } + lwip_close(s); } #else /* PING_USE_SOCKETS */ @@ -376,16 +377,35 @@ void ping_send_now(void) { LWIP_ASSERT("ping_pcb != NULL", ping_pcb != NULL); + LWIP_ASSERT("ping_target != NULL", ping_target != NULL); ping_send(ping_pcb, ping_target); } +static void +ping_raw_stop(void) +{ + sys_untimeout(ping_timeout, ping_pcb); + if (ping_pcb != NULL) { + raw_remove(ping_pcb); + ping_pcb = NULL; + } +} + #endif /* PING_USE_SOCKETS */ +/** + * Initialize thread (socket mode) or timer (callback mode) to cyclically send pings + * to a target. + * Running ping is implicitly stopped. + */ void ping_init(const ip_addr_t* ping_addr) { + LWIP_ASSERT("ping_target != NULL", ping_target != NULL); ping_target = ping_addr; + ping_stop(); + #if PING_USE_SOCKETS sys_thread_new("ping_thread", ping_thread, NULL, DEFAULT_THREAD_STACKSIZE, DEFAULT_THREAD_PRIO); #else /* PING_USE_SOCKETS */ @@ -393,4 +413,15 @@ ping_init(const ip_addr_t* ping_addr) #endif /* PING_USE_SOCKETS */ } +/** + * Stop sending more pings. + */ +void ping_stop(void) +{ +#if !PING_USE_SOCKETS + ping_raw_stop(); +#endif /* !PING_USE_SOCKETS */ + ping_target = NULL; +} + #endif /* LWIP_RAW */ diff --git a/contrib/apps/ping/ping.h b/contrib/apps/ping/ping.h index 1f21c7b0..b6e06080 100644 --- a/contrib/apps/ping/ping.h +++ b/contrib/apps/ping/ping.h @@ -11,6 +11,7 @@ #endif void ping_init(const ip_addr_t* ping_addr); +void ping_stop(void); #if !PING_USE_SOCKETS void ping_send_now(void); From 3792075baffb6dd4c6f254e3c139a9d09cdf9f0a Mon Sep 17 00:00:00 2001 From: Simon Goldschmidt Date: Wed, 27 Sep 2023 21:01:52 +0200 Subject: [PATCH 03/94] Fix bug #64637 ("iperf -n 1000 -r" does not work) --- src/apps/lwiperf/lwiperf.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/apps/lwiperf/lwiperf.c b/src/apps/lwiperf/lwiperf.c index 26b1e3b5..144c8bd2 100644 --- a/src/apps/lwiperf/lwiperf.c +++ b/src/apps/lwiperf/lwiperf.c @@ -302,7 +302,7 @@ lwiperf_tcp_client_send_more(lwiperf_state_tcp_t *conn) /* this session is byte-limited */ u32_t amount_bytes = lwip_htonl(conn->settings.amount); /* @todo: this can send up to 1*MSS more than requested... */ - if (amount_bytes >= conn->bytes_transferred) { + if (conn->bytes_transferred >= amount_bytes) { /* all requested bytes transferred -> close the connection */ lwiperf_tcp_close(conn, LWIPERF_TCP_DONE_CLIENT); return ERR_OK; From f7fe057821a66548841f6efa504eec8569f0fc3a Mon Sep 17 00:00:00 2001 From: Simon Goldschmidt Date: Wed, 27 Sep 2023 21:28:29 +0200 Subject: [PATCH 04/94] win32 pcapif: fix "heap-use-after-free" on shutdown --- contrib/ports/win32/pcapif.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/contrib/ports/win32/pcapif.c b/contrib/ports/win32/pcapif.c index 58a42b4e..6bf58f02 100644 --- a/contrib/ports/win32/pcapif.c +++ b/contrib/ports/win32/pcapif.c @@ -679,12 +679,17 @@ pcapif_shutdown(struct netif *netif) #endif /* PCAPIF_RX_USE_THREAD */ if (pa->adapter) { pcap_breakloop(pa->adapter); - pcap_close(pa->adapter); } #if PCAPIF_RX_USE_THREAD /* wait for rxthread to end */ - while(pa->rx_running); + while (pa->rx_running) { + Sleep(100); + } #endif /* PCAPIF_RX_USE_THREAD */ + if (pa->adapter) { + pcap_close(pa->adapter); + pa->adapter = NULL; + } #if PCAPIF_HANDLE_LINKSTATE pcapifh_linkstate_close(pa->link_state); #endif /* PCAPIF_HANDLE_LINKSTATE */ From d8b97bfc5d34d6b049ccbe2e05ebc99205643e85 Mon Sep 17 00:00:00 2001 From: Simon Goldschmidt Date: Wed, 27 Sep 2023 21:49:24 +0200 Subject: [PATCH 05/94] icmp: fix bug #64211 (ICMP reply error when using bridge) when reusing an rx pbuf for tx, its if_idx has to be reset or else bridgeif_send_to_port() might drop it --- src/core/ipv4/icmp.c | 1 + 1 file changed, 1 insertion(+) diff --git a/src/core/ipv4/icmp.c b/src/core/ipv4/icmp.c index 9a82a67a..f35ff4b5 100644 --- a/src/core/ipv4/icmp.c +++ b/src/core/ipv4/icmp.c @@ -213,6 +213,7 @@ icmp_input(struct pbuf *p, struct netif *inp) ip4_addr_copy(iphdr->src, *src); ip4_addr_copy(iphdr->dest, *ip4_current_src_addr()); ICMPH_TYPE_SET(iecho, ICMP_ER); + p->if_idx = NETIF_NO_INDEX; /* we're reusing this pbuf, so reset its if_idx */ #if CHECKSUM_GEN_ICMP IF__NETIF_CHECKSUM_ENABLED(inp, NETIF_CHECKSUM_GEN_ICMP) { /* adjust the checksum */ From 4f78da983f4b6456e95244fa978f9e4458e3e6c6 Mon Sep 17 00:00:00 2001 From: Erik Ekman Date: Thu, 28 Sep 2023 21:06:09 +0200 Subject: [PATCH 06/94] ci: Bump github action version Fix warning: "The following actions uses node12 which is deprecated and will be forced to run on node16: actions/checkout@v2." --- .github/workflows/ci-linux.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci-linux.yml b/.github/workflows/ci-linux.yml index f97d23c9..6c3e5a98 100644 --- a/.github/workflows/ci-linux.yml +++ b/.github/workflows/ci-linux.yml @@ -15,7 +15,7 @@ jobs: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v4 - name: Install deps run: sudo apt-get install check ninja-build doxygen From 7807f706f357d2eea85d9927d970991dc4b1ef90 Mon Sep 17 00:00:00 2001 From: Erik Ekman Date: Thu, 28 Sep 2023 22:06:27 +0200 Subject: [PATCH 07/94] nd6: Update RA link-local addr option length check lwIP might support different hardware address lengths (when using Ethernet and 6LoWPAN for instance). Match provided lladdr length from Router Advertisement to the current network interface instead of comparing against longest that can be stored. --- CHANGELOG | 5 +++++ src/core/ipv6/nd6.c | 5 +++-- src/include/lwip/prot/nd6.h | 1 + 3 files changed, 9 insertions(+), 2 deletions(-) diff --git a/CHANGELOG b/CHANGELOG index 5d5f81ad..e113c2ad 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -6,6 +6,11 @@ HISTORY * [Enter new changes just after this line - do not remove this line] + ++ Bugfixes: + + 2023-09-28: Erik Ekman + * Fix ND6 Router Advertisement parsing when NETIF_MAX_HWADDR_LEN is above 6. + (STABLE-2.2.0): 2018-10-02: Dirk Ziegelmeier diff --git a/src/core/ipv6/nd6.c b/src/core/ipv6/nd6.c index 3b13c21e..c566c572 100644 --- a/src/core/ipv6/nd6.c +++ b/src/core/ipv6/nd6.c @@ -687,11 +687,12 @@ nd6_input(struct pbuf *p, struct netif *inp) case ND6_OPTION_TYPE_SOURCE_LLADDR: { struct lladdr_option *lladdr_opt; - if (option_len < sizeof(struct lladdr_option)) { + if (option_len < ND6_LLADDR_OPTION_MIN_LENGTH) { goto lenerr_drop_free_return; } lladdr_opt = (struct lladdr_option *)buffer; - if ((default_router_list[i].neighbor_entry != NULL) && + if ((lladdr_opt->length == inp->hwaddr_len) && + (default_router_list[i].neighbor_entry != NULL) && (default_router_list[i].neighbor_entry->state == ND6_INCOMPLETE)) { SMEMCPY(default_router_list[i].neighbor_entry->lladdr, lladdr_opt->addr, inp->hwaddr_len); default_router_list[i].neighbor_entry->state = ND6_REACHABLE; diff --git a/src/include/lwip/prot/nd6.h b/src/include/lwip/prot/nd6.h index c270d07c..a92d34d9 100644 --- a/src/include/lwip/prot/nd6.h +++ b/src/include/lwip/prot/nd6.h @@ -153,6 +153,7 @@ PACK_STRUCT_END /** Link-layer address option. */ #define ND6_OPTION_TYPE_SOURCE_LLADDR (0x01) #define ND6_OPTION_TYPE_TARGET_LLADDR (0x02) +#define ND6_LLADDR_OPTION_MIN_LENGTH (2) #ifdef PACK_STRUCT_USE_INCLUDES # include "arch/bpstruct.h" #endif From 2159f846821e2be0bb9477c82c33581262708b56 Mon Sep 17 00:00:00 2001 From: Simon Goldschmidt Date: Thu, 28 Sep 2023 22:29:15 +0200 Subject: [PATCH 08/94] httpd: compare client requests case-insensitive Fixes bug #10047 (Fix case-sensitive comparison of Content-Length header for POST requests) Signed-off-by: Simon Goldschmidt --- src/apps/http/httpd.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/apps/http/httpd.c b/src/apps/http/httpd.c index 9477e855..56e8cad4 100644 --- a/src/apps/http/httpd.c +++ b/src/apps/http/httpd.c @@ -1818,7 +1818,7 @@ http_post_request(struct pbuf *inp, struct http_state *hs, #define HTTP_HDR_CONTENT_LEN "Content-Length: " #define HTTP_HDR_CONTENT_LEN_LEN 16 #define HTTP_HDR_CONTENT_LEN_DIGIT_MAX_LEN 10 - char *scontent_len = lwip_strnstr(uri_end + 1, HTTP_HDR_CONTENT_LEN, crlfcrlf - (uri_end + 1)); + char *scontent_len = lwip_strnistr(uri_end + 1, HTTP_HDR_CONTENT_LEN, crlfcrlf - (uri_end + 1)); if (scontent_len != NULL) { char *scontent_len_end = lwip_strnstr(scontent_len + HTTP_HDR_CONTENT_LEN_LEN, CRLF, HTTP_HDR_CONTENT_LEN_DIGIT_MAX_LEN); if (scontent_len_end != NULL) { @@ -2086,8 +2086,8 @@ http_parse_request(struct pbuf *inp, struct http_state *hs, struct altcp_pcb *pc #if LWIP_HTTPD_SUPPORT_11_KEEPALIVE /* This is HTTP/1.0 compatible: for strict 1.1, a connection would always be persistent unless "close" was specified. */ - if (!is_09 && (lwip_strnstr(data, HTTP11_CONNECTIONKEEPALIVE, data_len) || - lwip_strnstr(data, HTTP11_CONNECTIONKEEPALIVE2, data_len))) { + if (!is_09 && (lwip_strnistr(data, HTTP11_CONNECTIONKEEPALIVE, data_len) || + lwip_strnistr(data, HTTP11_CONNECTIONKEEPALIVE2, data_len))) { hs->keepalive = 1; } else { hs->keepalive = 0; From 6f700a157d1049a06ab9c467057d71e98e7798de Mon Sep 17 00:00:00 2001 From: Erik Ekman Date: Thu, 28 Sep 2023 22:33:41 +0200 Subject: [PATCH 09/94] nd6: Fix RA link-local address option length check Length field is in units of 8 bytes. --- src/core/ipv6/nd6.c | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/core/ipv6/nd6.c b/src/core/ipv6/nd6.c index c566c572..55b5774f 100644 --- a/src/core/ipv6/nd6.c +++ b/src/core/ipv6/nd6.c @@ -687,12 +687,11 @@ nd6_input(struct pbuf *p, struct netif *inp) case ND6_OPTION_TYPE_SOURCE_LLADDR: { struct lladdr_option *lladdr_opt; - if (option_len < ND6_LLADDR_OPTION_MIN_LENGTH) { + if (option_len < (ND6_LLADDR_OPTION_MIN_LENGTH + inp->hwaddr_len)) { goto lenerr_drop_free_return; } lladdr_opt = (struct lladdr_option *)buffer; - if ((lladdr_opt->length == inp->hwaddr_len) && - (default_router_list[i].neighbor_entry != NULL) && + if ((default_router_list[i].neighbor_entry != NULL) && (default_router_list[i].neighbor_entry->state == ND6_INCOMPLETE)) { SMEMCPY(default_router_list[i].neighbor_entry->lladdr, lladdr_opt->addr, inp->hwaddr_len); default_router_list[i].neighbor_entry->state = ND6_REACHABLE; From 339372919aa21779b2b8eb90525d5b2b6c304321 Mon Sep 17 00:00:00 2001 From: Erik Ekman Date: Thu, 28 Sep 2023 23:01:42 +0200 Subject: [PATCH 10/94] mem: Include stdio.h Memory overflow checks uses snprintf. Reported in bug #63904. --- src/core/mem.c | 1 + 1 file changed, 1 insertion(+) diff --git a/src/core/mem.c b/src/core/mem.c index 8566edce..67ee5675 100644 --- a/src/core/mem.c +++ b/src/core/mem.c @@ -60,6 +60,7 @@ #include "lwip/stats.h" #include "lwip/err.h" +#include /* snprintf */ #include #if MEM_LIBC_MALLOC From 0d5db9469e3178c5201f4e56908d1490a36a1e7a Mon Sep 17 00:00:00 2001 From: Florian La Roche Date: Thu, 28 Sep 2023 23:15:53 +0200 Subject: [PATCH 11/94] opt.h: Fix typo --- src/include/lwip/opt.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/include/lwip/opt.h b/src/include/lwip/opt.h index c27dd034..7f3eef2f 100644 --- a/src/include/lwip/opt.h +++ b/src/include/lwip/opt.h @@ -671,7 +671,7 @@ #endif /** - * LWIP_VLAN_PCP==1: Enable outgoing VLAN taggning of frames on a per-PCB basis + * LWIP_VLAN_PCP==1: Enable outgoing VLAN tagging of frames on a per-PCB basis * for QoS purposes. With this feature enabled, each PCB has a new variable: * "netif_hints.tci" (Tag Control Identifier). * The TCI contains three fields: VID, CFI and PCP. From 2d6883c4326c741f1f5e3472028c602cfe602e0c Mon Sep 17 00:00:00 2001 From: Simon Goldschmidt Date: Fri, 29 Sep 2023 21:38:29 +0200 Subject: [PATCH 12/94] minor: fix spaces in unix/lib/lwipopts.h --- contrib/ports/unix/lib/lwipopts.h | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/contrib/ports/unix/lib/lwipopts.h b/contrib/ports/unix/lib/lwipopts.h index 231fc779..665ecaf3 100644 --- a/contrib/ports/unix/lib/lwipopts.h +++ b/contrib/ports/unix/lib/lwipopts.h @@ -238,7 +238,7 @@ /** * IP_FRAG_USES_STATIC_BUF==1: Use a static MTU-sized buffer for IP * fragmentation. Otherwise pbufs are allocated and reference the original - * packet data to be fragmented. + * packet data to be fragmented. */ #define IP_FRAG_USES_STATIC_BUF 0 @@ -359,7 +359,6 @@ * PBUF_POOL_BUFSIZE: the size of each pbuf in the pbuf pool. The default is * designed to accommodate single full size TCP frame in one pbuf, including * TCP_MSS, IP header, and link header. -* */ #define PBUF_POOL_BUFSIZE LWIP_MEM_ALIGN_SIZE(TCP_MSS+40+PBUF_LINK_HLEN) From 14444c1c7f00dd7783753361e7b3f538292faf2a Mon Sep 17 00:00:00 2001 From: Simon Goldschmidt Date: Fri, 29 Sep 2023 22:08:03 +0200 Subject: [PATCH 13/94] mqtt: support binary Will Message see patch #10049 --- contrib/examples/mqtt/mqtt_example.c | 1 + src/apps/mqtt/mqtt.c | 13 ++++++++++--- src/include/lwip/apps/mqtt.h | 2 ++ test/unit/mqtt/test_mqtt.c | 2 +- 4 files changed, 14 insertions(+), 4 deletions(-) diff --git a/contrib/examples/mqtt/mqtt_example.c b/contrib/examples/mqtt/mqtt_example.c index bb277d6f..9cf188df 100644 --- a/contrib/examples/mqtt/mqtt_example.c +++ b/contrib/examples/mqtt/mqtt_example.c @@ -54,6 +54,7 @@ static const struct mqtt_connect_client_info_t mqtt_client_info = 100, /* keep alive */ NULL, /* will_topic */ NULL, /* will_msg */ + 0, /* will_msg_len */ 0, /* will_qos */ 0 /* will_retain */ #if LWIP_ALTCP && LWIP_ALTCP_TLS diff --git a/src/apps/mqtt/mqtt.c b/src/apps/mqtt/mqtt.c index 699061b2..33c89add 100644 --- a/src/apps/mqtt/mqtt.c +++ b/src/apps/mqtt/mqtt.c @@ -1337,9 +1337,16 @@ mqtt_client_connect(mqtt_client_t *client, const ip_addr_t *ip_addr, u16_t port, LWIP_ERROR("mqtt_client_connect: client_info->will_topic length overflow", len <= 0xFF, return ERR_VAL); LWIP_ERROR("mqtt_client_connect: client_info->will_topic length must be > 0", len > 0, return ERR_VAL); will_topic_len = (u8_t)len; - len = strlen(client_info->will_msg); - LWIP_ERROR("mqtt_client_connect: client_info->will_msg length overflow", len <= 0xFF, return ERR_VAL); - will_msg_len = (u8_t)len; + if (client_info->will_msg_len == 0) + { + len = strlen(client_info->will_msg); + LWIP_ERROR("mqtt_client_connect: client_info->will_msg length overflow", len <= 0xFF, return ERR_VAL); + will_msg_len = (u8_t)len; + } + else + { + will_msg_len = client_info->will_msg_len; + } len = remaining_length + 2 + will_topic_len + 2 + will_msg_len; LWIP_ERROR("mqtt_client_connect: remaining_length overflow", len <= 0xFFFF, return ERR_VAL); remaining_length = (u16_t)len; diff --git a/src/include/lwip/apps/mqtt.h b/src/include/lwip/apps/mqtt.h index bece4005..f1583fc4 100644 --- a/src/include/lwip/apps/mqtt.h +++ b/src/include/lwip/apps/mqtt.h @@ -79,6 +79,8 @@ struct mqtt_connect_client_info_t { const char* will_topic; /** will_msg, see will_topic */ const char* will_msg; + /** will_msg length, 0 to compute length from will_msg string */ + u8_t will_msg_len; /** will_qos, see will_topic */ u8_t will_qos; /** will_retain, see will_topic */ diff --git a/test/unit/mqtt/test_mqtt.c b/test/unit/mqtt/test_mqtt.c index 7cff13ea..9722aa66 100644 --- a/test/unit/mqtt/test_mqtt.c +++ b/test/unit/mqtt/test_mqtt.c @@ -77,7 +77,7 @@ START_TEST(basic_connect) "dumm", NULL, NULL, 10, - NULL, NULL, 0, 0 + NULL, NULL, 0, 0, 0 }; struct pbuf *p; unsigned char rxbuf[] = {0x20, 0x02, 0x00, 0x00}; From dad8c4c72af3db99fefbb37af28fefc93246a2b2 Mon Sep 17 00:00:00 2001 From: Yonggang Luo Date: Thu, 8 Apr 2021 20:04:27 +0800 Subject: [PATCH 14/94] guard when data is NULL [build] ../../3rd/lwip/src/include/lwip/opt.h:137:41: error: argument 2 null where non-null expected [-Werror=nonnull] [build] #define MEMCPY(dst,src,len) memcpy(dst,src,len) [build] ^~~~~~~~~~~~~~~~~~~ [build] ../../3rd/lwip/src/netif/ppp/fsm.c:791:7: note: in expansion of macro 'MEMCPY' [build] MEMCPY(outp + PPP_HDRLEN + HEADERLEN, data, datalen); [build] ^~~~~~ [build] In file included from c:\mentorgraphics\fly380s_8910\prebuilts\win32\gcc-arm-none-eabi\arm-none-eabi\include\sys\time.h:40:0, [build] from ../../3rd/../src/cat1/arch/cc.h:40, [build] from ../../3rd/lwip/src/include/lwip/arch.h:50, [build] from ../../3rd/lwip/src/include/lwip/debug.h:40, [build] from ../../3rd/lwip/src/include/lwip/opt.h:52, [build] from ../../3rd/lwip/src/include/netif/ppp/ppp_opts.h:31, [build] from ../../3rd/lwip/src/netif/ppp/fsm.c:43: [build] c:\mentorgraphics\fly380s_8910\prebuilts\win32\gcc-arm-none-eabi\arm-none-eabi\include\string.h:31:8: note: in a call to function 'memcpy' declared here [build] _PTR _EXFUN(memcpy,(_PTR __restrict, const _PTR __restrict, size_t)); [build] ^ --- src/netif/ppp/fsm.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/netif/ppp/fsm.c b/src/netif/ppp/fsm.c index 2ba1207b..90a227c8 100644 --- a/src/netif/ppp/fsm.c +++ b/src/netif/ppp/fsm.c @@ -787,8 +787,9 @@ void fsm_sdata(fsm *f, u_char code, u_char id, const u_char *data, int datalen) } outp = (u_char*)p->payload; - if (datalen) /* && data != outp + PPP_HDRLEN + HEADERLEN) -- was only for fsm_sconfreq() */ - MEMCPY(outp + PPP_HDRLEN + HEADERLEN, data, datalen); + if (datalen && data != NULL) { /* && data != outp + PPP_HDRLEN + HEADERLEN) -- was only for fsm_sconfreq() */ + MEMCPY(outp + PPP_HDRLEN + HEADERLEN, data, datalen); + } MAKEHEADER(outp, f->protocol); PUTCHAR(code, outp); PUTCHAR(id, outp); From de6b0a35f84fa5bb2352be452bd3c0d544c1dc81 Mon Sep 17 00:00:00 2001 From: Maxim Uvarov Date: Mon, 2 Oct 2023 18:43:25 +0600 Subject: [PATCH 15/94] ping: do not clear IP address with ping_stop at the init commit 4e6dd9 "ping: add stop function", was corrected and wrongly added stop function after IP address set up. Signed-off-by: Maxim Uvarov --- contrib/apps/ping/ping.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/contrib/apps/ping/ping.c b/contrib/apps/ping/ping.c index bd0688f3..1d2e8bb9 100644 --- a/contrib/apps/ping/ping.c +++ b/contrib/apps/ping/ping.c @@ -401,11 +401,11 @@ ping_raw_stop(void) void ping_init(const ip_addr_t* ping_addr) { + ping_stop(); + LWIP_ASSERT("ping_target != NULL", ping_target != NULL); ping_target = ping_addr; - ping_stop(); - #if PING_USE_SOCKETS sys_thread_new("ping_thread", ping_thread, NULL, DEFAULT_THREAD_STACKSIZE, DEFAULT_THREAD_PRIO); #else /* PING_USE_SOCKETS */ From ae5a5b99eb29b9dd4a5f6fe4f6a717a3178c1141 Mon Sep 17 00:00:00 2001 From: Simon Goldschmidt Date: Tue, 3 Oct 2023 17:31:19 +0200 Subject: [PATCH 16/94] tcp: fix compiling with LWIP_NOASSERT See bug #64734 --- contrib/examples/tftp/tftp_example.c | 1 + src/core/tcp_out.c | 3 +++ 2 files changed, 4 insertions(+) diff --git a/contrib/examples/tftp/tftp_example.c b/contrib/examples/tftp/tftp_example.c index 3e140146..f6a28b4f 100644 --- a/contrib/examples/tftp/tftp_example.c +++ b/contrib/examples/tftp/tftp_example.c @@ -141,6 +141,7 @@ tftp_example_init_client(void) ip_addr_t srv; int ret = ipaddr_aton(LWIP_TFTP_EXAMPLE_CLIENT_REMOTEIP, &srv); LWIP_ASSERT("ipaddr_aton failed", ret == 1); + LWIP_UNUSED_ARG(ret); err = tftp_init_client(&tftp); LWIP_ASSERT("tftp_init_client failed", err == ERR_OK); diff --git a/src/core/tcp_out.c b/src/core/tcp_out.c index 64579ee5..fee3f5ad 100644 --- a/src/core/tcp_out.c +++ b/src/core/tcp_out.c @@ -1987,6 +1987,9 @@ tcp_rst_common(const struct tcp_pcb *pcb, u32_t seqno, u32_t ackno, LWIP_ASSERT("tcp_rst: invalid local_ip", local_ip != NULL); LWIP_ASSERT("tcp_rst: invalid remote_ip", remote_ip != NULL); + /* these two are passed only for checks, disable warnings without asserts */ + LWIP_UNUSED_ARG(local_ip); + LWIP_UNUSED_ARG(remote_ip); optlen = LWIP_TCP_OPT_LENGTH_SEGMENT(0, pcb); From 1ef61892871802f27639f700f456f675dbae0d15 Mon Sep 17 00:00:00 2001 From: Simon Goldschmidt Date: Tue, 3 Oct 2023 17:34:53 +0200 Subject: [PATCH 17/94] pbuf: fix "returns" documentation on pbuf_get_contiguous() See bug #64049 --- src/core/pbuf.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/core/pbuf.c b/src/core/pbuf.c index 1fb64d41..eec83706 100644 --- a/src/core/pbuf.c +++ b/src/core/pbuf.c @@ -1099,7 +1099,7 @@ pbuf_copy_partial(const struct pbuf *buf, void *dataptr, u16_t len, u16_t offset * @param len length of data to copy (dataptr must be big enough). No more * than buf->tot_len will be copied, irrespective of len * @param offset offset into the packet buffer from where to begin copying len bytes - * @return the number of bytes copied, or 0 on failure + * @return pointer to 'buffer' on success or NULL on error */ void * pbuf_get_contiguous(const struct pbuf *p, void *buffer, size_t bufsize, u16_t len, u16_t offset) From f85ed72bac6aaf292922898a0d89cd8d746e319c Mon Sep 17 00:00:00 2001 From: Simon Goldschmidt Date: Tue, 3 Oct 2023 17:50:28 +0200 Subject: [PATCH 18/94] ipv6: frag: fix bogus icmp6 response on reassembly timeout See bug #63929 --- src/core/ipv6/ip6_frag.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/core/ipv6/ip6_frag.c b/src/core/ipv6/ip6_frag.c index 16bcf950..5bee2d4f 100644 --- a/src/core/ipv6/ip6_frag.c +++ b/src/core/ipv6/ip6_frag.c @@ -162,7 +162,7 @@ ip6_reass_free_complete_datagram(struct ip6_reassdata *ipr) ipr->p = iprh->next_pbuf; /* Restore the part that we've overwritten with our helper structure, or we * might send garbage (and disclose a pointer) in the ICMPv6 reply. */ - MEMCPY(p->payload, ipr->orig_hdr, sizeof(iprh)); + MEMCPY(p->payload, ipr->orig_hdr, sizeof(*iprh)); /* Then, move back to the original ipv6 header (we are now pointing to Fragment header). This cannot fail since we already checked when receiving this fragment. */ if (pbuf_header_force(p, (s16_t)((u8_t*)p->payload - (u8_t*)ipr->iphdr))) { From 5fea01a0a84a60f98404bcc054ae5f20b7db9da1 Mon Sep 17 00:00:00 2001 From: Simon Goldschmidt Date: Tue, 3 Oct 2023 21:09:51 +0200 Subject: [PATCH 19/94] msvc: add project + sln for fuzz tests --- .gitignore | 6 + contrib/ports/win32/msvc/lwIP.vcxproj | 108 +++++++++ contrib/ports/win32/msvc/lwIP_fuzz.sln | 45 ++++ contrib/ports/win32/msvc/lwip_fuzz.vcxproj | 256 +++++++++++++++++++++ 4 files changed, 415 insertions(+) create mode 100644 contrib/ports/win32/msvc/lwIP_fuzz.sln create mode 100644 contrib/ports/win32/msvc/lwip_fuzz.vcxproj diff --git a/.gitignore b/.gitignore index 2fbaca4f..875ba48c 100644 --- a/.gitignore +++ b/.gitignore @@ -35,8 +35,14 @@ /contrib/ports/win32/msvc/Debug /contrib/ports/win32/msvc/Debug unittests +/contrib/ports/win32/msvc/Debug fuzz +/contrib/ports/win32/msvc/Debug fuzz2 +/contrib/ports/win32/msvc/Debug fuzz3 /contrib/ports/win32/msvc/Release /contrib/ports/win32/msvc/Release unittests +/contrib/ports/win32/msvc/Release fuzz +/contrib/ports/win32/msvc/Release fuzz2 +/contrib/ports/win32/msvc/Release fuzz3 /contrib/ports/win32/msvc/*.user /contrib/ports/win32/msvc/*.ncb /contrib/ports/win32/msvc/*.cache diff --git a/contrib/ports/win32/msvc/lwIP.vcxproj b/contrib/ports/win32/msvc/lwIP.vcxproj index 5e7587f1..a3552d2f 100644 --- a/contrib/ports/win32/msvc/lwIP.vcxproj +++ b/contrib/ports/win32/msvc/lwIP.vcxproj @@ -1,6 +1,10 @@  + + Debug fuzz + Win32 + Debug unittests Win32 @@ -9,6 +13,10 @@ Debug Win32 + + Release fuzz + Win32 + Release unittests Win32 @@ -28,12 +36,24 @@ MultiByte v143 + + StaticLibrary + false + MultiByte + v143 + StaticLibrary false MultiByte v143 + + StaticLibrary + false + MultiByte + v143 + StaticLibrary false @@ -53,10 +73,18 @@ + + + + + + + + @@ -71,9 +99,13 @@ $(Configuration)\$(ProjectName)\ $(Configuration)\$(ProjectName)\ $(Configuration)\$(ProjectName)\ + $(Configuration)\$(ProjectName)\ $(Configuration)\$(ProjectName)\ + $(Configuration)\$(ProjectName)\ $(Configuration)\$(ProjectName)\ + $(Configuration)\$(ProjectName)\ $(Configuration)\$(ProjectName)\ + $(Configuration)\$(ProjectName)\ $(Configuration)\$(ProjectName)\ $(Configuration)\$(ProjectName)\ @@ -149,6 +181,30 @@ true + + + Disabled + ..\..\..\..\test\fuzz;..\..\..\..\src\include;..\..\..\..\src\include\ipv4;..\..\..\..\src\include\ipv6;..\include;..\..\..\examples\example_app;%(AdditionalIncludeDirectories) + _LIB;WIN32;_DEBUG;LWIP_DEBUG;%(PreprocessorDefinitions) + EnableFastChecks + MultiThreadedDebug + + + $(IntDir)$(ProjectName).pdb + Level4 + true + EditAndContinue + Default + true + + + _DEBUG;%(PreprocessorDefinitions) + 0x0407 + + + true + + MaxSpeed @@ -173,49 +229,87 @@ true + + + MaxSpeed + OnlyExplicitInline + ..\..\..\..\test\fuzz;..\..\..\..\src\include;..\..\..\..\src\include\ipv4;..\..\..\..\src\include\ipv6;..\include;..\..\..\examples\example_app;%(AdditionalIncludeDirectories) + WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions) + true + MultiThreaded + true + $(IntDir)$(ProjectName).pdb + Level4 + true + ProgramDatabase + Default + true + + + NDEBUG;%(PreprocessorDefinitions) + 0x0407 + + + true + + true + true true true + true true Document true + true true true + true true true + true true true + true true true + true true true + true true true + true true true + true true true + true true true + true true Document true + true true true + true true @@ -224,8 +318,10 @@ Document true + true true true + true true @@ -243,16 +339,20 @@ true + true true true + true true true + true true true + true true @@ -268,13 +368,17 @@ ..\..\..\..\..\mbedtls\include;..\..\..\..\src\include;..\..\..\..\src\include\ipv4;..\..\..\..\src\include\ipv6;..\include;..;..\..\..\apps\snmp_private_mib;%(AdditionalIncludeDirectories) ..\..\..\..\..\mbedtls\include;..\..\..\..\src\include;..\..\..\..\src\include\ipv4;..\..\..\..\src\include\ipv6;..\include;..;..\..\..\apps\snmp_private_mib;%(AdditionalIncludeDirectories) ..\..\..\..\..\mbedtls\include;..\..\..\..\test\unit;..\..\..\..\src\include;..\..\..\..\src\include\ipv4;..\..\..\..\src\include\ipv6;..\include;..;%(AdditionalIncludeDirectories) + ..\..\..\..\..\mbedtls\include;..\..\..\..\test\unit;..\..\..\..\src\include;..\..\..\..\src\include\ipv4;..\..\..\..\src\include\ipv6;..\include;..;%(AdditionalIncludeDirectories) ..\..\..\..\..\mbedtls\include;..\..\..\..\test\unit;..\..\..\..\src\include;..\..\..\..\src\include\ipv4;..\..\..\..\src\include\ipv6;..\include;..;%(AdditionalIncludeDirectories) + ..\..\..\..\..\mbedtls\include;..\..\..\..\test\unit;..\..\..\..\src\include;..\..\..\..\src\include\ipv4;..\..\..\..\src\include\ipv6;..\include;..;%(AdditionalIncludeDirectories) ..\..\..\..\..\mbedtls\include;..\..\..\..\src\include;..\..\..\..\src\include\ipv4;..\..\..\..\src\include\ipv6;..\include;..;..\..\..\apps\snmp_private_mib;%(AdditionalIncludeDirectories) ..\..\..\..\..\mbedtls\include;..\..\..\..\src\include;..\..\..\..\src\include\ipv4;..\..\..\..\src\include\ipv6;..\include;..;..\..\..\apps\snmp_private_mib;%(AdditionalIncludeDirectories) ..\..\..\..\..\mbedtls\include;..\..\..\..\test\unit;..\..\..\..\src\include;..\..\..\..\src\include\ipv4;..\..\..\..\src\include\ipv6;..\include;..;%(AdditionalIncludeDirectories) + ..\..\..\..\..\mbedtls\include;..\..\..\..\test\unit;..\..\..\..\src\include;..\..\..\..\src\include\ipv4;..\..\..\..\src\include\ipv6;..\include;..;%(AdditionalIncludeDirectories) ..\..\..\..\..\mbedtls\include;..\..\..\..\test\unit;..\..\..\..\src\include;..\..\..\..\src\include\ipv4;..\..\..\..\src\include\ipv6;..\include;..;%(AdditionalIncludeDirectories) + ..\..\..\..\..\mbedtls\include;..\..\..\..\test\unit;..\..\..\..\src\include;..\..\..\..\src\include\ipv4;..\..\..\..\src\include\ipv6;..\include;..;%(AdditionalIncludeDirectories) @@ -362,8 +466,10 @@ true + true true true + true true @@ -393,8 +499,10 @@ ..\..\..\..\..\mbedtls\include;..\..\..\..\src\include;..\..\..\..\src\include\ipv4;..\..\..\..\src\include\ipv6;..\include;..;..\..\..\apps\snmp_private_mib;%(AdditionalIncludeDirectories) + ..\..\..\..\..\mbedtls\include;..\..\..\..\src\include;..\..\..\..\src\include\ipv4;..\..\..\..\src\include\ipv6;..\include;..;..\..\..\apps\snmp_private_mib;%(AdditionalIncludeDirectories) ..\..\..\..\..\mbedtls\include;..\..\..\..\src\include;..\..\..\..\src\include\ipv4;..\..\..\..\src\include\ipv6;..\include;..;..\..\..\apps\snmp_private_mib;%(AdditionalIncludeDirectories) ..\..\..\..\..\mbedtls\include;..\..\..\..\src\include;..\..\..\..\src\include\ipv4;..\..\..\..\src\include\ipv6;..\include;..;..\..\..\apps\snmp_private_mib;%(AdditionalIncludeDirectories) + ..\..\..\..\..\mbedtls\include;..\..\..\..\src\include;..\..\..\..\src\include\ipv4;..\..\..\..\src\include\ipv6;..\include;..;..\..\..\apps\snmp_private_mib;%(AdditionalIncludeDirectories) ..\..\..\..\..\mbedtls\include;..\..\..\..\src\include;..\..\..\..\src\include\ipv4;..\..\..\..\src\include\ipv6;..\include;..;..\..\..\apps\snmp_private_mib;%(AdditionalIncludeDirectories) diff --git a/contrib/ports/win32/msvc/lwIP_fuzz.sln b/contrib/ports/win32/msvc/lwIP_fuzz.sln new file mode 100644 index 00000000..ceb9660c --- /dev/null +++ b/contrib/ports/win32/msvc/lwIP_fuzz.sln @@ -0,0 +1,45 @@ +Microsoft Visual Studio Solution File, Format Version 11.00 +# Visual C++ Express 2010 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "lwIP", "lwIP.vcxproj", "{2CC276FA-B226-49C9-8F82-7FCD5A228E28}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "lwip_fuzz", "lwip_fuzz.vcxproj", "{71B3B3F4-621C-11EE-8C99-0242AC120002}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug_fuzz2|x86 = Debug_fuzz2|x86 + Debug_fuzz3|x86 = Debug_fuzz3|x86 + Debug|x86 = Debug|x86 + Release_fuzz2|x86 = Release_fuzz2|x86 + Release_fuzz3|x86 = Release_fuzz3|x86 + Release|x86 = Release|x86 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {2CC276FA-B226-49C9-8F82-7FCD5A228E28}.Debug_fuzz2|x86.ActiveCfg = Debug fuzz|Win32 + {2CC276FA-B226-49C9-8F82-7FCD5A228E28}.Debug_fuzz2|x86.Build.0 = Debug fuzz|Win32 + {2CC276FA-B226-49C9-8F82-7FCD5A228E28}.Debug_fuzz3|x86.ActiveCfg = Debug fuzz|Win32 + {2CC276FA-B226-49C9-8F82-7FCD5A228E28}.Debug_fuzz3|x86.Build.0 = Debug fuzz|Win32 + {2CC276FA-B226-49C9-8F82-7FCD5A228E28}.Debug|x86.ActiveCfg = Debug fuzz|Win32 + {2CC276FA-B226-49C9-8F82-7FCD5A228E28}.Debug|x86.Build.0 = Debug fuzz|Win32 + {2CC276FA-B226-49C9-8F82-7FCD5A228E28}.Release_fuzz2|x86.ActiveCfg = Release fuzz|Win32 + {2CC276FA-B226-49C9-8F82-7FCD5A228E28}.Release_fuzz2|x86.Build.0 = Release fuzz|Win32 + {2CC276FA-B226-49C9-8F82-7FCD5A228E28}.Release_fuzz3|x86.ActiveCfg = Release fuzz|Win32 + {2CC276FA-B226-49C9-8F82-7FCD5A228E28}.Release_fuzz3|x86.Build.0 = Release fuzz|Win32 + {2CC276FA-B226-49C9-8F82-7FCD5A228E28}.Release|x86.ActiveCfg = Release fuzz|Win32 + {2CC276FA-B226-49C9-8F82-7FCD5A228E28}.Release|x86.Build.0 = Release fuzz|Win32 + {71B3B3F4-621C-11EE-8C99-0242AC120002}.Debug_fuzz2|x86.ActiveCfg = Debug fuzz2|Win32 + {71B3B3F4-621C-11EE-8C99-0242AC120002}.Debug_fuzz2|x86.Build.0 = Debug fuzz2|Win32 + {71B3B3F4-621C-11EE-8C99-0242AC120002}.Debug_fuzz3|x86.ActiveCfg = Debug fuzz3|Win32 + {71B3B3F4-621C-11EE-8C99-0242AC120002}.Debug_fuzz3|x86.Build.0 = Debug fuzz3|Win32 + {71B3B3F4-621C-11EE-8C99-0242AC120002}.Debug|x86.ActiveCfg = Debug|Win32 + {71B3B3F4-621C-11EE-8C99-0242AC120002}.Debug|x86.Build.0 = Debug|Win32 + {71B3B3F4-621C-11EE-8C99-0242AC120002}.Release_fuzz2|x86.ActiveCfg = Release fuzz2|Win32 + {71B3B3F4-621C-11EE-8C99-0242AC120002}.Release_fuzz2|x86.Build.0 = Release fuzz2|Win32 + {71B3B3F4-621C-11EE-8C99-0242AC120002}.Release_fuzz3|x86.ActiveCfg = Release fuzz3|Win32 + {71B3B3F4-621C-11EE-8C99-0242AC120002}.Release_fuzz3|x86.Build.0 = Release fuzz3|Win32 + {71B3B3F4-621C-11EE-8C99-0242AC120002}.Release|x86.ActiveCfg = Release|Win32 + {71B3B3F4-621C-11EE-8C99-0242AC120002}.Release|x86.Build.0 = Release|Win32 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/contrib/ports/win32/msvc/lwip_fuzz.vcxproj b/contrib/ports/win32/msvc/lwip_fuzz.vcxproj new file mode 100644 index 00000000..c7b0dbfa --- /dev/null +++ b/contrib/ports/win32/msvc/lwip_fuzz.vcxproj @@ -0,0 +1,256 @@ + + + + + Debug fuzz2 + Win32 + + + Debug fuzz3 + Win32 + + + Debug + Win32 + + + Release fuzz2 + Win32 + + + Release fuzz3 + Win32 + + + Release + Win32 + + + + {71B3B3F4-621C-11EE-8C99-0242AC120002} + lwip_fuzz + + + + Application + MultiByte + true + v143 + + + Application + MultiByte + true + v143 + + + Application + MultiByte + true + v143 + + + Application + MultiByte + v143 + + + Application + MultiByte + v143 + + + Application + MultiByte + v143 + + + + + + + + + + + + + + + + + + + + + + + + + <_ProjectFileVersion>10.0.40219.1 + $(Configuration)\$(ProjectName)\ + $(Configuration)\$(ProjectName)\ + $(Configuration)\$(ProjectName)\ + $(Configuration)\$(ProjectName)\ + $(Configuration)\$(ProjectName)\ + $(Configuration)\$(ProjectName)\ + + + + Disabled + ..\..\..\..\test\fuzz;..\..\..\..\src\include;..\..\..\..\src\include\ipv4;..\..\..\..\src\include\ipv6;..\include;..;%(AdditionalIncludeDirectories) + _LIB;WIN32;_DEBUG;LWIP_DEBUG;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebug + Level4 + EditAndContinue + 4820 + + + true + false + + + MachineX86 + + + + + Disabled + ..\..\..\..\test\fuzz;..\..\..\..\src\include;..\..\..\..\src\include\ipv4;..\..\..\..\src\include\ipv6;..\include;..;%(AdditionalIncludeDirectories) + _LIB;WIN32;_DEBUG;LWIP_DEBUG;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebug + Level4 + EditAndContinue + 4820 + + + true + false + + + MachineX86 + + + + + Disabled + ..\..\..\..\test\fuzz;..\..\..\..\src\include;..\..\..\..\src\include\ipv4;..\..\..\..\src\include\ipv6;..\include;..;%(AdditionalIncludeDirectories) + _LIB;WIN32;_DEBUG;LWIP_DEBUG;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebug + Level4 + EditAndContinue + 4820 + + + true + false + + + MachineX86 + + + + + MaxSpeed + true + ..\..\..\..\test\fuzz;..\..\..\..\src\include;..\..\..\..\src\include\ipv4;..\..\..\..\src\include\ipv6;..\include;..;%(AdditionalIncludeDirectories) + WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions) + MultiThreaded + true + Level4 + ProgramDatabase + + + true + true + true + false + + + MachineX86 + + + + + MaxSpeed + true + ..\..\..\..\test\fuzz;..\..\..\..\src\include;..\..\..\..\src\include\ipv4;..\..\..\..\src\include\ipv6;..\include;..;%(AdditionalIncludeDirectories) + WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions) + MultiThreaded + true + Level4 + ProgramDatabase + + + true + true + true + false + + + MachineX86 + + + + + MaxSpeed + true + ..\..\..\..\test\fuzz;..\..\..\..\src\include;..\..\..\..\src\include\ipv4;..\..\..\..\src\include\ipv6;..\include;..;%(AdditionalIncludeDirectories) + WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions) + MultiThreaded + true + Level4 + ProgramDatabase + + + true + true + true + false + + + MachineX86 + + + + + {2cc276fa-b226-49c9-8f82-7fcd5a228e28} + false + + + + + + + + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + + + + + \ No newline at end of file From 9509acd8762d3a1fe795f814053697e1490f1c5f Mon Sep 17 00:00:00 2001 From: Simon Goldschmidt Date: Tue, 3 Oct 2023 21:11:57 +0200 Subject: [PATCH 20/94] fuzz: fix warning casting u64_t to s32_t/u32_t --- test/fuzz/fuzz_common.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/fuzz/fuzz_common.c b/test/fuzz/fuzz_common.c index a275265c..38bc1db7 100644 --- a/test/fuzz/fuzz_common.c +++ b/test/fuzz/fuzz_common.c @@ -694,8 +694,8 @@ u32_t lwip_fuzz_rand(void) static s32_t state[1] = {0xdeadbeef}; uint64_t val = state[0] & 0xffffffff; val = ((val * 1103515245) + 12345) & 0x7fffffff; - state[0] = val; - result = val; + state[0] = (s32_t)val; + result = (u32_t)val; return result; #endif } From 732d3411bf4f45ad68d42225ac09e995fb2c2b5d Mon Sep 17 00:00:00 2001 From: Simon Goldschmidt Date: Tue, 3 Oct 2023 21:37:14 +0200 Subject: [PATCH 21/94] fuzz: count packets for debugging --- test/fuzz/fuzz_common.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/test/fuzz/fuzz_common.c b/test/fuzz/fuzz_common.c index 38bc1db7..17dd9575 100644 --- a/test/fuzz/fuzz_common.c +++ b/test/fuzz/fuzz_common.c @@ -214,6 +214,7 @@ static void input_pkt(struct netif *netif, const u8_t *data, size_t len) static void input_pkts(enum lwip_fuzz_type type, struct netif *netif, const u8_t *data, size_t len) { + size_t packet_nr = 0; remfuzz_ptr = data; remfuzz_len = len; @@ -228,6 +229,7 @@ static void input_pkts(enum lwip_fuzz_type type, struct netif *netif, const u8_t #ifdef LWIP_FUZZ_SYS_NOW u32_t external_delay = 0; #endif + packet_nr++; if (type == LWIP_FUZZ_MULTIPACKET_TIME) { #ifdef LWIP_FUZZ_SYS_NOW /* Extract external delay time from fuzz pool */ From 0627c55c513f0c3c21d37d314c551b7259ef51e6 Mon Sep 17 00:00:00 2001 From: Simon Goldschmidt Date: Wed, 4 Oct 2023 21:36:00 +0200 Subject: [PATCH 22/94] ping: fix assert in ping_init() --- contrib/apps/ping/ping.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/contrib/apps/ping/ping.c b/contrib/apps/ping/ping.c index 1d2e8bb9..a4995492 100644 --- a/contrib/apps/ping/ping.c +++ b/contrib/apps/ping/ping.c @@ -403,7 +403,7 @@ ping_init(const ip_addr_t* ping_addr) { ping_stop(); - LWIP_ASSERT("ping_target != NULL", ping_target != NULL); + LWIP_ASSERT("ping_addr != NULL", ping_addr != NULL); ping_target = ping_addr; #if PING_USE_SOCKETS From 20f6ac7426047f53de9891a179cf11a1f7459df4 Mon Sep 17 00:00:00 2001 From: Simon Goldschmidt Date: Wed, 4 Oct 2023 21:42:42 +0200 Subject: [PATCH 23/94] msvc: clean up duplicate use of intermediate directories --- contrib/ports/win32/msvc/lwIP_Test.vcxproj | 4 ++-- contrib/ports/win32/msvc/lwIP_pcapif.vcxproj | 5 +++-- contrib/ports/win32/msvc/makefsdata.vcxproj | 4 ++-- 3 files changed, 7 insertions(+), 6 deletions(-) diff --git a/contrib/ports/win32/msvc/lwIP_Test.vcxproj b/contrib/ports/win32/msvc/lwIP_Test.vcxproj index 37d4dab2..94b3a734 100644 --- a/contrib/ports/win32/msvc/lwIP_Test.vcxproj +++ b/contrib/ports/win32/msvc/lwIP_Test.vcxproj @@ -13,6 +13,7 @@ {8CC0CE51-32CF-4585-BFAF-A9343BC5A96D} lwIP_test + 10.0 @@ -41,8 +42,7 @@ <_ProjectFileVersion>10.0.40219.1 - .\$(Configuration)\ - .\$(Configuration)\$(ProjectName)\ + $(Configuration)\$(ProjectName)\ false true diff --git a/contrib/ports/win32/msvc/lwIP_pcapif.vcxproj b/contrib/ports/win32/msvc/lwIP_pcapif.vcxproj index 1bfdfb17..dcb6efa7 100644 --- a/contrib/ports/win32/msvc/lwIP_pcapif.vcxproj +++ b/contrib/ports/win32/msvc/lwIP_pcapif.vcxproj @@ -14,6 +14,7 @@ lwIP pcapif {6F44E49E-9F21-4144-91EC-53B92AEF62CE} lwIP pcapif + 10.0 @@ -42,8 +43,8 @@ <_ProjectFileVersion>10.0.40219.1 - .\$(Configuration)\ - .\$(Configuration)\$(ProjectName)\ + $(Configuration)\$(ProjectName)\ + $(Configuration)\$(ProjectName)\ diff --git a/contrib/ports/win32/msvc/makefsdata.vcxproj b/contrib/ports/win32/msvc/makefsdata.vcxproj index 5881642d..4f372d5e 100644 --- a/contrib/ports/win32/msvc/makefsdata.vcxproj +++ b/contrib/ports/win32/msvc/makefsdata.vcxproj @@ -17,6 +17,7 @@ {0BFC0F21-8E84-4E68-A9E1-CE2A09B72F6D} makefsdata Win32Proj + 10.0 @@ -42,9 +43,8 @@ <_ProjectFileVersion>10.0.40219.1 + $(Configuration)\$(ProjectName)\ true - $(SolutionDir)$(Configuration)\ - $(Configuration)\ false From 98e63b6acf72f3cd40c20309aa12c506639a9146 Mon Sep 17 00:00:00 2001 From: Simon Goldschmidt Date: Wed, 4 Oct 2023 22:26:22 +0200 Subject: [PATCH 24/94] apps: http client: improve the HTTP client; ensure connection settings are passed Without connection settings, the caller is not informed of success vs failure of a transfer. See bug #63554 --- src/apps/http/http_client.c | 39 ++++++++++++++++++++++--------------- 1 file changed, 23 insertions(+), 16 deletions(-) diff --git a/src/apps/http/http_client.c b/src/apps/http/http_client.c index 1973e79e..a284708d 100644 --- a/src/apps/http/http_client.c +++ b/src/apps/http/http_client.c @@ -229,12 +229,15 @@ http_parse_response_status(struct pbuf *p, u16_t *http_version, u16_t *http_stat } else { status_num_len = end1 - space1 - 1; } - memset(status_num, 0, sizeof(status_num)); - if (pbuf_copy_partial(p, status_num, (u16_t)status_num_len, space1 + 1) == status_num_len) { - int status = atoi(status_num); - if ((status > 0) && (status <= 0xFFFF)) { - *http_status = (u16_t)status; - return ERR_OK; + if (status_num_len < sizeof(status_num)) { + if (pbuf_copy_partial(p, status_num, (u16_t)status_num_len, space1 + 1) == status_num_len) { + int status; + status_num[status_num_len] = 0; + status = atoi(status_num); + if ((status > 0) && (status <= 0xFFFF)) { + *http_status = (u16_t)status; + return ERR_OK; + } } } } @@ -261,11 +264,14 @@ http_wait_headers(struct pbuf *p, u32_t *content_length, u16_t *total_header_len if (content_len_line_end != 0xFFFF) { char content_len_num[16]; u16_t content_len_num_len = (u16_t)(content_len_line_end - content_len_hdr - 16); - memset(content_len_num, 0, sizeof(content_len_num)); - if (pbuf_copy_partial(p, content_len_num, content_len_num_len, content_len_hdr + 16) == content_len_num_len) { - int len = atoi(content_len_num); - if ((len >= 0) && ((u32_t)len < HTTPC_CONTENT_LEN_INVALID)) { - *content_length = (u32_t)len; + if (content_len_num_len < sizeof(content_len_num)) { + if (pbuf_copy_partial(p, content_len_num, content_len_num_len, content_len_hdr + 16) == content_len_num_len) { + int len; + content_len_num[content_len_num_len] = 0; + len = atoi(content_len_num); + if ((len >= 0) && ((u32_t)len < HTTPC_CONTENT_LEN_INVALID)) { + *content_length = (u32_t)len; + } } } } @@ -489,7 +495,7 @@ static int httpc_create_request_string(const httpc_connection_t *settings, const char* server_name, int server_port, const char* uri, int use_host, char *buffer, size_t buffer_size) { - if (settings->use_proxy) { + if (settings && settings->use_proxy) { LWIP_ASSERT("server_name != NULL", server_name != NULL); if (server_port != HTTP_DEFAULT_PORT) { return snprintf(buffer, buffer_size, HTTPC_REQ_11_PROXY_PORT_FORMAT(server_name, server_port, uri, server_name)); @@ -517,6 +523,7 @@ httpc_init_connection_common(httpc_state_t **connection, const httpc_connection_ size_t server_name_len, uri_len; #endif + LWIP_ERROR("httpc connection settings not give", settings != NULL, return ERR_ARG;); LWIP_ASSERT("uri != NULL", uri != NULL); /* get request len */ @@ -561,12 +568,12 @@ httpc_init_connection_common(httpc_state_t **connection, const httpc_connection_ req->uri = req->server_name + server_name_len + 1; memcpy(req->uri, uri, uri_len + 1); #endif - req->pcb = altcp_new(settings->altcp_allocator); + req->pcb = altcp_new(settings ? settings->altcp_allocator : NULL); if(req->pcb == NULL) { httpc_free_state(req); return ERR_MEM; } - req->remote_port = settings->use_proxy ? settings->proxy_port : server_port; + req->remote_port = (settings && settings->use_proxy) ? settings->proxy_port : server_port; altcp_arg(req->pcb, req); altcp_recv(req->pcb, httpc_tcp_recv); altcp_err(req->pcb, httpc_tcp_err); @@ -689,12 +696,12 @@ httpc_get_file_dns(const char* server_name, u16_t port, const char* uri, const h return err; } - if (settings->use_proxy) { + if (settings && settings->use_proxy) { err = httpc_get_internal_addr(req, &settings->proxy_addr); } else { err = httpc_get_internal_dns(req, server_name); } - if(err != ERR_OK) { + if (err != ERR_OK) { httpc_free_state(req); return err; } From 76c7ac5cf90f3addb6bc5eedecab7c5b817f903f Mon Sep 17 00:00:00 2001 From: Simon Goldschmidt Date: Thu, 5 Oct 2023 20:30:54 +0200 Subject: [PATCH 25/94] posixlib: fix posixlib/CMakeLists.txt --- contrib/ports/unix/posixlib/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/contrib/ports/unix/posixlib/CMakeLists.txt b/contrib/ports/unix/posixlib/CMakeLists.txt index cf35f7e7..ee8af054 100644 --- a/contrib/ports/unix/posixlib/CMakeLists.txt +++ b/contrib/ports/unix/posixlib/CMakeLists.txt @@ -84,7 +84,7 @@ install(DIRECTORY "${LWIP_DIR}/contrib/ports/unix/port/include/netif" FILES_MATCHING PATTERN "*.h" ) -install(DIRECTORY "${LWIP_DIR}/contrib/ports/unix/linuxlib/include/posix" +install(DIRECTORY "${LWIP_DIR}/contrib/ports/unix/posixlib/include/posix" DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/lwip" FILES_MATCHING PATTERN "*.h" ) From 16e8ef31453d3b81765b2401a8be6938b4846a1a Mon Sep 17 00:00:00 2001 From: Simon Goldschmidt Date: Tue, 10 Oct 2023 13:44:16 +0200 Subject: [PATCH 26/94] ipv6: fix ip6_current_header() after reassembly ip6_current_header() should point to the header before the reassembled data, not to the first received pbuf (not necessarily the same). See bug #64031 --- src/core/ipv6/ip6.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/core/ipv6/ip6.c b/src/core/ipv6/ip6.c index 90e90dda..2c25f8ad 100644 --- a/src/core/ipv6/ip6.c +++ b/src/core/ipv6/ip6.c @@ -1011,9 +1011,10 @@ netif_found: goto ip6_input_cleanup; } - /* Returned p point to IPv6 header. + /* Returned p points to IPv6 header. * Update all our variables and pointers and continue. */ ip6hdr = (struct ip6_hdr *)p->payload; + ip_data.current_ip6_header = ip6hdr; nexth = &IP6H_NEXTH(ip6hdr); hlen = hlen_tot = IP6_HLEN; pbuf_remove_header(p, IP6_HLEN); From c8f42025ce3db081d5a279a91cc8791578d0ae63 Mon Sep 17 00:00:00 2001 From: Simon Goldschmidt Date: Sat, 7 Oct 2023 22:44:52 +0200 Subject: [PATCH 27/94] ipv6 reassembly: fix detecting holes in reassembled packets Added unit test for reassembly. See bug #64767 --- src/core/ipv6/ip6_frag.c | 14 +++++++ src/include/lwip/stats.h | 5 ++- test/unit/ip6/test_ip6.c | 91 +++++++++++++++++++++++++++++++++++++++- 3 files changed, 108 insertions(+), 2 deletions(-) diff --git a/src/core/ipv6/ip6_frag.c b/src/core/ipv6/ip6_frag.c index 5bee2d4f..ba91cfd4 100644 --- a/src/core/ipv6/ip6_frag.c +++ b/src/core/ipv6/ip6_frag.c @@ -447,6 +447,19 @@ ip6_reass(struct pbuf *p) } } #endif /* IP_REASS_CHECK_OVERLAP */ + /* Check if the fragments received so far have no gaps. */ + if (iprh_prev != NULL) { + if (iprh_prev->end != start) { + /* There is a fragment missing between the current + * and the previous fragment */ + valid = 0; + } + } + if (end != iprh_tmp->start) { + /* There is a fragment missing between the current + * and the following fragment */ + valid = 0; + } /* the new pbuf should be inserted before this */ next_pbuf = q; if (iprh_prev != NULL) { @@ -658,6 +671,7 @@ ip6_reass(struct pbuf *p) } /* Return the pbuf chain */ + MIB2_STATS_INC(mib2.ip6reasmoks); return p; } /* the datagram is not (yet?) reassembled completely */ diff --git a/src/include/lwip/stats.h b/src/include/lwip/stats.h index b570dbac..8c94320b 100644 --- a/src/include/lwip/stats.h +++ b/src/include/lwip/stats.h @@ -122,7 +122,7 @@ struct stats_sys { /** SNMP MIB2 stats */ struct stats_mib2 { - /* IP */ + /* IPv4 */ u32_t ipinhdrerrors; u32_t ipinaddrerrors; u32_t ipinunknownprotos; @@ -140,6 +140,9 @@ struct stats_mib2 { u32_t ipforwdatagrams; u32_t ipinreceives; + /* IPv6 */ + u32_t ip6reasmoks; + /* TCP */ u32_t tcpactiveopens; u32_t tcppassiveopens; diff --git a/test/unit/ip6/test_ip6.c b/test/unit/ip6/test_ip6.c index 43ffcf78..a030ee5a 100644 --- a/test/unit/ip6/test_ip6.c +++ b/test/unit/ip6/test_ip6.c @@ -66,6 +66,50 @@ ip6_test_handle_timers(int count) } } +/* Helper functions */ +static void +create_ip6_input_fragment(u32_t ip_id, u16_t start, u16_t len, int last, u8_t next_hdr) +{ + struct pbuf* p; + struct netif* input_netif = netif_list; /* just use any netif */ + fail_unless((start & 7) == 0); + fail_unless(((len & 7) == 0) || last); + fail_unless(input_netif != NULL); + + p = pbuf_alloc(PBUF_RAW, len + sizeof(struct ip6_frag_hdr) + + sizeof(struct ip6_hdr), PBUF_RAM); + fail_unless(p != NULL); + if (p != NULL) { + err_t err; + struct ip6_frag_hdr* fraghdr; + + struct ip6_hdr* ip6hdr = (struct ip6_hdr*)p->payload; + IP6H_VTCFL_SET(ip6hdr, 6, 0, 0); + IP6H_PLEN_SET(ip6hdr, len + sizeof(struct ip6_frag_hdr)); + IP6H_NEXTH_SET(ip6hdr, IP6_NEXTH_FRAGMENT); + IP6H_HOPLIM_SET(ip6hdr, 64); + ip6_addr_copy_to_packed(ip6hdr->src, *netif_ip6_addr(input_netif, 0)); + ip6hdr->src.addr[3]++; + ip6_addr_copy_to_packed(ip6hdr->dest, *netif_ip6_addr(input_netif, 0)); + + fraghdr = (struct ip6_frag_hdr*)(ip6hdr + 1); + fraghdr->_nexth = next_hdr; + fraghdr->reserved = 0; + if (last) { + fraghdr->_fragment_offset = htons(start & ~7); + } else { + fraghdr->_fragment_offset = htons((start & ~7) | 1); + } + fraghdr->_identification = htonl(ip_id); + + err = ip6_input(p, input_netif); + if (err != ERR_OK) { + pbuf_free(p); + } + fail_unless(err == ERR_OK); + } +} + /* Setups/teardown functions */ static void @@ -432,6 +476,50 @@ START_TEST(test_ip6_frag) } END_TEST +static void test_ip6_reass_helper(u32_t ip_id, const u16_t *segments, size_t num_segs, u16_t seglen) +{ + ip_addr_t my_addr = IPADDR6_INIT_HOST(0x20010db8, 0x0, 0x0, 0x1); + size_t i; + + memset(&lwip_stats.mib2, 0, sizeof(lwip_stats.mib2)); + memset(&lwip_stats.ip6_frag, 0, sizeof(lwip_stats.ip6_frag)); + + netif_set_up(&test_netif6); + netif_ip6_addr_set(&test_netif6, 0, ip_2_ip6(&my_addr)); + netif_ip6_addr_set_state(&test_netif6, 0, IP6_ADDR_VALID); + + for (i = 0; i < num_segs; i++) { + u16_t seg = segments[i]; + int last = seg + 1U == num_segs; + create_ip6_input_fragment(ip_id, seg * seglen, seglen, last, IP6_NEXTH_UDP); + fail_unless(lwip_stats.ip6_frag.recv == i + 1); + fail_unless(lwip_stats.ip6_frag.err == 0); + fail_unless(lwip_stats.ip6_frag.memerr == 0); + fail_unless(lwip_stats.ip6_frag.drop == 0); + if (i + 1 == num_segs) { + fail_unless(lwip_stats.mib2.ip6reasmoks == 1); + } + else { + fail_unless(lwip_stats.mib2.ip6reasmoks == 0); + } + } +} + +START_TEST(test_ip6_reass) +{ +#define NUM_SEGS 9 + const u16_t t1[NUM_SEGS] = { 0, 1, 2, 3, 4, 5, 6, 7, 8 }; + const u16_t t2[NUM_SEGS] = { 8, 0, 1, 2, 3, 4, 7, 6, 5 }; + const u16_t t3[NUM_SEGS] = { 1, 2, 3, 4, 5, 6, 7, 8, 0 }; + const u16_t t4[NUM_SEGS] = { 8, 2, 4, 6, 7, 5, 3, 1, 0 }; + LWIP_UNUSED_ARG(_i); + + test_ip6_reass_helper(128, t1, NUM_SEGS, 200); + test_ip6_reass_helper(129, t2, NUM_SEGS, 208); + test_ip6_reass_helper(130, t3, NUM_SEGS, 8); + test_ip6_reass_helper(130, t4, NUM_SEGS, 1448); +} + /** Create the suite including all tests for this module */ Suite * ip6_suite(void) @@ -444,7 +532,8 @@ ip6_suite(void) TESTFUNC(test_ip6_lladdr), TESTFUNC(test_ip6_dest_unreachable_chained_pbuf), TESTFUNC(test_ip6_frag_pbuf_len_assert), - TESTFUNC(test_ip6_frag) + TESTFUNC(test_ip6_frag), + TESTFUNC(test_ip6_reass) }; return create_suite("IPv6", tests, sizeof(tests)/sizeof(testfunc), ip6_setup, ip6_teardown); } From 66ef250b8c1f33eee011758477211821df836072 Mon Sep 17 00:00:00 2001 From: Simon Goldschmidt Date: Tue, 10 Oct 2023 19:59:06 +0200 Subject: [PATCH 28/94] Fix running IPv6 reassembly unit tests on 64-bit --- test/unit/lwipopts.h | 25 ++++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/test/unit/lwipopts.h b/test/unit/lwipopts.h index 0ee09dff..03579ee7 100644 --- a/test/unit/lwipopts.h +++ b/test/unit/lwipopts.h @@ -59,7 +59,7 @@ #define LWIP_DNS_SECURE (LWIP_DNS_SECURE_RAND_XID | LWIP_DNS_SECURE_RAND_SRC_PORT) /* Minimal changes to opt.h required for tcp unit tests: */ -#define MEM_SIZE 16000 +#define MEM_SIZE 17000 #define TCP_SND_QUEUELEN 40 #define MEMP_NUM_TCP_SEG TCP_SND_QUEUELEN #define TCP_SND_BUF (12 * TCP_MSS) @@ -91,4 +91,27 @@ /* Check lwip_stats.mem.illegal instead of asserting */ #define LWIP_MEM_ILLEGAL_FREE(msg) /* to nothing */ +/* autodetect if we are running the tests on 32-bit or 64-bit */ +#if defined(_WIN32) || defined(_WIN64) +#if defined(_WIN64) +#define PTR64 +#else +#define PTR32 +#endif +#elif defined(__GNUC__) +#if defined(__x86_64__) || defined(__ppc64__) +#define PTR64 +#else +#define PTR32 +#endif +#elif UINTPTR_MAX > UINT_MAX +#define PTR64 +#else +#define PTR32 +#endif + +#ifdef PTR64 +#define IPV6_FRAG_COPYHEADER 1 +#endif + #endif /* LWIP_HDR_LWIPOPTS_H */ From 4323e95dce144aa1cb465fc4b0926609d9e54a55 Mon Sep 17 00:00:00 2001 From: Simon Goldschmidt Date: Tue, 10 Oct 2023 20:14:16 +0200 Subject: [PATCH 29/94] win32 port: add x64 configurations --- .gitignore | 2 +- contrib/ports/win32/include/arch/cc.h | 4 + contrib/ports/win32/msvc/libcheck.vcxproj | 57 +++ contrib/ports/win32/msvc/lwIP.vcxproj | 339 ++++++++++++++++++ contrib/ports/win32/msvc/lwIP_Test.sln | 24 +- contrib/ports/win32/msvc/lwIP_Test.vcxproj | 113 +++++- contrib/ports/win32/msvc/lwIP_fuzz.sln | 37 +- contrib/ports/win32/msvc/lwIP_pcapif.vcxproj | 78 +++- contrib/ports/win32/msvc/lwIP_unittests.sln | 23 +- contrib/ports/win32/msvc/lwip_fuzz.vcxproj | 220 ++++++++++++ .../ports/win32/msvc/lwip_unittests.vcxproj | 72 ++++ contrib/ports/win32/msvc/makefsdata.vcxproj | 74 +++- 12 files changed, 1033 insertions(+), 10 deletions(-) diff --git a/.gitignore b/.gitignore index 875ba48c..0afbf6f6 100644 --- a/.gitignore +++ b/.gitignore @@ -42,7 +42,7 @@ /contrib/ports/win32/msvc/Release unittests /contrib/ports/win32/msvc/Release fuzz /contrib/ports/win32/msvc/Release fuzz2 -/contrib/ports/win32/msvc/Release fuzz3 +/contrib/ports/win32/msvc/x64 /contrib/ports/win32/msvc/*.user /contrib/ports/win32/msvc/*.ncb /contrib/ports/win32/msvc/*.cache diff --git a/contrib/ports/win32/include/arch/cc.h b/contrib/ports/win32/include/arch/cc.h index 0a0c0321..ded66c60 100644 --- a/contrib/ports/win32/include/arch/cc.h +++ b/contrib/ports/win32/include/arch/cc.h @@ -80,7 +80,11 @@ typedef int sys_prot_t; #define S16_F "hd" #define X16_F "hx" +#ifdef _WIN64 +#define SZT_F "llu" +#else #define SZT_F "lu" +#endif #endif /* _MSC_VER */ /* Compiler hints for packing structures */ diff --git a/contrib/ports/win32/msvc/libcheck.vcxproj b/contrib/ports/win32/msvc/libcheck.vcxproj index c33fdab6..dc4fe459 100644 --- a/contrib/ports/win32/msvc/libcheck.vcxproj +++ b/contrib/ports/win32/msvc/libcheck.vcxproj @@ -5,14 +5,23 @@ Debug Win32 + + Debug + x64 + Release Win32 + + Release + x64 + {EBB156DC-01BF-47B2-B69C-1A750B6B5F09} libcheck + 10.0 @@ -21,20 +30,37 @@ true v143 + + StaticLibrary + MultiByte + true + v143 + StaticLibrary MultiByte v143 + + StaticLibrary + MultiByte + v143 + + + + + + + <_ProjectFileVersion>10.0.40219.1 @@ -43,6 +69,14 @@ $(Configuration)\$(ProjectName)\ $(Configuration)\$(ProjectName)\ + + $(Platform)\$(Configuration)\$(ProjectName)\ + $(Platform)\$(Configuration)\$(ProjectName)\ + + + $(Platform)\$(Configuration)\$(ProjectName)\ + $(Platform)\$(Configuration)\$(ProjectName)\ + Disabled @@ -55,6 +89,17 @@ EditAndContinue + + + Disabled + ..\check;..\..\..\..\..\check\src;%(AdditionalIncludeDirectories) + _LIB;WIN32;_DEBUG;HAVE_CONFIG_H;%(PreprocessorDefinitions) + EnableFastChecks + MultiThreadedDebug + Level3 + ProgramDatabase + + MaxSpeed @@ -67,6 +112,18 @@ ProgramDatabase + + + MaxSpeed + true + ..\check;..\..\..\..\..\check\src;%(AdditionalIncludeDirectories) + WIN32;NDEBUG;_LIB;HAVE_CONFIG_H;%(PreprocessorDefinitions) + MultiThreaded + true + Level3 + ProgramDatabase + + diff --git a/contrib/ports/win32/msvc/lwIP.vcxproj b/contrib/ports/win32/msvc/lwIP.vcxproj index a3552d2f..0184b290 100644 --- a/contrib/ports/win32/msvc/lwIP.vcxproj +++ b/contrib/ports/win32/msvc/lwIP.vcxproj @@ -5,29 +5,54 @@ Debug fuzz Win32 + + Debug fuzz + x64 + Debug unittests Win32 + + Debug unittests + x64 + Debug Win32 + + Debug + x64 + Release fuzz Win32 + + Release fuzz + x64 + Release unittests Win32 + + Release unittests + x64 + Release Win32 + + Release + x64 + {2CC276FA-B226-49C9-8F82-7FCD5A228E28} + 10.0 @@ -36,36 +61,72 @@ MultiByte v143 + + StaticLibrary + false + MultiByte + v143 + StaticLibrary false MultiByte v143 + + StaticLibrary + false + MultiByte + v143 + StaticLibrary false MultiByte v143 + + StaticLibrary + false + MultiByte + v143 + StaticLibrary false MultiByte v143 + + StaticLibrary + false + MultiByte + v143 + StaticLibrary false MultiByte v143 + + StaticLibrary + false + MultiByte + v143 + StaticLibrary false MultiByte v143 + + StaticLibrary + false + MultiByte + v143 + @@ -73,26 +134,50 @@ + + + + + + + + + + + + + + + + + + + + + + + + <_ProjectFileVersion>10.0.40219.1 @@ -109,6 +194,30 @@ $(Configuration)\$(ProjectName)\ $(Configuration)\$(ProjectName)\ + + $(Platform)\$(Configuration)\$(ProjectName)\ + $(Platform)\$(Configuration)\$(ProjectName)\ + + + $(Platform)\$(Configuration)\$(ProjectName)\ + $(Platform)\$(Configuration)\$(ProjectName)\ + + + $(Platform)\$(Configuration)\$(ProjectName)\ + $(Platform)\$(Configuration)\$(ProjectName)\ + + + $(Platform)\$(Configuration)\$(ProjectName)\ + $(Platform)\$(Configuration)\$(ProjectName)\ + + + $(Platform)\$(Configuration)\$(ProjectName)\ + $(Platform)\$(Configuration)\$(ProjectName)\ + + + $(Platform)\$(Configuration)\$(ProjectName)\ + $(Platform)\$(Configuration)\$(ProjectName)\ + MaxSpeed @@ -133,6 +242,30 @@ true + + + MaxSpeed + OnlyExplicitInline + ..\..\..\..\src\include;..\..\..\..\src\include\ipv4;..\..\..\..\src\include\ipv6;..\include;..\..\..\examples\example_app;..\..\..\apps\snmp_private_mib;%(AdditionalIncludeDirectories) + WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions) + true + MultiThreaded + true + $(IntDir)$(ProjectName).pdb + Level4 + true + ProgramDatabase + Default + true + + + NDEBUG;%(PreprocessorDefinitions) + 0x0407 + + + true + + Disabled @@ -157,6 +290,30 @@ true + + + Disabled + ..\..\..\..\src\include;..\..\..\..\src\include\ipv4;..\..\..\..\src\include\ipv6;..\include;..\..\..\examples\example_app;..\..\..\apps\snmp_private_mib;%(AdditionalIncludeDirectories) + _LIB;WIN32;_DEBUG;LWIP_DEBUG;%(PreprocessorDefinitions) + EnableFastChecks + MultiThreadedDebug + + + $(IntDir)$(ProjectName).pdb + Level4 + true + ProgramDatabase + Default + true + + + _DEBUG;%(PreprocessorDefinitions) + 0x0407 + + + true + + Disabled @@ -181,6 +338,30 @@ true + + + Disabled + ..\..\..\..\test\unit;..\..\..\..\src\include;..\..\..\..\src\include\ipv4;..\..\..\..\src\include\ipv6;..\include;..\..\..\examples\example_app;%(AdditionalIncludeDirectories) + _LIB;WIN32;_DEBUG;LWIP_DEBUG;%(PreprocessorDefinitions) + EnableFastChecks + MultiThreadedDebug + + + $(IntDir)$(ProjectName).pdb + Level4 + true + ProgramDatabase + Default + true + + + _DEBUG;%(PreprocessorDefinitions) + 0x0407 + + + true + + Disabled @@ -205,6 +386,30 @@ true + + + Disabled + ..\..\..\..\test\fuzz;..\..\..\..\src\include;..\..\..\..\src\include\ipv4;..\..\..\..\src\include\ipv6;..\include;..\..\..\examples\example_app;%(AdditionalIncludeDirectories) + _LIB;WIN32;_DEBUG;LWIP_DEBUG;%(PreprocessorDefinitions) + EnableFastChecks + MultiThreadedDebug + + + $(IntDir)$(ProjectName).pdb + Level4 + true + ProgramDatabase + Default + true + + + _DEBUG;%(PreprocessorDefinitions) + 0x0407 + + + true + + MaxSpeed @@ -229,6 +434,30 @@ true + + + MaxSpeed + OnlyExplicitInline + ..\..\..\..\test\unit;..\..\..\..\src\include;..\..\..\..\src\include\ipv4;..\..\..\..\src\include\ipv6;..\include;..\..\..\examples\example_app;%(AdditionalIncludeDirectories) + WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions) + true + MultiThreaded + true + $(IntDir)$(ProjectName).pdb + Level4 + true + ProgramDatabase + Default + true + + + NDEBUG;%(PreprocessorDefinitions) + 0x0407 + + + true + + MaxSpeed @@ -253,64 +482,130 @@ true + + + MaxSpeed + OnlyExplicitInline + ..\..\..\..\test\fuzz;..\..\..\..\src\include;..\..\..\..\src\include\ipv4;..\..\..\..\src\include\ipv6;..\include;..\..\..\examples\example_app;%(AdditionalIncludeDirectories) + WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions) + true + MultiThreaded + true + $(IntDir)$(ProjectName).pdb + Level4 + true + ProgramDatabase + Default + true + + + NDEBUG;%(PreprocessorDefinitions) + 0x0407 + + + true + + true + true true + true true + true true + true true + true true + true Document true + true true + true true + true true + true true + true true + true true + true true + true true + true true + true true + true true + true true + true true + true true + true true + true true + true true + true true + true true + true true + true true + true true + true true + true true + true true + true true + true true + true true + true true + true Document true + true true + true true + true true + true true + true true + true Document @@ -318,11 +613,17 @@ Document true + true true + true true + true true + true true + true true + true @@ -339,21 +640,33 @@ true + true true + true true + true true + true true + true true + true true + true true + true true + true true + true true + true true + true @@ -366,19 +679,31 @@ ..\..\..\..\..\mbedtls\include;..\..\..\..\src\include;..\..\..\..\src\include\ipv4;..\..\..\..\src\include\ipv6;..\include;..;..\..\..\apps\snmp_private_mib;%(AdditionalIncludeDirectories) + ..\..\..\..\..\mbedtls\include;..\..\..\..\src\include;..\..\..\..\src\include\ipv4;..\..\..\..\src\include\ipv6;..\include;..;..\..\..\apps\snmp_private_mib;%(AdditionalIncludeDirectories) ..\..\..\..\..\mbedtls\include;..\..\..\..\src\include;..\..\..\..\src\include\ipv4;..\..\..\..\src\include\ipv6;..\include;..;..\..\..\apps\snmp_private_mib;%(AdditionalIncludeDirectories) + ..\..\..\..\..\mbedtls\include;..\..\..\..\src\include;..\..\..\..\src\include\ipv4;..\..\..\..\src\include\ipv6;..\include;..;..\..\..\apps\snmp_private_mib;%(AdditionalIncludeDirectories) ..\..\..\..\..\mbedtls\include;..\..\..\..\test\unit;..\..\..\..\src\include;..\..\..\..\src\include\ipv4;..\..\..\..\src\include\ipv6;..\include;..;%(AdditionalIncludeDirectories) + ..\..\..\..\..\mbedtls\include;..\..\..\..\test\unit;..\..\..\..\src\include;..\..\..\..\src\include\ipv4;..\..\..\..\src\include\ipv6;..\include;..;%(AdditionalIncludeDirectories) ..\..\..\..\..\mbedtls\include;..\..\..\..\test\unit;..\..\..\..\src\include;..\..\..\..\src\include\ipv4;..\..\..\..\src\include\ipv6;..\include;..;%(AdditionalIncludeDirectories) + ..\..\..\..\..\mbedtls\include;..\..\..\..\test\unit;..\..\..\..\src\include;..\..\..\..\src\include\ipv4;..\..\..\..\src\include\ipv6;..\include;..;%(AdditionalIncludeDirectories) ..\..\..\..\..\mbedtls\include;..\..\..\..\test\unit;..\..\..\..\src\include;..\..\..\..\src\include\ipv4;..\..\..\..\src\include\ipv6;..\include;..;%(AdditionalIncludeDirectories) + ..\..\..\..\..\mbedtls\include;..\..\..\..\test\unit;..\..\..\..\src\include;..\..\..\..\src\include\ipv4;..\..\..\..\src\include\ipv6;..\include;..;%(AdditionalIncludeDirectories) ..\..\..\..\..\mbedtls\include;..\..\..\..\test\unit;..\..\..\..\src\include;..\..\..\..\src\include\ipv4;..\..\..\..\src\include\ipv6;..\include;..;%(AdditionalIncludeDirectories) + ..\..\..\..\..\mbedtls\include;..\..\..\..\test\unit;..\..\..\..\src\include;..\..\..\..\src\include\ipv4;..\..\..\..\src\include\ipv6;..\include;..;%(AdditionalIncludeDirectories) ..\..\..\..\..\mbedtls\include;..\..\..\..\src\include;..\..\..\..\src\include\ipv4;..\..\..\..\src\include\ipv6;..\include;..;..\..\..\apps\snmp_private_mib;%(AdditionalIncludeDirectories) + ..\..\..\..\..\mbedtls\include;..\..\..\..\src\include;..\..\..\..\src\include\ipv4;..\..\..\..\src\include\ipv6;..\include;..;..\..\..\apps\snmp_private_mib;%(AdditionalIncludeDirectories) ..\..\..\..\..\mbedtls\include;..\..\..\..\src\include;..\..\..\..\src\include\ipv4;..\..\..\..\src\include\ipv6;..\include;..;..\..\..\apps\snmp_private_mib;%(AdditionalIncludeDirectories) + ..\..\..\..\..\mbedtls\include;..\..\..\..\src\include;..\..\..\..\src\include\ipv4;..\..\..\..\src\include\ipv6;..\include;..;..\..\..\apps\snmp_private_mib;%(AdditionalIncludeDirectories) ..\..\..\..\..\mbedtls\include;..\..\..\..\test\unit;..\..\..\..\src\include;..\..\..\..\src\include\ipv4;..\..\..\..\src\include\ipv6;..\include;..;%(AdditionalIncludeDirectories) + ..\..\..\..\..\mbedtls\include;..\..\..\..\test\unit;..\..\..\..\src\include;..\..\..\..\src\include\ipv4;..\..\..\..\src\include\ipv6;..\include;..;%(AdditionalIncludeDirectories) ..\..\..\..\..\mbedtls\include;..\..\..\..\test\unit;..\..\..\..\src\include;..\..\..\..\src\include\ipv4;..\..\..\..\src\include\ipv6;..\include;..;%(AdditionalIncludeDirectories) + ..\..\..\..\..\mbedtls\include;..\..\..\..\test\unit;..\..\..\..\src\include;..\..\..\..\src\include\ipv4;..\..\..\..\src\include\ipv6;..\include;..;%(AdditionalIncludeDirectories) ..\..\..\..\..\mbedtls\include;..\..\..\..\test\unit;..\..\..\..\src\include;..\..\..\..\src\include\ipv4;..\..\..\..\src\include\ipv6;..\include;..;%(AdditionalIncludeDirectories) + ..\..\..\..\..\mbedtls\include;..\..\..\..\test\unit;..\..\..\..\src\include;..\..\..\..\src\include\ipv4;..\..\..\..\src\include\ipv6;..\include;..;%(AdditionalIncludeDirectories) ..\..\..\..\..\mbedtls\include;..\..\..\..\test\unit;..\..\..\..\src\include;..\..\..\..\src\include\ipv4;..\..\..\..\src\include\ipv6;..\include;..;%(AdditionalIncludeDirectories) + ..\..\..\..\..\mbedtls\include;..\..\..\..\test\unit;..\..\..\..\src\include;..\..\..\..\src\include\ipv4;..\..\..\..\src\include\ipv6;..\include;..;%(AdditionalIncludeDirectories) @@ -466,11 +791,17 @@ true + true true + true true + true true + true true + true true + true @@ -499,17 +830,25 @@ ..\..\..\..\..\mbedtls\include;..\..\..\..\src\include;..\..\..\..\src\include\ipv4;..\..\..\..\src\include\ipv6;..\include;..;..\..\..\apps\snmp_private_mib;%(AdditionalIncludeDirectories) + ..\..\..\..\..\mbedtls\include;..\..\..\..\src\include;..\..\..\..\src\include\ipv4;..\..\..\..\src\include\ipv6;..\include;..;..\..\..\apps\snmp_private_mib;%(AdditionalIncludeDirectories) ..\..\..\..\..\mbedtls\include;..\..\..\..\src\include;..\..\..\..\src\include\ipv4;..\..\..\..\src\include\ipv6;..\include;..;..\..\..\apps\snmp_private_mib;%(AdditionalIncludeDirectories) + ..\..\..\..\..\mbedtls\include;..\..\..\..\src\include;..\..\..\..\src\include\ipv4;..\..\..\..\src\include\ipv6;..\include;..;..\..\..\apps\snmp_private_mib;%(AdditionalIncludeDirectories) ..\..\..\..\..\mbedtls\include;..\..\..\..\src\include;..\..\..\..\src\include\ipv4;..\..\..\..\src\include\ipv6;..\include;..;..\..\..\apps\snmp_private_mib;%(AdditionalIncludeDirectories) + ..\..\..\..\..\mbedtls\include;..\..\..\..\src\include;..\..\..\..\src\include\ipv4;..\..\..\..\src\include\ipv6;..\include;..;..\..\..\apps\snmp_private_mib;%(AdditionalIncludeDirectories) ..\..\..\..\..\mbedtls\include;..\..\..\..\src\include;..\..\..\..\src\include\ipv4;..\..\..\..\src\include\ipv6;..\include;..;..\..\..\apps\snmp_private_mib;%(AdditionalIncludeDirectories) + ..\..\..\..\..\mbedtls\include;..\..\..\..\src\include;..\..\..\..\src\include\ipv4;..\..\..\..\src\include\ipv6;..\include;..;..\..\..\apps\snmp_private_mib;%(AdditionalIncludeDirectories) ..\..\..\..\..\mbedtls\include;..\..\..\..\src\include;..\..\..\..\src\include\ipv4;..\..\..\..\src\include\ipv6;..\include;..;..\..\..\apps\snmp_private_mib;%(AdditionalIncludeDirectories) + ..\..\..\..\..\mbedtls\include;..\..\..\..\src\include;..\..\..\..\src\include\ipv4;..\..\..\..\src\include\ipv6;..\include;..;..\..\..\apps\snmp_private_mib;%(AdditionalIncludeDirectories) ..\..\..\..\..\mbedtls\include;..\..\..\..\src\include;..\..\..\..\src\include\ipv4;..\..\..\..\src\include\ipv6;..\include;..;..\..\..\apps\snmp_private_mib;%(AdditionalIncludeDirectories) + ..\..\..\..\..\mbedtls\include;..\..\..\..\src\include;..\..\..\..\src\include\ipv4;..\..\..\..\src\include\ipv6;..\include;..;..\..\..\apps\snmp_private_mib;%(AdditionalIncludeDirectories) true + true true + true diff --git a/contrib/ports/win32/msvc/lwIP_Test.sln b/contrib/ports/win32/msvc/lwIP_Test.sln index ce59abd2..a6b89dfb 100644 --- a/contrib/ports/win32/msvc/lwIP_Test.sln +++ b/contrib/ports/win32/msvc/lwIP_Test.sln @@ -1,5 +1,7 @@ -Microsoft Visual Studio Solution File, Format Version 11.00 -# Visual C++ Express 2010 +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 17 +VisualStudioVersion = 17.7.34031.279 +MinimumVisualStudioVersion = 10.0.40219.1 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "lwIP_Test", "lwIP_Test.vcxproj", "{8CC0CE51-32CF-4585-BFAF-A9343BC5A96D}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "lwIP pcapif", "lwIP_pcapif.vcxproj", "{6F44E49E-9F21-4144-91EC-53B92AEF62CE}" @@ -11,25 +13,43 @@ EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Win32 = Debug|Win32 + Debug|x64 = Debug|x64 Release|Win32 = Release|Win32 + Release|x64 = Release|x64 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {8CC0CE51-32CF-4585-BFAF-A9343BC5A96D}.Debug|Win32.ActiveCfg = Debug|Win32 {8CC0CE51-32CF-4585-BFAF-A9343BC5A96D}.Debug|Win32.Build.0 = Debug|Win32 + {8CC0CE51-32CF-4585-BFAF-A9343BC5A96D}.Debug|x64.ActiveCfg = Debug|x64 + {8CC0CE51-32CF-4585-BFAF-A9343BC5A96D}.Debug|x64.Build.0 = Debug|x64 {8CC0CE51-32CF-4585-BFAF-A9343BC5A96D}.Release|Win32.ActiveCfg = Release|Win32 {8CC0CE51-32CF-4585-BFAF-A9343BC5A96D}.Release|Win32.Build.0 = Release|Win32 + {8CC0CE51-32CF-4585-BFAF-A9343BC5A96D}.Release|x64.ActiveCfg = Release|x64 + {8CC0CE51-32CF-4585-BFAF-A9343BC5A96D}.Release|x64.Build.0 = Release|x64 {6F44E49E-9F21-4144-91EC-53B92AEF62CE}.Debug|Win32.ActiveCfg = Debug|Win32 {6F44E49E-9F21-4144-91EC-53B92AEF62CE}.Debug|Win32.Build.0 = Debug|Win32 + {6F44E49E-9F21-4144-91EC-53B92AEF62CE}.Debug|x64.ActiveCfg = Debug|x64 + {6F44E49E-9F21-4144-91EC-53B92AEF62CE}.Debug|x64.Build.0 = Debug|x64 {6F44E49E-9F21-4144-91EC-53B92AEF62CE}.Release|Win32.ActiveCfg = Release|Win32 {6F44E49E-9F21-4144-91EC-53B92AEF62CE}.Release|Win32.Build.0 = Release|Win32 + {6F44E49E-9F21-4144-91EC-53B92AEF62CE}.Release|x64.ActiveCfg = Release|x64 + {6F44E49E-9F21-4144-91EC-53B92AEF62CE}.Release|x64.Build.0 = Release|x64 {2CC276FA-B226-49C9-8F82-7FCD5A228E28}.Debug|Win32.ActiveCfg = Debug|Win32 {2CC276FA-B226-49C9-8F82-7FCD5A228E28}.Debug|Win32.Build.0 = Debug|Win32 + {2CC276FA-B226-49C9-8F82-7FCD5A228E28}.Debug|x64.ActiveCfg = Debug|x64 + {2CC276FA-B226-49C9-8F82-7FCD5A228E28}.Debug|x64.Build.0 = Debug|x64 {2CC276FA-B226-49C9-8F82-7FCD5A228E28}.Release|Win32.ActiveCfg = Release|Win32 {2CC276FA-B226-49C9-8F82-7FCD5A228E28}.Release|Win32.Build.0 = Release|Win32 + {2CC276FA-B226-49C9-8F82-7FCD5A228E28}.Release|x64.ActiveCfg = Release|x64 + {2CC276FA-B226-49C9-8F82-7FCD5A228E28}.Release|x64.Build.0 = Release|x64 {0BFC0F21-8E84-4E68-A9E1-CE2A09B72F6D}.Debug|Win32.ActiveCfg = Debug|Win32 {0BFC0F21-8E84-4E68-A9E1-CE2A09B72F6D}.Debug|Win32.Build.0 = Debug|Win32 + {0BFC0F21-8E84-4E68-A9E1-CE2A09B72F6D}.Debug|x64.ActiveCfg = Debug|x64 + {0BFC0F21-8E84-4E68-A9E1-CE2A09B72F6D}.Debug|x64.Build.0 = Debug|x64 {0BFC0F21-8E84-4E68-A9E1-CE2A09B72F6D}.Release|Win32.ActiveCfg = Release|Win32 {0BFC0F21-8E84-4E68-A9E1-CE2A09B72F6D}.Release|Win32.Build.0 = Release|Win32 + {0BFC0F21-8E84-4E68-A9E1-CE2A09B72F6D}.Release|x64.ActiveCfg = Release|x64 + {0BFC0F21-8E84-4E68-A9E1-CE2A09B72F6D}.Release|x64.Build.0 = Release|x64 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/contrib/ports/win32/msvc/lwIP_Test.vcxproj b/contrib/ports/win32/msvc/lwIP_Test.vcxproj index 94b3a734..bd33dcc7 100644 --- a/contrib/ports/win32/msvc/lwIP_Test.vcxproj +++ b/contrib/ports/win32/msvc/lwIP_Test.vcxproj @@ -5,10 +5,18 @@ Debug Win32 + + Debug + x64 + Release Win32 + + Release + x64 + {8CC0CE51-32CF-4585-BFAF-A9343BC5A96D} @@ -22,12 +30,24 @@ MultiByte v143 + + Application + false + MultiByte + v143 + Application false MultiByte v143 + + Application + false + MultiByte + v143 + @@ -35,16 +55,26 @@ + + + + + + + + <_ProjectFileVersion>10.0.40219.1 - $(Configuration)\$(ProjectName)\ + $(Platform)\$(Configuration)\$(ProjectName)\ false + false true + true @@ -88,6 +118,47 @@ Packet.dll;wpcap.dll;%(DelayLoadDLLs) + + + .\Release/test.tlb + + + + + MaxSpeed + OnlyExplicitInline + ..\..\..\..\src\include;..\..\..\..\src\include\ipv4;..\..\..\..\src\include\ipv6;..\include;..\..\..\examples\example_app;..\..\..;%(AdditionalIncludeDirectories) + WIN32;NDEBUG;_CONSOLE;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions) + true + MultiThreaded + true + + + $(IntDir)$(TargetName).pch + $(IntDir)$(ProjectName).pdb + Level4 + true + Default + true + + + NDEBUG;%(PreprocessorDefinitions) + 0x0407 + + + Packet.lib;wpcap.lib;%(AdditionalDependencies) + true + $(PCAP_DIR)\Lib;..\..\..\..\..\winpcap\WpdPack\Lib;%(AdditionalLibraryDirectories) + .\Release/test.pdb + Console + false + + + true + $(TargetDir)$(TargetName).map + Packet.dll;wpcap.dll;%(DelayLoadDLLs) + + .\Debug/test.tlb @@ -129,6 +200,46 @@ Packet.dll;wpcap.dll;%(DelayLoadDLLs) + + + .\Debug/test.tlb + + + + + Disabled + ..\..\..\..\src\include;..\..\..\..\src\include\ipv4;..\..\..\..\src\include\ipv6;..\include;..\..\..\examples\example_app;..\..\..;%(AdditionalIncludeDirectories) + _CONSOLE;WIN32;_DEBUG;LWIP_DEBUG;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions) + EnableFastChecks + MultiThreadedDebug + + + $(IntDir)$(TargetName).pch + $(IntDir)$(ProjectName).pdb + Level4 + true + ProgramDatabase + Default + true + + + _DEBUG;%(PreprocessorDefinitions) + 0x0407 + + + Packet.lib;wpcap.lib;%(AdditionalDependencies) + true + $(PCAP_DIR)\Lib;..\..\..\..\..\winpcap\WpdPack\Lib;%(AdditionalLibraryDirectories) + true + Console + false + + + false + $(TargetDir)$(TargetName).map + Packet.dll;wpcap.dll;%(DelayLoadDLLs) + + diff --git a/contrib/ports/win32/msvc/lwIP_fuzz.sln b/contrib/ports/win32/msvc/lwIP_fuzz.sln index ceb9660c..11b52e32 100644 --- a/contrib/ports/win32/msvc/lwIP_fuzz.sln +++ b/contrib/ports/win32/msvc/lwIP_fuzz.sln @@ -1,41 +1,74 @@ -Microsoft Visual Studio Solution File, Format Version 11.00 -# Visual C++ Express 2010 + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 17 +VisualStudioVersion = 17.7.34031.279 +MinimumVisualStudioVersion = 10.0.40219.1 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "lwIP", "lwIP.vcxproj", "{2CC276FA-B226-49C9-8F82-7FCD5A228E28}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "lwip_fuzz", "lwip_fuzz.vcxproj", "{71B3B3F4-621C-11EE-8C99-0242AC120002}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug_fuzz2|x64 = Debug_fuzz2|x64 Debug_fuzz2|x86 = Debug_fuzz2|x86 + Debug_fuzz3|x64 = Debug_fuzz3|x64 Debug_fuzz3|x86 = Debug_fuzz3|x86 + Debug|x64 = Debug|x64 Debug|x86 = Debug|x86 + Release_fuzz2|x64 = Release_fuzz2|x64 Release_fuzz2|x86 = Release_fuzz2|x86 + Release_fuzz3|x64 = Release_fuzz3|x64 Release_fuzz3|x86 = Release_fuzz3|x86 + Release|x64 = Release|x64 Release|x86 = Release|x86 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution + {2CC276FA-B226-49C9-8F82-7FCD5A228E28}.Debug_fuzz2|x64.ActiveCfg = Debug fuzz|x64 + {2CC276FA-B226-49C9-8F82-7FCD5A228E28}.Debug_fuzz2|x64.Build.0 = Debug fuzz|x64 {2CC276FA-B226-49C9-8F82-7FCD5A228E28}.Debug_fuzz2|x86.ActiveCfg = Debug fuzz|Win32 {2CC276FA-B226-49C9-8F82-7FCD5A228E28}.Debug_fuzz2|x86.Build.0 = Debug fuzz|Win32 + {2CC276FA-B226-49C9-8F82-7FCD5A228E28}.Debug_fuzz3|x64.ActiveCfg = Debug fuzz|x64 + {2CC276FA-B226-49C9-8F82-7FCD5A228E28}.Debug_fuzz3|x64.Build.0 = Debug fuzz|x64 {2CC276FA-B226-49C9-8F82-7FCD5A228E28}.Debug_fuzz3|x86.ActiveCfg = Debug fuzz|Win32 {2CC276FA-B226-49C9-8F82-7FCD5A228E28}.Debug_fuzz3|x86.Build.0 = Debug fuzz|Win32 + {2CC276FA-B226-49C9-8F82-7FCD5A228E28}.Debug|x64.ActiveCfg = Debug fuzz|x64 + {2CC276FA-B226-49C9-8F82-7FCD5A228E28}.Debug|x64.Build.0 = Debug fuzz|x64 {2CC276FA-B226-49C9-8F82-7FCD5A228E28}.Debug|x86.ActiveCfg = Debug fuzz|Win32 {2CC276FA-B226-49C9-8F82-7FCD5A228E28}.Debug|x86.Build.0 = Debug fuzz|Win32 + {2CC276FA-B226-49C9-8F82-7FCD5A228E28}.Release_fuzz2|x64.ActiveCfg = Release fuzz|x64 + {2CC276FA-B226-49C9-8F82-7FCD5A228E28}.Release_fuzz2|x64.Build.0 = Release fuzz|x64 {2CC276FA-B226-49C9-8F82-7FCD5A228E28}.Release_fuzz2|x86.ActiveCfg = Release fuzz|Win32 {2CC276FA-B226-49C9-8F82-7FCD5A228E28}.Release_fuzz2|x86.Build.0 = Release fuzz|Win32 + {2CC276FA-B226-49C9-8F82-7FCD5A228E28}.Release_fuzz3|x64.ActiveCfg = Release fuzz|x64 + {2CC276FA-B226-49C9-8F82-7FCD5A228E28}.Release_fuzz3|x64.Build.0 = Release fuzz|x64 {2CC276FA-B226-49C9-8F82-7FCD5A228E28}.Release_fuzz3|x86.ActiveCfg = Release fuzz|Win32 {2CC276FA-B226-49C9-8F82-7FCD5A228E28}.Release_fuzz3|x86.Build.0 = Release fuzz|Win32 + {2CC276FA-B226-49C9-8F82-7FCD5A228E28}.Release|x64.ActiveCfg = Release fuzz|x64 + {2CC276FA-B226-49C9-8F82-7FCD5A228E28}.Release|x64.Build.0 = Release fuzz|x64 {2CC276FA-B226-49C9-8F82-7FCD5A228E28}.Release|x86.ActiveCfg = Release fuzz|Win32 {2CC276FA-B226-49C9-8F82-7FCD5A228E28}.Release|x86.Build.0 = Release fuzz|Win32 + {71B3B3F4-621C-11EE-8C99-0242AC120002}.Debug_fuzz2|x64.ActiveCfg = Debug fuzz2|x64 + {71B3B3F4-621C-11EE-8C99-0242AC120002}.Debug_fuzz2|x64.Build.0 = Debug fuzz2|x64 {71B3B3F4-621C-11EE-8C99-0242AC120002}.Debug_fuzz2|x86.ActiveCfg = Debug fuzz2|Win32 {71B3B3F4-621C-11EE-8C99-0242AC120002}.Debug_fuzz2|x86.Build.0 = Debug fuzz2|Win32 + {71B3B3F4-621C-11EE-8C99-0242AC120002}.Debug_fuzz3|x64.ActiveCfg = Debug fuzz3|x64 + {71B3B3F4-621C-11EE-8C99-0242AC120002}.Debug_fuzz3|x64.Build.0 = Debug fuzz3|x64 {71B3B3F4-621C-11EE-8C99-0242AC120002}.Debug_fuzz3|x86.ActiveCfg = Debug fuzz3|Win32 {71B3B3F4-621C-11EE-8C99-0242AC120002}.Debug_fuzz3|x86.Build.0 = Debug fuzz3|Win32 + {71B3B3F4-621C-11EE-8C99-0242AC120002}.Debug|x64.ActiveCfg = Debug|x64 + {71B3B3F4-621C-11EE-8C99-0242AC120002}.Debug|x64.Build.0 = Debug|x64 {71B3B3F4-621C-11EE-8C99-0242AC120002}.Debug|x86.ActiveCfg = Debug|Win32 {71B3B3F4-621C-11EE-8C99-0242AC120002}.Debug|x86.Build.0 = Debug|Win32 + {71B3B3F4-621C-11EE-8C99-0242AC120002}.Release_fuzz2|x64.ActiveCfg = Release fuzz2|x64 + {71B3B3F4-621C-11EE-8C99-0242AC120002}.Release_fuzz2|x64.Build.0 = Release fuzz2|x64 {71B3B3F4-621C-11EE-8C99-0242AC120002}.Release_fuzz2|x86.ActiveCfg = Release fuzz2|Win32 {71B3B3F4-621C-11EE-8C99-0242AC120002}.Release_fuzz2|x86.Build.0 = Release fuzz2|Win32 + {71B3B3F4-621C-11EE-8C99-0242AC120002}.Release_fuzz3|x64.ActiveCfg = Release fuzz3|x64 + {71B3B3F4-621C-11EE-8C99-0242AC120002}.Release_fuzz3|x64.Build.0 = Release fuzz3|x64 {71B3B3F4-621C-11EE-8C99-0242AC120002}.Release_fuzz3|x86.ActiveCfg = Release fuzz3|Win32 {71B3B3F4-621C-11EE-8C99-0242AC120002}.Release_fuzz3|x86.Build.0 = Release fuzz3|Win32 + {71B3B3F4-621C-11EE-8C99-0242AC120002}.Release|x64.ActiveCfg = Release|x64 + {71B3B3F4-621C-11EE-8C99-0242AC120002}.Release|x64.Build.0 = Release|x64 {71B3B3F4-621C-11EE-8C99-0242AC120002}.Release|x86.ActiveCfg = Release|Win32 {71B3B3F4-621C-11EE-8C99-0242AC120002}.Release|x86.Build.0 = Release|Win32 EndGlobalSection diff --git a/contrib/ports/win32/msvc/lwIP_pcapif.vcxproj b/contrib/ports/win32/msvc/lwIP_pcapif.vcxproj index dcb6efa7..62a98f81 100644 --- a/contrib/ports/win32/msvc/lwIP_pcapif.vcxproj +++ b/contrib/ports/win32/msvc/lwIP_pcapif.vcxproj @@ -5,10 +5,18 @@ Debug Win32 + + Debug + x64 + Release Win32 + + Release + x64 + lwIP pcapif @@ -23,12 +31,24 @@ MultiByte v143 + + StaticLibrary + false + MultiByte + v143 + StaticLibrary false MultiByte v143 + + StaticLibrary + false + MultiByte + v143 + @@ -36,15 +56,23 @@ + + + + + + + + <_ProjectFileVersion>10.0.40219.1 $(Configuration)\$(ProjectName)\ - $(Configuration)\$(ProjectName)\ + $(Platform)\$(Configuration)\$(ProjectName)\ @@ -68,6 +96,28 @@ + + + Disabled + ..\..\..\..\src\include;..\..\..\..\src\include\ipv4;..\..\..\..\src\include\ipv6;..\include;..\..\..\examples\example_app;.\;$(PCAP_DIR)\Include;..\..\..\..\..\winpcap\WpdPack\Include\;%(AdditionalIncludeDirectories) + _LIB;WIN32;_DEBUG;LWIP_DEBUG;%(PreprocessorDefinitions) + EnableFastChecks + MultiThreadedDebug + + + $(IntDir)$(ProjectName).pdb + Level4 + true + ProgramDatabase + Default + true + + + _DEBUG;%(PreprocessorDefinitions) + 0x0407 + + + MaxSpeed @@ -94,6 +144,32 @@ true + + + MaxSpeed + OnlyExplicitInline + ..\..\..\..\src\include;..\..\..\..\src\include\ipv4;..\..\..\..\src\include\ipv6;..\include;..\..\..\examples\example_app;.\;$(PCAP_DIR)\Include;..\..\..\..\..\winpcap\WpdPack\Include\;%(AdditionalIncludeDirectories) + WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions) + true + MultiThreaded + true + + + $(IntDir)$(TargetName).pch + $(IntDir)$(ProjectName).pdb + Level4 + true + Default + true + + + NDEBUG;%(PreprocessorDefinitions) + 0x0407 + + + true + + diff --git a/contrib/ports/win32/msvc/lwIP_unittests.sln b/contrib/ports/win32/msvc/lwIP_unittests.sln index 2dfefb06..2e383361 100644 --- a/contrib/ports/win32/msvc/lwIP_unittests.sln +++ b/contrib/ports/win32/msvc/lwIP_unittests.sln @@ -1,5 +1,7 @@ -Microsoft Visual Studio Solution File, Format Version 11.00 -# Visual C++ Express 2010 +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 17 +VisualStudioVersion = 17.7.34031.279 +MinimumVisualStudioVersion = 10.0.40219.1 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "lwip_unittests", "lwip_unittests.vcxproj", "{6CCABAA4-F86F-4119-AFF8-43C9A4A234C2}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "lwIP", "lwIP.vcxproj", "{2CC276FA-B226-49C9-8F82-7FCD5A228E28}" @@ -9,23 +11,40 @@ EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Win32 = Debug|Win32 + Debug|x64 = Debug|x64 Release|Win32 = Release|Win32 + Release|x64 = Release|x64 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {6CCABAA4-F86F-4119-AFF8-43C9A4A234C2}.Debug|Win32.ActiveCfg = Debug|Win32 {6CCABAA4-F86F-4119-AFF8-43C9A4A234C2}.Debug|Win32.Build.0 = Debug|Win32 + {6CCABAA4-F86F-4119-AFF8-43C9A4A234C2}.Debug|x64.ActiveCfg = Debug|x64 + {6CCABAA4-F86F-4119-AFF8-43C9A4A234C2}.Debug|x64.Build.0 = Debug|x64 {6CCABAA4-F86F-4119-AFF8-43C9A4A234C2}.Release|Win32.ActiveCfg = Release|Win32 {6CCABAA4-F86F-4119-AFF8-43C9A4A234C2}.Release|Win32.Build.0 = Release|Win32 + {6CCABAA4-F86F-4119-AFF8-43C9A4A234C2}.Release|x64.ActiveCfg = Release|x64 + {6CCABAA4-F86F-4119-AFF8-43C9A4A234C2}.Release|x64.Build.0 = Release|x64 {2CC276FA-B226-49C9-8F82-7FCD5A228E28}.Debug|Win32.ActiveCfg = Debug unittests|Win32 {2CC276FA-B226-49C9-8F82-7FCD5A228E28}.Debug|Win32.Build.0 = Debug unittests|Win32 + {2CC276FA-B226-49C9-8F82-7FCD5A228E28}.Debug|x64.ActiveCfg = Debug unittests|x64 + {2CC276FA-B226-49C9-8F82-7FCD5A228E28}.Debug|x64.Build.0 = Debug unittests|x64 {2CC276FA-B226-49C9-8F82-7FCD5A228E28}.Release|Win32.ActiveCfg = Release unittests|Win32 {2CC276FA-B226-49C9-8F82-7FCD5A228E28}.Release|Win32.Build.0 = Release unittests|Win32 + {2CC276FA-B226-49C9-8F82-7FCD5A228E28}.Release|x64.ActiveCfg = Release unittests|x64 + {2CC276FA-B226-49C9-8F82-7FCD5A228E28}.Release|x64.Build.0 = Release unittests|x64 {EBB156DC-01BF-47B2-B69C-1A750B6B5F09}.Debug|Win32.ActiveCfg = Debug|Win32 {EBB156DC-01BF-47B2-B69C-1A750B6B5F09}.Debug|Win32.Build.0 = Debug|Win32 + {EBB156DC-01BF-47B2-B69C-1A750B6B5F09}.Debug|x64.ActiveCfg = Debug|x64 + {EBB156DC-01BF-47B2-B69C-1A750B6B5F09}.Debug|x64.Build.0 = Debug|x64 {EBB156DC-01BF-47B2-B69C-1A750B6B5F09}.Release|Win32.ActiveCfg = Release|Win32 {EBB156DC-01BF-47B2-B69C-1A750B6B5F09}.Release|Win32.Build.0 = Release|Win32 + {EBB156DC-01BF-47B2-B69C-1A750B6B5F09}.Release|x64.ActiveCfg = Release|x64 + {EBB156DC-01BF-47B2-B69C-1A750B6B5F09}.Release|x64.Build.0 = Release|x64 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {18F9EDCF-BE44-4F9F-A7F6-5DCF2B7687C5} + EndGlobalSection EndGlobal diff --git a/contrib/ports/win32/msvc/lwip_fuzz.vcxproj b/contrib/ports/win32/msvc/lwip_fuzz.vcxproj index c7b0dbfa..fe42ca52 100644 --- a/contrib/ports/win32/msvc/lwip_fuzz.vcxproj +++ b/contrib/ports/win32/msvc/lwip_fuzz.vcxproj @@ -5,30 +5,55 @@ Debug fuzz2 Win32 + + Debug fuzz2 + x64 + Debug fuzz3 Win32 + + Debug fuzz3 + x64 + Debug Win32 + + Debug + x64 + Release fuzz2 Win32 + + Release fuzz2 + x64 + Release fuzz3 Win32 + + Release fuzz3 + x64 + Release Win32 + + Release + x64 + {71B3B3F4-621C-11EE-8C99-0242AC120002} lwip_fuzz + 10.0 @@ -37,54 +62,105 @@ true v143 + + Application + MultiByte + true + v143 + Application MultiByte true v143 + + Application + MultiByte + true + v143 + Application MultiByte true v143 + + Application + MultiByte + true + v143 + Application MultiByte v143 + + Application + MultiByte + v143 + Application MultiByte v143 + + Application + MultiByte + v143 + Application MultiByte v143 + + Application + MultiByte + v143 + + + + + + + + + + + + + + + + + + + <_ProjectFileVersion>10.0.40219.1 @@ -95,6 +171,24 @@ $(Configuration)\$(ProjectName)\ $(Configuration)\$(ProjectName)\ + + $(Platform)\$(Configuration)\$(ProjectName)\ + + + $(Platform)\$(Configuration)\$(ProjectName)\ + + + $(Platform)\$(Configuration)\$(ProjectName)\ + + + $(Platform)\$(Configuration)\$(ProjectName)\ + + + $(Platform)\$(Configuration)\$(ProjectName)\ + + + $(Platform)\$(Configuration)\$(ProjectName)\ + Disabled @@ -115,6 +209,24 @@ MachineX86 + + + Disabled + ..\..\..\..\test\fuzz;..\..\..\..\src\include;..\..\..\..\src\include\ipv4;..\..\..\..\src\include\ipv6;..\include;..;%(AdditionalIncludeDirectories) + _LIB;WIN32;_DEBUG;LWIP_DEBUG;%(PreprocessorDefinitions) + EnableFastChecks + MultiThreadedDebug + Level4 + ProgramDatabase + 4820 + + + true + false + + + + Disabled @@ -135,6 +247,24 @@ MachineX86 + + + Disabled + ..\..\..\..\test\fuzz;..\..\..\..\src\include;..\..\..\..\src\include\ipv4;..\..\..\..\src\include\ipv6;..\include;..;%(AdditionalIncludeDirectories) + _LIB;WIN32;_DEBUG;LWIP_DEBUG;%(PreprocessorDefinitions) + EnableFastChecks + MultiThreadedDebug + Level4 + ProgramDatabase + 4820 + + + true + false + + + + Disabled @@ -155,6 +285,24 @@ MachineX86 + + + Disabled + ..\..\..\..\test\fuzz;..\..\..\..\src\include;..\..\..\..\src\include\ipv4;..\..\..\..\src\include\ipv6;..\include;..;%(AdditionalIncludeDirectories) + _LIB;WIN32;_DEBUG;LWIP_DEBUG;%(PreprocessorDefinitions) + EnableFastChecks + MultiThreadedDebug + Level4 + ProgramDatabase + 4820 + + + true + false + + + + MaxSpeed @@ -176,6 +324,26 @@ MachineX86 + + + MaxSpeed + true + ..\..\..\..\test\fuzz;..\..\..\..\src\include;..\..\..\..\src\include\ipv4;..\..\..\..\src\include\ipv6;..\include;..;%(AdditionalIncludeDirectories) + WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions) + MultiThreaded + true + Level4 + ProgramDatabase + + + true + true + true + false + + + + MaxSpeed @@ -197,6 +365,26 @@ MachineX86 + + + MaxSpeed + true + ..\..\..\..\test\fuzz;..\..\..\..\src\include;..\..\..\..\src\include\ipv4;..\..\..\..\src\include\ipv6;..\include;..;%(AdditionalIncludeDirectories) + WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions) + MultiThreaded + true + Level4 + ProgramDatabase + + + true + true + true + false + + + + MaxSpeed @@ -218,6 +406,26 @@ MachineX86 + + + MaxSpeed + true + ..\..\..\..\test\fuzz;..\..\..\..\src\include;..\..\..\..\src\include\ipv4;..\..\..\..\src\include\ipv6;..\include;..;%(AdditionalIncludeDirectories) + WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions) + MultiThreaded + true + Level4 + ProgramDatabase + + + true + true + true + false + + + + {2cc276fa-b226-49c9-8f82-7fcd5a228e28} @@ -232,21 +440,33 @@ true + true true + true true + true true + true true + true true + true true + true true + true true + true true + true true + true true + true diff --git a/contrib/ports/win32/msvc/lwip_unittests.vcxproj b/contrib/ports/win32/msvc/lwip_unittests.vcxproj index 17577d9a..270ba284 100644 --- a/contrib/ports/win32/msvc/lwip_unittests.vcxproj +++ b/contrib/ports/win32/msvc/lwip_unittests.vcxproj @@ -5,14 +5,23 @@ Debug Win32 + + Debug + x64 + Release Win32 + + Release + x64 + {6CCABAA4-F86F-4119-AFF8-43C9A4A234C2} lwip_unittests + 10.0 @@ -21,26 +30,49 @@ true v143 + + Application + MultiByte + true + v143 + Application MultiByte v143 + + Application + MultiByte + v143 + + + + + + + <_ProjectFileVersion>10.0.40219.1 $(Configuration)\$(ProjectName)\ $(Configuration)\$(ProjectName)\ + + $(Platform)\$(Configuration)\$(ProjectName)\ + + + $(Platform)\$(Configuration)\$(ProjectName)\ + Disabled @@ -59,6 +91,26 @@ MachineX86 + false + + + + + Disabled + ..\check;..\..\..\..\..\check\src;..\..\..\..\test\unit;..\..\..\..\src\include;..\..\..\..\src\include\ipv4;..\..\..\..\src\include\ipv6;..\include;..;%(AdditionalIncludeDirectories) + _LIB;WIN32;_DEBUG;LWIP_DEBUG;%(PreprocessorDefinitions) + EnableFastChecks + MultiThreadedDebug + Level4 + ProgramDatabase + 4820 + + + true + false + + + false @@ -82,6 +134,26 @@ MachineX86 + + + MaxSpeed + true + ..\check;..\..\..\..\..\check\src;..\..\..\..\test\unit;..\..\..\..\src\include;..\..\..\..\src\include\ipv4;..\..\..\..\src\include\ipv6;..\include;..;%(AdditionalIncludeDirectories) + WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions) + MultiThreaded + true + Level4 + ProgramDatabase + + + true + true + true + false + + + + diff --git a/contrib/ports/win32/msvc/makefsdata.vcxproj b/contrib/ports/win32/msvc/makefsdata.vcxproj index 4f372d5e..5e73583f 100644 --- a/contrib/ports/win32/msvc/makefsdata.vcxproj +++ b/contrib/ports/win32/msvc/makefsdata.vcxproj @@ -5,10 +5,18 @@ Debug Win32 + + Debug + x64 + Release Win32 + + Release + x64 + @@ -26,26 +34,45 @@ true v143 + + Application + Unicode + true + v143 + Application Unicode v143 + + Application + Unicode + v143 + + + + + + + <_ProjectFileVersion>10.0.40219.1 - $(Configuration)\$(ProjectName)\ + $(Platform)\$(Configuration)\$(ProjectName)\ true + true false + false @@ -70,6 +97,27 @@ MachineX86 + + + Disabled + ..\..\..\..\src\include;..\..\..\..\src\include\ipv4;..\..\..\..\src\include\ipv6;..\include;..\..\..\examples\example_app;%(AdditionalIncludeDirectories) + WIN32;_DEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) + EnableFastChecks + MultiThreadedDebugDLL + + + Level4 + true + ProgramDatabase + + + true + Console + false + + + + MaxSpeed @@ -95,6 +143,30 @@ MachineX86 + + + MaxSpeed + true + ..\..\..\..\src\include;..\..\..\..\src\include\ipv4;..\..\..\..\src\include\ipv6;..\include;..\..\..\examples\example_app;%(AdditionalIncludeDirectories) + WIN32;NDEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) + MultiThreadedDLL + true + + + Level4 + true + ProgramDatabase + + + true + Console + true + true + false + + + + From 9e2fb2806fd5cfb64bf8563b9d060528ccd6c1f1 Mon Sep 17 00:00:00 2001 From: Simon Goldschmidt Date: Tue, 10 Oct 2023 20:14:52 +0200 Subject: [PATCH 30/94] unittests: fix compiling in release mode --- test/unit/lwip_unittests.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/test/unit/lwip_unittests.c b/test/unit/lwip_unittests.c index 8d47e45c..d088a066 100644 --- a/test/unit/lwip_unittests.c +++ b/test/unit/lwip_unittests.c @@ -58,9 +58,15 @@ void lwip_check_ensure_no_alloc(unsigned int skip) } for (i = 0, mask = 1; i < MEMP_MAX; i++, mask <<= 1) { if (!(skip & mask)) { +#if defined(LWIP_DEBUG) || LWIP_STATS_DISPLAY fail_unless(lwip_stats.memp[i]->used == 0, "memp pool '%s' still has %d entries allocated", lwip_stats.memp[i]->name, lwip_stats.memp[i]->used); +#else + fail_unless(lwip_stats.memp[i]->used == 0, + "memp pool %d still has %d entries allocated", + i, lwip_stats.memp[i]->used); +#endif } } } From 5ec4c1d1f2d5a942dc449307089796692e9def28 Mon Sep 17 00:00:00 2001 From: Simon Goldschmidt Date: Tue, 10 Oct 2023 20:15:49 +0200 Subject: [PATCH 31/94] ping: fix compiling in dual-stack mode --- contrib/apps/ping/ping.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/contrib/apps/ping/ping.c b/contrib/apps/ping/ping.c index a4995492..ceb97396 100644 --- a/contrib/apps/ping/ping.c +++ b/contrib/apps/ping/ping.c @@ -298,10 +298,11 @@ ping_recv(void *arg, struct raw_pcb *pcb, struct pbuf *p, const ip_addr_t *addr) LWIP_UNUSED_ARG(arg); LWIP_UNUSED_ARG(pcb); LWIP_UNUSED_ARG(addr); + LWIP_ASSERT("addr != NULL", addr != NULL); LWIP_ASSERT("p != NULL", p != NULL); - if ((p->tot_len >= (PBUF_IP_HLEN + sizeof(struct icmp_echo_hdr))) && - pbuf_remove_header(p, PBUF_IP_HLEN) == 0) { + if ((p->tot_len >= (IP_HLEN + sizeof(struct icmp_echo_hdr))) && + pbuf_remove_header(p, IP_HLEN) == 0) { iecho = (struct icmp_echo_hdr *)p->payload; if ((iecho->id == PING_ID) && (iecho->seqno == lwip_htons(ping_seq_num))) { @@ -315,7 +316,7 @@ ping_recv(void *arg, struct raw_pcb *pcb, struct pbuf *p, const ip_addr_t *addr) return 1; /* eat the packet */ } /* not eaten, restore original packet */ - pbuf_add_header(p, PBUF_IP_HLEN); + pbuf_add_header(p, IP_HLEN); } return 0; /* don't eat the packet */ From b5f6720f887851c39d3d6ee60ce1cb865274658a Mon Sep 17 00:00:00 2001 From: Simon Goldschmidt Date: Tue, 10 Oct 2023 20:39:45 +0200 Subject: [PATCH 32/94] apps/tftp: fix compiling for 64-bit --- src/apps/tftp/tftp.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/apps/tftp/tftp.c b/src/apps/tftp/tftp.c index ddfdbfc0..aab1d9ce 100644 --- a/src/apps/tftp/tftp.c +++ b/src/apps/tftp/tftp.c @@ -157,7 +157,7 @@ send_request(const ip_addr_t *addr, u16_t port, u16_t opcode, const char* fname, static err_t send_error(const ip_addr_t *addr, u16_t port, enum tftp_error code, const char *str) { - int str_length = strlen(str); + size_t str_length = strlen(str); struct pbuf *p; u16_t *payload; err_t ret; From ab1f58204388002d22e2ff042ae086096dbb1bd7 Mon Sep 17 00:00:00 2001 From: Simon Goldschmidt Date: Tue, 10 Oct 2023 20:40:42 +0200 Subject: [PATCH 33/94] httpd: fix bug #64458: When tcp_err() is invoked, tcp_pcb is freed but httpd_post_finished() is not called by httpd.c --- src/apps/http/httpd.c | 44 ++++++++++++++++++++++++++++--------------- 1 file changed, 29 insertions(+), 15 deletions(-) diff --git a/src/apps/http/httpd.c b/src/apps/http/httpd.c index 56e8cad4..3e9d2348 100644 --- a/src/apps/http/httpd.c +++ b/src/apps/http/httpd.c @@ -471,6 +471,32 @@ http_state_alloc(void) return ret; } +/** Make sure the post code knows that the connection is closed */ +static void +http_state_close_post(struct http_state* hs) +{ +#if LWIP_HTTPD_SUPPORT_POST + if (hs != NULL) { + if ((hs->post_content_len_left != 0) +#if LWIP_HTTPD_POST_MANUAL_WND + || ((hs->no_auto_wnd != 0) && (hs->unrecved_bytes != 0)) +#endif /* LWIP_HTTPD_POST_MANUAL_WND */ + ) { + /* prevent calling httpd_post_finished twice */ + hs->post_content_len_left = 0; +#if LWIP_HTTPD_POST_MANUAL_WND + hs->unrecved_bytes = 0; +#endif /* LWIP_HTTPD_POST_MANUAL_WND */ + /* make sure the post code knows that the connection is closed */ + http_uri_buf[0] = 0; + httpd_post_finished(hs, http_uri_buf, LWIP_HTTPD_URI_BUF_LEN); + } + } +#else /* LWIP_HTTPD_SUPPORT_POST*/ + LWIP_UNUSED_ARG(hs); +#endif /* LWIP_HTTPD_SUPPORT_POST*/ +} + /** Free a struct http_state. * Also frees the file data if dynamic. */ @@ -505,6 +531,7 @@ http_state_eof(struct http_state *hs) hs->req = NULL; } #endif /* LWIP_HTTPD_SUPPORT_REQUESTLIST */ + http_state_close_post(hs); } /** Free a struct http_state. @@ -598,20 +625,7 @@ http_close_or_abort_conn(struct altcp_pcb *pcb, struct http_state *hs, u8_t abor err_t err; LWIP_DEBUGF(HTTPD_DEBUG, ("Closing connection %p\n", (void *)pcb)); -#if LWIP_HTTPD_SUPPORT_POST - if (hs != NULL) { - if ((hs->post_content_len_left != 0) -#if LWIP_HTTPD_POST_MANUAL_WND - || ((hs->no_auto_wnd != 0) && (hs->unrecved_bytes != 0)) -#endif /* LWIP_HTTPD_POST_MANUAL_WND */ - ) { - /* make sure the post code knows that the connection is closed */ - http_uri_buf[0] = 0; - httpd_post_finished(hs, http_uri_buf, LWIP_HTTPD_URI_BUF_LEN); - } - } -#endif /* LWIP_HTTPD_SUPPORT_POST*/ - + http_state_close_post(hs); altcp_arg(pcb, NULL); altcp_recv(pcb, NULL); @@ -2401,7 +2415,7 @@ http_init_file(struct http_state *hs, struct fs_file *file, int is_09, const cha search for the end of the header. */ char *file_start = lwip_strnstr(hs->file, CRLF CRLF, hs->left); if (file_start != NULL) { - int diff = file_start + 4 - hs->file; + size_t diff = file_start + 4 - hs->file; hs->file += diff; hs->left -= (u32_t)diff; } From 2e650364fad0b8100f420410b4d55b4dea813d0c Mon Sep 17 00:00:00 2001 From: Simon Goldschmidt Date: Tue, 10 Oct 2023 20:43:55 +0200 Subject: [PATCH 34/94] win32 port: fix wrong intermediate directories --- contrib/ports/win32/msvc/lwIP_Test.vcxproj | 2 +- contrib/ports/win32/msvc/lwIP_pcapif.vcxproj | 2 +- contrib/ports/win32/msvc/makefsdata.vcxproj | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/contrib/ports/win32/msvc/lwIP_Test.vcxproj b/contrib/ports/win32/msvc/lwIP_Test.vcxproj index bd33dcc7..06e34c8a 100644 --- a/contrib/ports/win32/msvc/lwIP_Test.vcxproj +++ b/contrib/ports/win32/msvc/lwIP_Test.vcxproj @@ -70,7 +70,7 @@ <_ProjectFileVersion>10.0.40219.1 - $(Platform)\$(Configuration)\$(ProjectName)\ + $(Configuration)\$(ProjectName)\ false false true diff --git a/contrib/ports/win32/msvc/lwIP_pcapif.vcxproj b/contrib/ports/win32/msvc/lwIP_pcapif.vcxproj index 62a98f81..b055d6ab 100644 --- a/contrib/ports/win32/msvc/lwIP_pcapif.vcxproj +++ b/contrib/ports/win32/msvc/lwIP_pcapif.vcxproj @@ -72,7 +72,7 @@ <_ProjectFileVersion>10.0.40219.1 $(Configuration)\$(ProjectName)\ - $(Platform)\$(Configuration)\$(ProjectName)\ + $(Configuration)\$(ProjectName)\ diff --git a/contrib/ports/win32/msvc/makefsdata.vcxproj b/contrib/ports/win32/msvc/makefsdata.vcxproj index 5e73583f..c5d2c72d 100644 --- a/contrib/ports/win32/msvc/makefsdata.vcxproj +++ b/contrib/ports/win32/msvc/makefsdata.vcxproj @@ -68,7 +68,7 @@ <_ProjectFileVersion>10.0.40219.1 - $(Platform)\$(Configuration)\$(ProjectName)\ + $(Configuration)\$(ProjectName)\ true true false From e655b41a498f7eeefc121628210fca4b66978271 Mon Sep 17 00:00:00 2001 From: Simon Goldschmidt Date: Tue, 10 Oct 2023 21:58:56 +0200 Subject: [PATCH 35/94] win32 port: allow "edit-and-continue" by disabling /SAFESEH --- contrib/ports/win32/msvc/lwIP_Test.vcxproj | 1 + 1 file changed, 1 insertion(+) diff --git a/contrib/ports/win32/msvc/lwIP_Test.vcxproj b/contrib/ports/win32/msvc/lwIP_Test.vcxproj index 06e34c8a..568bf34d 100644 --- a/contrib/ports/win32/msvc/lwIP_Test.vcxproj +++ b/contrib/ports/win32/msvc/lwIP_Test.vcxproj @@ -198,6 +198,7 @@ false $(TargetDir)$(TargetName).map Packet.dll;wpcap.dll;%(DelayLoadDLLs) + false From c8d9adde0fcaac46c365ecc57443bf8d7b5f78b1 Mon Sep 17 00:00:00 2001 From: Simon Goldschmidt Date: Tue, 10 Oct 2023 22:24:29 +0200 Subject: [PATCH 36/94] win32 port: fix linking x64 with pcap --- contrib/ports/win32/msvc/lwIP_Test.vcxproj | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/contrib/ports/win32/msvc/lwIP_Test.vcxproj b/contrib/ports/win32/msvc/lwIP_Test.vcxproj index 568bf34d..22b39c88 100644 --- a/contrib/ports/win32/msvc/lwIP_Test.vcxproj +++ b/contrib/ports/win32/msvc/lwIP_Test.vcxproj @@ -148,7 +148,7 @@ Packet.lib;wpcap.lib;%(AdditionalDependencies) true - $(PCAP_DIR)\Lib;..\..\..\..\..\winpcap\WpdPack\Lib;%(AdditionalLibraryDirectories) + $(PCAP_DIR)\Lib;..\..\..\..\..\winpcap\WpdPack\Lib\x64;%(AdditionalLibraryDirectories) .\Release/test.pdb Console false @@ -230,7 +230,7 @@ Packet.lib;wpcap.lib;%(AdditionalDependencies) true - $(PCAP_DIR)\Lib;..\..\..\..\..\winpcap\WpdPack\Lib;%(AdditionalLibraryDirectories) + $(PCAP_DIR)\Lib;..\..\..\..\..\winpcap\WpdPack\Lib\x64;%(AdditionalLibraryDirectories) true Console false From 7fd13508024e83758ce45afbd671f892e72a3eca Mon Sep 17 00:00:00 2001 From: Simon Goldschmidt Date: Tue, 10 Oct 2023 22:27:03 +0200 Subject: [PATCH 37/94] sockets: fix bug #63898: allow socket option IPV6_CHECKSUM for both IPPROTO_IPV6 and IPPROTO_RAW See bug #63898 --- src/api/sockets.c | 89 +++++++++++++++++++++++++++++++++-------------- 1 file changed, 62 insertions(+), 27 deletions(-) diff --git a/src/api/sockets.c b/src/api/sockets.c index b9111943..fbce282a 100644 --- a/src/api/sockets.c +++ b/src/api/sockets.c @@ -2920,6 +2920,49 @@ lwip_sockopt_to_ipopt(int optname) } } +#if LWIP_IPV6 && LWIP_RAW +static void +lwip_getsockopt_impl_ipv6_checksum(int s, struct lwip_sock* sock, void* optval) +{ + if (sock->conn->pcb.raw->chksum_reqd == 0) { + *(int*)optval = -1; + } + else { + *(int*)optval = sock->conn->pcb.raw->chksum_offset; + } + LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_getsockopt(%d, IPPROTO_RAW, IPV6_CHECKSUM) = %d\n", + s, (*(int*)optval))); +} + +static int +lwip_setsockopt_impl_ipv6_checksum(int s, struct lwip_sock* sock, const void* optval, socklen_t optlen) +{ + /* It should not be possible to disable the checksum generation with ICMPv6 + * as per RFC 3542 chapter 3.1 */ + if (sock->conn->pcb.raw->protocol == IPPROTO_ICMPV6) { + done_socket(sock); + return EINVAL; + } + + LWIP_SOCKOPT_CHECK_OPTLEN_CONN_PCB_TYPE(sock, optlen, int, NETCONN_RAW); + if (*(const int*)optval < 0) { + sock->conn->pcb.raw->chksum_reqd = 0; + } + else if (*(const int*)optval & 1) { + /* Per RFC3542, odd offsets are not allowed */ + done_socket(sock); + return EINVAL; + } + else { + sock->conn->pcb.raw->chksum_reqd = 1; + sock->conn->pcb.raw->chksum_offset = (u16_t) * (const int*)optval; + } + LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_setsockopt(%d, IPPROTO_RAW, IPV6_CHECKSUM, ..) -> %d\n", + s, sock->conn->pcb.raw->chksum_reqd)); + return 0; +} +#endif + /** lwip_getsockopt_impl: the actual implementation of getsockopt: * same argument as lwip_getsockopt, either called directly or through callback */ @@ -3169,6 +3212,12 @@ lwip_getsockopt_impl(int s, int level, int optname, void *optval, socklen_t *opt /* Level: IPPROTO_IPV6 */ case IPPROTO_IPV6: switch (optname) { +#if LWIP_IPV6 && LWIP_RAW + case IPV6_CHECKSUM: + LWIP_SOCKOPT_CHECK_OPTLEN_CONN_PCB_TYPE(sock, *optlen, int, NETCONN_RAW); + lwip_getsockopt_impl_ipv6_checksum(s, sock, optval); + break; +#endif /* LWIP_IPV6 && LWIP_RAW */ case IPV6_V6ONLY: LWIP_SOCKOPT_CHECK_OPTLEN_CONN(sock, *optlen, int); *(int *)optval = (netconn_get_ipv6only(sock->conn) ? 1 : 0); @@ -3219,13 +3268,7 @@ lwip_getsockopt_impl(int s, int level, int optname, void *optval, socklen_t *opt #if LWIP_IPV6 && LWIP_RAW case IPV6_CHECKSUM: LWIP_SOCKOPT_CHECK_OPTLEN_CONN_PCB_TYPE(sock, *optlen, int, NETCONN_RAW); - if (sock->conn->pcb.raw->chksum_reqd == 0) { - *(int *)optval = -1; - } else { - *(int *)optval = sock->conn->pcb.raw->chksum_offset; - } - LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_getsockopt(%d, IPPROTO_RAW, IPV6_CHECKSUM) = %d\n", - s, (*(int *)optval)) ); + lwip_getsockopt_impl_ipv6_checksum(s, sock, optval); break; #endif /* LWIP_IPV6 && LWIP_RAW */ default: @@ -3646,7 +3689,15 @@ lwip_setsockopt_impl(int s, int level, int optname, const void *optval, socklen_ /* Level: IPPROTO_IPV6 */ case IPPROTO_IPV6: switch (optname) { - case IPV6_V6ONLY: +#if LWIP_IPV6 && LWIP_RAW + case IPV6_CHECKSUM: + err = lwip_setsockopt_impl_ipv6_checksum(s, sock, optval, optlen); + if (err) { + return err; + } + break; +#endif /* LWIP_IPV6 && LWIP_RAW */ + case IPV6_V6ONLY: LWIP_SOCKOPT_CHECK_OPTLEN_CONN_PCB(sock, optlen, int); if (*(const int *)optval) { netconn_set_ipv6only(sock->conn, 1); @@ -3744,26 +3795,10 @@ lwip_setsockopt_impl(int s, int level, int optname, const void *optval, socklen_ switch (optname) { #if LWIP_IPV6 && LWIP_RAW case IPV6_CHECKSUM: - /* It should not be possible to disable the checksum generation with ICMPv6 - * as per RFC 3542 chapter 3.1 */ - if (sock->conn->pcb.raw->protocol == IPPROTO_ICMPV6) { - done_socket(sock); - return EINVAL; + err = lwip_setsockopt_impl_ipv6_checksum(s, sock, optval, optlen); + if (err) { + return err; } - - LWIP_SOCKOPT_CHECK_OPTLEN_CONN_PCB_TYPE(sock, optlen, int, NETCONN_RAW); - if (*(const int *)optval < 0) { - sock->conn->pcb.raw->chksum_reqd = 0; - } else if (*(const int *)optval & 1) { - /* Per RFC3542, odd offsets are not allowed */ - done_socket(sock); - return EINVAL; - } else { - sock->conn->pcb.raw->chksum_reqd = 1; - sock->conn->pcb.raw->chksum_offset = (u16_t) * (const int *)optval; - } - LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_setsockopt(%d, IPPROTO_RAW, IPV6_CHECKSUM, ..) -> %d\n", - s, sock->conn->pcb.raw->chksum_reqd)); break; #endif /* LWIP_IPV6 && LWIP_RAW */ default: From 583f352f6081fe8fc65dd58b795d10c8cb287199 Mon Sep 17 00:00:00 2001 From: Simon Goldschmidt Date: Wed, 11 Oct 2023 21:18:56 +0200 Subject: [PATCH 38/94] altcp_mbedtls: don't ignore return value of mbedtls_ssl_flush_output see bug #64045/task #16283 --- src/apps/altcp_tls/altcp_tls_mbedtls.c | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/src/apps/altcp_tls/altcp_tls_mbedtls.c b/src/apps/altcp_tls/altcp_tls_mbedtls.c index a8c2fc2e..e387f8d1 100644 --- a/src/apps/altcp_tls/altcp_tls_mbedtls.c +++ b/src/apps/altcp_tls/altcp_tls_mbedtls.c @@ -133,6 +133,15 @@ static err_t altcp_mbedtls_handle_rx_appldata(struct altcp_pcb *conn, altcp_mbed static int altcp_mbedtls_bio_send(void *ctx, const unsigned char *dataptr, size_t size); +static void +altcp_mbedtls_flush_output(altcp_mbedtls_state_t* state) +{ + int flushed = mbedtls_ssl_flush_output(&state->ssl_context); + if (flushed) { + LWIP_DEBUGF(ALTCP_MBEDTLS_DEBUG, ("mbedtls_ssl_flush_output failed: %d\n", flushed)); + } +} + /* callback functions from inner/lower connection: */ /** Accept callback from lower connection (i.e. TCP) @@ -531,7 +540,7 @@ altcp_mbedtls_lower_sent(void *arg, struct altcp_pcb *inner_conn, u16_t len) /* remove ACKed bytes from overhead adjust counter */ state->overhead_bytes_adjust -= len; /* try to send more if we failed before (may increase overhead adjust counter) */ - mbedtls_ssl_flush_output(&state->ssl_context); + altcp_mbedtls_flush_output(state); /* remove calculated overhead from ACKed bytes len */ app_len = len - (u16_t)overhead; /* update application write counter and inform application */ @@ -559,7 +568,7 @@ altcp_mbedtls_lower_poll(void *arg, struct altcp_pcb *inner_conn) if (conn->state) { altcp_mbedtls_state_t *state = (altcp_mbedtls_state_t *)conn->state; /* try to send more if we failed before */ - mbedtls_ssl_flush_output(&state->ssl_context); + altcp_mbedtls_flush_output(state); if (altcp_mbedtls_handle_rx_appldata(conn, state) == ERR_ABRT) { return ERR_ABRT; } @@ -1233,7 +1242,7 @@ altcp_mbedtls_write(struct altcp_pcb *conn, const void *dataptr, u16_t len, u8_t allow sending more if this succeeded (this is a hack because neither returning 0 nor MBEDTLS_ERR_SSL_WANT_WRITE worked for me) */ if (state->ssl_context.out_left) { - mbedtls_ssl_flush_output(&state->ssl_context); + altcp_mbedtls_flush_output(state); if (state->ssl_context.out_left) { return ERR_MEM; } From 90a440eafd5d1068a0f78e3edfdf897f16e496ad Mon Sep 17 00:00:00 2001 From: Simon Goldschmidt Date: Wed, 11 Oct 2023 21:23:32 +0200 Subject: [PATCH 39/94] sockets: fix socket leak when using setsockopt/getsockopt hook with LWIP_NETCONN_FULLDUPLEX==1 see bug #63458 --- src/api/sockets.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/api/sockets.c b/src/api/sockets.c index fbce282a..ddf37ab7 100644 --- a/src/api/sockets.c +++ b/src/api/sockets.c @@ -2977,6 +2977,7 @@ lwip_getsockopt_impl(int s, int level, int optname, void *optval, socklen_t *opt #ifdef LWIP_HOOK_SOCKETS_GETSOCKOPT if (LWIP_HOOK_SOCKETS_GETSOCKOPT(s, sock, level, optname, optval, optlen, &err)) { + done_socket(sock); return err; } #endif @@ -3398,6 +3399,7 @@ lwip_setsockopt_impl(int s, int level, int optname, const void *optval, socklen_ #ifdef LWIP_HOOK_SOCKETS_SETSOCKOPT if (LWIP_HOOK_SOCKETS_SETSOCKOPT(s, sock, level, optname, optval, optlen, &err)) { + done_socket(sock); return err; } #endif From e01c9a95041eb2aa41fe97fb0f5f75ff27d91cb6 Mon Sep 17 00:00:00 2001 From: Simon Goldschmidt Date: Wed, 11 Oct 2023 21:39:48 +0200 Subject: [PATCH 40/94] dhcp: set LWIP_DHCP_DISCOVER_ADD_HOSTNAME==1 by DEFAULT_ACCEPTMBOX_SIZE see bug #63457 --- src/include/lwip/opt.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/include/lwip/opt.h b/src/include/lwip/opt.h index 7f3eef2f..1ce45082 100644 --- a/src/include/lwip/opt.h +++ b/src/include/lwip/opt.h @@ -969,12 +969,12 @@ #define LWIP_DHCP_MAX_DNS_SERVERS DNS_MAX_SERVERS #endif -/** LWIP_DHCP_DISCOVER_ADD_HOSTNAME: Set to 1 to include hostname opt in discover packets. +/** LWIP_DHCP_DISCOVER_ADD_HOSTNAME: Set to 0 to not include hostname opt in discover packets. * If the hostname is not set in the DISCOVER packet, then some servers might issue an OFFER with hostname * configured and consequently reject the REQUEST with any other hostname. */ #if !defined LWIP_DHCP_DISCOVER_ADD_HOSTNAME || defined __DOXYGEN__ -#define LWIP_DHCP_DISCOVER_ADD_HOSTNAME 0 +#define LWIP_DHCP_DISCOVER_ADD_HOSTNAME 1 #endif /* LWIP_DHCP_DISCOVER_ADD_HOSTNAME */ /** * @} From 4f8865124767a8c5ebe88340bdb989bf1a70b673 Mon Sep 17 00:00:00 2001 From: Faidon Liambotis Date: Sun, 6 Nov 2022 17:27:26 +0200 Subject: [PATCH 41/94] Add MEM_CUSTOM_ALLOCATOR and make LIBC a subset of it Allow one to provide a custom implementation of free/malloc/calloc instead of the lwip internal allocator. The code to use the libc's implementation already existed, so generalize the existing code and make the libc variant a specialized case of this new capability, retaining full backwards compatibility. --- src/core/init.c | 7 +++++-- src/core/mem.c | 32 +++++++++----------------------- src/include/lwip/mem.h | 2 +- src/include/lwip/opt.h | 22 ++++++++++++++++++++-- 4 files changed, 35 insertions(+), 28 deletions(-) diff --git a/src/core/init.c b/src/core/init.c index 0013a899..b906eff4 100644 --- a/src/core/init.c +++ b/src/core/init.c @@ -196,8 +196,11 @@ PACK_STRUCT_END #if (LWIP_ALTCP && LWIP_EVENT_API) #error "The application layered tcp API does not work with LWIP_EVENT_API" #endif -#if (MEM_LIBC_MALLOC && MEM_USE_POOLS) -#error "MEM_LIBC_MALLOC and MEM_USE_POOLS may not both be simultaneously enabled in your lwipopts.h" +#if (MEM_CUSTOM_ALLOCATOR && !(defined(MEM_CUSTOM_FREE) && defined(MEM_CUSTOM_MALLOC) && defined(MEM_CUSTOM_CALLOC))) +#error "All of MEM_CUSTOM_FREE/MEM_CUSTOM_MALLOC/MEM_CUSTOM_CALLOC must be provided if MEM_CUSTOM_ALLOCATOR is enabled in your lwipopts.h" +#endif +#if (MEM_USE_POOLS && MEM_CUSTOM_ALLOCATOR) +#error "MEM_USE_POOLS may not be used with a custom allocator (MEM_CUSTOM_ALLOCATOR or MEM_LIBC_MALLOC) enabled in your lwipopts.h" #endif #if (MEM_USE_POOLS && !MEMP_USE_CUSTOM_POOLS) #error "MEM_USE_POOLS requires custom pools (MEMP_USE_CUSTOM_POOLS) to be enabled in your lwipopts.h" diff --git a/src/core/mem.c b/src/core/mem.c index 67ee5675..f94fb923 100644 --- a/src/core/mem.c +++ b/src/core/mem.c @@ -152,7 +152,7 @@ mem_overflow_init_raw(void *p, size_t size) } #endif /* MEM_OVERFLOW_CHECK || MEMP_OVERFLOW_CHECK */ -#if MEM_LIBC_MALLOC || MEM_USE_POOLS +#if MEM_CUSTOM_ALLOCATOR || MEM_USE_POOLS /** mem_init is not used when using pools instead of a heap or using * C library malloc(). @@ -172,23 +172,9 @@ mem_trim(void *mem, mem_size_t size) LWIP_UNUSED_ARG(size); return mem; } -#endif /* MEM_LIBC_MALLOC || MEM_USE_POOLS */ +#endif /* MEM_CUSTOM_ALLOCATOR || MEM_USE_POOLS */ -#if MEM_LIBC_MALLOC -/* lwIP heap implemented using C library malloc() */ - -/* in case C library malloc() needs extra protection, - * allow these defines to be overridden. - */ -#ifndef mem_clib_free -#define mem_clib_free free -#endif -#ifndef mem_clib_malloc -#define mem_clib_malloc malloc -#endif -#ifndef mem_clib_calloc -#define mem_clib_calloc calloc -#endif +#if MEM_CUSTOM_ALLOCATOR #if LWIP_STATS && MEM_STATS #define MEM_LIBC_STATSHELPER_SIZE LWIP_MEM_ALIGN_SIZE(sizeof(mem_size_t)) @@ -207,7 +193,7 @@ mem_trim(void *mem, mem_size_t size) void * mem_malloc(mem_size_t size) { - void *ret = mem_clib_malloc(size + MEM_LIBC_STATSHELPER_SIZE); + void *ret = MEM_CUSTOM_MALLOC(size + MEM_LIBC_STATSHELPER_SIZE); if (ret == NULL) { MEM_STATS_INC_LOCKED(err); } else { @@ -234,7 +220,7 @@ mem_free(void *rmem) rmem = (u8_t *)rmem - MEM_LIBC_STATSHELPER_SIZE; MEM_STATS_DEC_USED_LOCKED(used, *(mem_size_t *)rmem); #endif - mem_clib_free(rmem); + MEM_CUSTOM_FREE(rmem); } #elif MEM_USE_POOLS @@ -978,14 +964,14 @@ mem_malloc_adjust_lfree: #endif /* MEM_USE_POOLS */ -#if MEM_LIBC_MALLOC && (!LWIP_STATS || !MEM_STATS) +#if MEM_CUSTOM_ALLOCATOR && (!LWIP_STATS || !MEM_STATS) void * mem_calloc(mem_size_t count, mem_size_t size) { - return mem_clib_calloc(count, size); + return MEM_CUSTOM_CALLOC(count, size); } -#else /* MEM_LIBC_MALLOC && (!LWIP_STATS || !MEM_STATS) */ +#else /* MEM_CUSTOM_ALLOCATOR && (!LWIP_STATS || !MEM_STATS) */ /** * Contiguously allocates enough space for count objects that are size bytes * of memory each and returns a pointer to the allocated memory. @@ -1015,4 +1001,4 @@ mem_calloc(mem_size_t count, mem_size_t size) } return p; } -#endif /* MEM_LIBC_MALLOC && (!LWIP_STATS || !MEM_STATS) */ +#endif /* MEM_CUSTOM_ALLOCATOR && (!LWIP_STATS || !MEM_STATS) */ diff --git a/src/include/lwip/mem.h b/src/include/lwip/mem.h index ff208d25..6819ee48 100644 --- a/src/include/lwip/mem.h +++ b/src/include/lwip/mem.h @@ -43,7 +43,7 @@ extern "C" { #endif -#if MEM_LIBC_MALLOC +#if MEM_CUSTOM_ALLOCATOR #include "lwip/arch.h" diff --git a/src/include/lwip/opt.h b/src/include/lwip/opt.h index 1ce45082..27958405 100644 --- a/src/include/lwip/opt.h +++ b/src/include/lwip/opt.h @@ -245,10 +245,28 @@ /** * MEM_LIBC_MALLOC==1: Use malloc/free/realloc provided by your C-library * instead of the lwip internal allocator. Can save code size if you - * already use it. + * already use it. Specialized case of MEM_CUSTOM_ALLOCATOR. + * @see MEM_CUSTOM_ALLOCATOR */ #if !defined MEM_LIBC_MALLOC || defined __DOXYGEN__ #define MEM_LIBC_MALLOC 0 +#elif MEM_LIBC_MALLOC +#define MEM_CUSTOM_ALLOCATOR 1 +#define MEM_CUSTOM_FREE free +#define MEM_CUSTOM_MALLOC malloc +#define MEM_CUSTOM_CALLOC calloc +#endif + +/** + * MEM_CUSTOM_ALLOCATOR==1: Use malloc/free/realloc provided by a custom + * implementation instead of the lwip internal allocator. Can save code size if + * you already use it. If enabled, you have to define those functions: + * \#define MEM_CUSTOM_FREE my_free + * \#define MEM_CUSTOM_MALLOC my_malloc + * \#define MEM_CUSTOM_CALLOC my_calloc + */ +#if !defined MEM_CUSTOM_ALLOCATOR || defined __DOXYGEN__ +#define MEM_CUSTOM_ALLOCATOR 0 #endif /** @@ -2238,7 +2256,7 @@ * MEM_STATS==1: Enable mem.c stats. */ #if !defined MEM_STATS || defined __DOXYGEN__ -#define MEM_STATS ((MEM_LIBC_MALLOC == 0) && (MEM_USE_POOLS == 0)) +#define MEM_STATS ((MEM_CUSTOM_ALLOCATOR == 0) && (MEM_USE_POOLS == 0)) #endif /** From f5e7e8e576a44c016591ae47c24d4d49b64978cb Mon Sep 17 00:00:00 2001 From: Simon Goldschmidt Date: Thu, 12 Oct 2023 08:26:00 +0200 Subject: [PATCH 42/94] pbuf: pbuf_get_contiguous: allow passing NULL for buffer to prevent copying see bug #62832 --- src/core/pbuf.c | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/src/core/pbuf.c b/src/core/pbuf.c index eec83706..9c7c9ba9 100644 --- a/src/core/pbuf.c +++ b/src/core/pbuf.c @@ -1094,12 +1094,15 @@ pbuf_copy_partial(const struct pbuf *buf, void *dataptr, u16_t len, u16_t offset * a copy into the user-supplied buffer. * * @param p the pbuf from which to copy data - * @param buffer the application supplied buffer - * @param bufsize size of the application supplied buffer - * @param len length of data to copy (dataptr must be big enough). No more - * than buf->tot_len will be copied, irrespective of len + * @param buffer the application supplied buffer. May be NULL if the caller does not + * want to copy. In this case, offset + len should be checked against p->tot_len, + * since there's no way for the caller to know why NULL is returned. + * @param bufsize size of the application supplied buffer (when buffer is != NULL) + * @param len length of data to copy (p and buffer must be big enough) * @param offset offset into the packet buffer from where to begin copying len bytes - * @return pointer to 'buffer' on success or NULL on error + * @return - pointer into pbuf payload if that is already contiguous (no copy needed) + * - pointer to 'buffer' if data was not contiguous and had to be copied + * - NULL on error */ void * pbuf_get_contiguous(const struct pbuf *p, void *buffer, size_t bufsize, u16_t len, u16_t offset) @@ -1108,8 +1111,7 @@ pbuf_get_contiguous(const struct pbuf *p, void *buffer, size_t bufsize, u16_t le u16_t out_offset; LWIP_ERROR("pbuf_get_contiguous: invalid buf", (p != NULL), return NULL;); - LWIP_ERROR("pbuf_get_contiguous: invalid dataptr", (buffer != NULL), return NULL;); - LWIP_ERROR("pbuf_get_contiguous: invalid dataptr", (bufsize >= len), return NULL;); + LWIP_ERROR("pbuf_get_contiguous: invalid bufsize", (buffer == NULL) || (bufsize >= len), return NULL;); q = pbuf_skip_const(p, offset, &out_offset); if (q != NULL) { @@ -1117,6 +1119,10 @@ pbuf_get_contiguous(const struct pbuf *p, void *buffer, size_t bufsize, u16_t le /* all data in this pbuf, return zero-copy */ return (u8_t *)q->payload + out_offset; } + if (buffer == NULL) { + /* the caller does not want to copy */ + return NULL; + } /* need to copy */ if (pbuf_copy_partial(q, buffer, len, out_offset) != len) { /* copying failed: pbuf is too short */ From de0b97861a3f24b6291b5cc9e9640ca79f5bedf1 Mon Sep 17 00:00:00 2001 From: Thomas Kindler Date: Fri, 28 May 2021 10:34:21 +0200 Subject: [PATCH 43/94] Fix bug #60681: Initialize custom data in pbuf struct Add a #define that users can use to initialize LWIP_PBUF_CUSTOM_DATA fields. see patch #10072 idea by Thomas Kindler --- src/core/pbuf.c | 2 ++ src/include/lwip/opt.h | 12 ++++++++++++ 2 files changed, 14 insertions(+) diff --git a/src/core/pbuf.c b/src/core/pbuf.c index 9c7c9ba9..ad3995b1 100644 --- a/src/core/pbuf.c +++ b/src/core/pbuf.c @@ -186,6 +186,8 @@ pbuf_init_alloced_pbuf(struct pbuf *p, void *payload, u16_t tot_len, u16_t len, p->flags = flags; p->ref = 1; p->if_idx = NETIF_NO_INDEX; + + LWIP_PBUF_CUSTOM_DATA_INIT(p); } /** diff --git a/src/include/lwip/opt.h b/src/include/lwip/opt.h index 27958405..2573285f 100644 --- a/src/include/lwip/opt.h +++ b/src/include/lwip/opt.h @@ -1628,10 +1628,22 @@ /** * LWIP_PBUF_CUSTOM_DATA: Store private data on pbufs (e.g. timestamps) * This extends struct pbuf so user can store custom data on every pbuf. + * e.g.: + * \#define LWIP_PBUF_CUSTOM_DATA u32_t myref; */ #if !defined LWIP_PBUF_CUSTOM_DATA || defined __DOXYGEN__ #define LWIP_PBUF_CUSTOM_DATA #endif + +/** + * LWIP_PBUF_CUSTOM_DATA_INIT: Initialize private data on pbufs. + * e.g. for the above example definition: + * \#define LWIP_PBUF_CUSTOM_DATA(p) (p)->myref = 0 + */ +#if !defined LWIP_PBUF_CUSTOM_DATA_INIT || defined __DOXYGEN__ +#define LWIP_PBUF_CUSTOM_DATA_INIT(p) +#endif + /** * @} */ From 574bd6e5aa57b971db7b347b8ad761342be9a02c Mon Sep 17 00:00:00 2001 From: duckpowerMB Date: Thu, 9 Sep 2021 16:52:55 +0800 Subject: [PATCH 44/94] tcp_in : fix ooseq update error if a pbuf received with the same seqno in ooseq , we then check the size and replace the existing one with the larger one,but if the existing one is the last segment in ooseq ,it might has been trimed before. the replacing action will overrun our receive windows see patch #10106 and bug #56397 --- src/core/tcp_in.c | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/core/tcp_in.c b/src/core/tcp_in.c index c7a1f7b7..de64464d 100644 --- a/src/core/tcp_in.c +++ b/src/core/tcp_in.c @@ -1687,6 +1687,15 @@ tcp_receive(struct tcp_pcb *pcb) ->ooseq. We check the lengths to see which one to discard. */ if (inseg.len > next->len) { + + /* If next segment is the last segment in ooseq + and smaller than inseg, that means it has been + trimmed before to fit our window, so we just + break here. */ + if (next->next == NULL) { + break; + } + /* The incoming segment is larger than the old segment. We replace some segments with the new one. */ From 35cbad52cc64572ee46a52bcf0f98d5917dca878 Mon Sep 17 00:00:00 2001 From: David Fries Date: Wed, 18 Aug 2021 00:19:40 -0500 Subject: [PATCH 45/94] Document that sntp_setservername doesn't copy the string I was expecting the string to be duplicated, doing a Google search shows others did as well. --- src/apps/sntp/sntp.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/apps/sntp/sntp.c b/src/apps/sntp/sntp.c index 0e7f3652..36375305 100644 --- a/src/apps/sntp/sntp.c +++ b/src/apps/sntp/sntp.c @@ -914,7 +914,8 @@ sntp_getkodreceived(u8_t idx) * Initialize one of the NTP servers by name * * @param idx the index of the NTP server to set must be < SNTP_MAX_SERVERS - * @param server DNS name of the NTP server to set, to be resolved at contact time + * @param server DNS name of the NTP server to set, to be resolved at contact + * time. Note sntp stores the pointer, it doesn't copy the string. */ void sntp_setservername(u8_t idx, const char *server) From 6864eb174938625f049567b0bfb50722c7c6454c Mon Sep 17 00:00:00 2001 From: Simon Goldschmidt Date: Thu, 12 Oct 2023 21:10:53 +0200 Subject: [PATCH 46/94] unixlib: LWIP_LISTEN_BACKLOG -> TCP_LISTEN_BACKLOG see patch #10116 --- contrib/ports/unix/lib/lwipopts.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/contrib/ports/unix/lib/lwipopts.h b/contrib/ports/unix/lib/lwipopts.h index 665ecaf3..16db449b 100644 --- a/contrib/ports/unix/lib/lwipopts.h +++ b/contrib/ports/unix/lib/lwipopts.h @@ -341,7 +341,7 @@ */ #define LWIP_TCP 1 -#define LWIP_LISTEN_BACKLOG 0 +#define TCP_LISTEN_BACKLOG 0 /* ---------------------------------- From efe78e7e5b9e6c3e4916c6d3a722d16f785b2ec3 Mon Sep 17 00:00:00 2001 From: Simon Goldschmidt Date: Thu, 12 Oct 2023 21:34:11 +0200 Subject: [PATCH 47/94] pbuf_cat: add a simple check to ensure we don't cat the same pbuf to itself --- src/core/pbuf.c | 1 + 1 file changed, 1 insertion(+) diff --git a/src/core/pbuf.c b/src/core/pbuf.c index ad3995b1..54a6e0e4 100644 --- a/src/core/pbuf.c +++ b/src/core/pbuf.c @@ -860,6 +860,7 @@ pbuf_cat(struct pbuf *h, struct pbuf *t) LWIP_ERROR("(h != NULL) && (t != NULL) (programmer violates API)", ((h != NULL) && (t != NULL)), return;); + LWIP_ASSERT("Creating an infinite loop", h != t); /* proceed to last pbuf of chain */ for (p = h; p->next != NULL; p = p->next) { From b9ca1deba86eaaaf3e143c6d7d922a755c86761b Mon Sep 17 00:00:00 2001 From: Simon Goldschmidt Date: Thu, 12 Oct 2023 21:41:49 +0200 Subject: [PATCH 48/94] Fix building with ISO C90 This fixes the changes of commit 574bd6e5aa --- src/core/tcp_in.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/core/tcp_in.c b/src/core/tcp_in.c index de64464d..8eb58b97 100644 --- a/src/core/tcp_in.c +++ b/src/core/tcp_in.c @@ -1687,6 +1687,7 @@ tcp_receive(struct tcp_pcb *pcb) ->ooseq. We check the lengths to see which one to discard. */ if (inseg.len > next->len) { + struct tcp_seg* cseg; /* If next segment is the last segment in ooseq and smaller than inseg, that means it has been @@ -1699,7 +1700,7 @@ tcp_receive(struct tcp_pcb *pcb) /* The incoming segment is larger than the old segment. We replace some segments with the new one. */ - struct tcp_seg *cseg = tcp_seg_copy(&inseg); + cseg = tcp_seg_copy(&inseg); if (cseg != NULL) { if (prev != NULL) { prev->next = cseg; From 1eeb70fbfab284054da4a3bc96d366eac77c4c2a Mon Sep 17 00:00:00 2001 From: Simon Goldschmidt Date: Thu, 12 Oct 2023 22:08:14 +0200 Subject: [PATCH 49/94] dhcp: fix memory corruption when LWIP_DHCP_MAX_DNS_SERVERS > DNS_MAX_SERVERS see patch #10124 --- src/core/ipv4/dhcp.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/core/ipv4/dhcp.c b/src/core/ipv4/dhcp.c index d9ed8b0f..12e00683 100644 --- a/src/core/ipv4/dhcp.c +++ b/src/core/ipv4/dhcp.c @@ -1600,7 +1600,7 @@ again: /* special case: there might be more than one server */ LWIP_DHCP_INPUT_ERROR("len %% 4 == 0", len % 4 == 0, return ERR_VAL;); /* limit number of DNS servers */ - decode_len = LWIP_MIN(len, 4 * DNS_MAX_SERVERS); + decode_len = LWIP_MIN(len, 4 * LWIP_DHCP_PROVIDE_DNS_SERVERS); LWIP_DHCP_INPUT_ERROR("len >= decode_len", len >= decode_len, return ERR_VAL;); decode_idx = DHCP_OPTION_IDX_DNS_SERVER; break; From 670a2f082735c4cf9d816cc0218825a3867d1212 Mon Sep 17 00:00:00 2001 From: Florian La Roche Date: Sat, 14 Oct 2023 17:34:13 +0200 Subject: [PATCH 50/94] Fix typos From patch #10399 --- contrib/examples/example_app/lwipopts.h | 4 ++-- src/include/lwip/apps/sntp_opts.h | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/contrib/examples/example_app/lwipopts.h b/contrib/examples/example_app/lwipopts.h index ea2ca4bd..410b922c 100644 --- a/contrib/examples/example_app/lwipopts.h +++ b/contrib/examples/example_app/lwipopts.h @@ -130,7 +130,7 @@ a lot of data that needs to be copied, this should be set high. */ /* MEMP_NUM_UDP_PCB: the number of UDP protocol control blocks. One per active UDP "connection". */ #define MEMP_NUM_UDP_PCB 8 -/* MEMP_NUM_TCP_PCB: the number of simulatenously active TCP +/* MEMP_NUM_TCP_PCB: the number of simultaneously active TCP connections. */ #define MEMP_NUM_TCP_PCB 5 /* MEMP_NUM_TCP_PCB_LISTEN: the number of listening TCP @@ -139,7 +139,7 @@ a lot of data that needs to be copied, this should be set high. */ /* MEMP_NUM_TCP_SEG: the number of simultaneously queued TCP segments. */ #define MEMP_NUM_TCP_SEG 16 -/* MEMP_NUM_SYS_TIMEOUT: the number of simulateously active +/* MEMP_NUM_SYS_TIMEOUT: the number of simultaneously active timeouts. */ #define MEMP_NUM_SYS_TIMEOUT 17 diff --git a/src/include/lwip/apps/sntp_opts.h b/src/include/lwip/apps/sntp_opts.h index cb627716..1fad9a84 100644 --- a/src/include/lwip/apps/sntp_opts.h +++ b/src/include/lwip/apps/sntp_opts.h @@ -158,14 +158,14 @@ /** SNTP receive timeout - in milliseconds * Also used as retry timeout - this shouldn't be too low. - * Default is 15 seconds. Must not be beolw 15 seconds by specification (i.e. 15000) + * Default is 15 seconds. Must not be below 15 seconds by specification (i.e. 15000) */ #if !defined SNTP_RECV_TIMEOUT || defined __DOXYGEN__ #define SNTP_RECV_TIMEOUT 15000 #endif /** SNTP update delay - in milliseconds - * Default is 1 hour. Must not be beolw 60 seconds by specification (i.e. 60000) + * Default is 1 hour. Must not be below 60 seconds by specification (i.e. 60000) */ #if !defined SNTP_UPDATE_DELAY || defined __DOXYGEN__ #define SNTP_UPDATE_DELAY 3600000 From 34516d5c2ef12220b20ca4c8a314916d382160fd Mon Sep 17 00:00:00 2001 From: Erik Ekman Date: Sat, 14 Oct 2023 17:50:23 +0200 Subject: [PATCH 51/94] Update codespell false positives --- codespell_check.sh | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/codespell_check.sh b/codespell_check.sh index 7d8d0dfb..3c88a3e4 100755 --- a/codespell_check.sh +++ b/codespell_check.sh @@ -39,7 +39,8 @@ CODESPELL_OPTS="-q 2" # Disable "WARNING: Binary file" CODESPELL_OPTS+=" --check-hidden" # Disable false positives "nd => and, 2nd", "ans => and", "tolen => token", # "ofo => of", "WAN => WANT", "mut => must, mutt, moot" -CODESPELL_OPTS+=" --ignore-words-list=nd,ans,tolen,ofo,wan,mut " +CODESPELL_OPTS+=" --ignore-words-list=nd,ans,tolen,ofo,wan,mut,clen,useg,clos " +CODESPELL_OPTS+=" --ignore-words-list=devine,clinet,linz,garantie,explicite " # propagate all options to codespell -> pass "-w" to this script to write changes CODESPELL_OPTS+="$@" From 20c9b117e1d701454541e0adfef2fdf722eb3262 Mon Sep 17 00:00:00 2001 From: Erik Ekman Date: Sat, 14 Oct 2023 17:40:06 +0200 Subject: [PATCH 52/94] test: Fix speling issues Found by codespell --- test/fuzz/fuzz_common.c | 4 ++-- test/unit/api/test_sockets.c | 2 +- test/unit/tcp/test_tcp.c | 2 +- test/unit/tcp/test_tcp_oos.c | 4 ++-- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/test/fuzz/fuzz_common.c b/test/fuzz/fuzz_common.c index 17dd9575..ef00e9de 100644 --- a/test/fuzz/fuzz_common.c +++ b/test/fuzz/fuzz_common.c @@ -267,7 +267,7 @@ static void input_pkts(enum lwip_fuzz_type type, struct netif *netif, const u8_t #if LWIP_TCP static struct altcp_pcb *tcp_client_pcb; /* a pcb for the TCP client */ static struct altcp_pcb *tcp_server_pcb; /* a pcb for the TCP server */ -static u16_t tcp_remote_port; /* a TCP port number of the destionation */ +static u16_t tcp_remote_port; /* a TCP port number of the destination */ static u16_t tcp_local_port; /* a TCP port number of the local server */ /** @@ -519,7 +519,7 @@ udp_app_fuzz_input(struct udp_pcb *pcb, const ip_addr_t *addr, u16_t port) * We use udp_send(). * * server: - * The pcb does NOT have infomation about the destionation. + * The pcb does NOT have information about the destination. * We use udp_sendto(). */ if (addr == NULL) { diff --git a/test/unit/api/test_sockets.c b/test/unit/api/test_sockets.c index 3faa5ff9..1bcce341 100644 --- a/test/unit/api/test_sockets.c +++ b/test/unit/api/test_sockets.c @@ -252,7 +252,7 @@ static void test_sockets_msgapi_update_iovs(struct msghdr *msg, size_t bytes) { msg_iovlen_t i; - /* note: this modifies the underyling iov_base and iov_len for a partial + /* note: this modifies the underlying iov_base and iov_len for a partial read for an individual vector. This updates the msg->msg_iov pointer to skip fully consumed vectors */ diff --git a/test/unit/tcp/test_tcp.c b/test/unit/tcp/test_tcp.c index 42324d47..2efcbbf3 100644 --- a/test/unit/tcp/test_tcp.c +++ b/test/unit/tcp/test_tcp.c @@ -517,7 +517,7 @@ START_TEST(test_tcp_fast_retx_recover) /* queue data4, don't send it (unsent-oversize is != 0) */ err = tcp_write(pcb, data4, sizeof(data4), TCP_WRITE_FLAG_COPY); EXPECT_RET(err == ERR_OK); - /* 3nd duplicate ACK for data1 (data2 and data3 are lost) -> fast retransmission */ + /* 3rd duplicate ACK for data1 (data2 and data3 are lost) -> fast retransmission */ p = tcp_create_rx_segment(pcb, NULL, 0, 0, 0, TCP_ACK); EXPECT_RET(p != NULL); test_tcp_input(p, &netif); diff --git a/test/unit/tcp/test_tcp_oos.c b/test/unit/tcp/test_tcp_oos.c index a190e7dc..43d722b2 100644 --- a/test/unit/tcp/test_tcp_oos.c +++ b/test/unit/tcp/test_tcp_oos.c @@ -515,7 +515,7 @@ START_TEST(test_tcp_recv_ooseq_overrun_rxwin) } } - /* pass in one more segment, cleary overrunning the rxwin */ + /* pass in one more segment, clearly overrunning the rxwin */ p_ovr = tcp_create_rx_segment(pcb, &data_full_wnd[TCP_MSS*(k+1)], TCP_MSS, TCP_MSS*(k+1), 0, TCP_ACK); EXPECT_RET(p_ovr != NULL); /* pass the segment to tcp_input */ @@ -602,7 +602,7 @@ START_TEST(test_tcp_recv_ooseq_overrun_rxwin_edge) } } - /* pass in one more segment, cleary overrunning the rxwin */ + /* pass in one more segment, clearly overrunning the rxwin */ p_ovr = tcp_create_rx_segment(pcb, &data_full_wnd[TCP_MSS*(k+1)], TCP_MSS, TCP_MSS*(k+1), 0, TCP_ACK); EXPECT_RET(p_ovr != NULL); /* pass the segment to tcp_input */ From 0ab52ff447cbd393eb4e8fa421a87597c0ad1e67 Mon Sep 17 00:00:00 2001 From: Erik Ekman Date: Sat, 14 Oct 2023 17:44:02 +0200 Subject: [PATCH 53/94] PPP: Fix speling issues Found by codespell --- src/include/netif/ppp/pppoe.h | 2 +- src/include/netif/ppp/vj.h | 2 +- src/netif/ppp/lcp.c | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/include/netif/ppp/pppoe.h b/src/include/netif/ppp/pppoe.h index 8994d38c..b5f7ed11 100644 --- a/src/include/netif/ppp/pppoe.h +++ b/src/include/netif/ppp/pppoe.h @@ -128,7 +128,7 @@ PACK_STRUCT_END #define PPPOE_TAG_RELAYSID 0x0110 /* relay session id */ #define PPPOE_TAG_SNAME_ERR 0x0201 /* service name error */ #define PPPOE_TAG_ACSYS_ERR 0x0202 /* AC system error */ -#define PPPOE_TAG_GENERIC_ERR 0x0203 /* gerneric error */ +#define PPPOE_TAG_GENERIC_ERR 0x0203 /* generic error */ #define PPPOE_CODE_PADI 0x09 /* Active Discovery Initiation */ #define PPPOE_CODE_PADO 0x07 /* Active Discovery Offer */ diff --git a/src/include/netif/ppp/vj.h b/src/include/netif/ppp/vj.h index 4e6601c1..a9ba7863 100644 --- a/src/include/netif/ppp/vj.h +++ b/src/include/netif/ppp/vj.h @@ -53,7 +53,7 @@ extern "C" { * * There are 5 numbers which can change (they are always inserted * in the following order): TCP urgent pointer, window, - * acknowlegement, sequence number and IP ID. (The urgent pointer + * acknowledgement, sequence number and IP ID. (The urgent pointer * is different from the others in that its value is sent, not the * change in value.) Since typical use of SLIP links is biased * toward small packets (see comments on MTU/MSS below), changes diff --git a/src/netif/ppp/lcp.c b/src/netif/ppp/lcp.c index 8b51a8f6..3bc0092b 100644 --- a/src/netif/ppp/lcp.c +++ b/src/netif/ppp/lcp.c @@ -1499,7 +1499,7 @@ static int lcp_nakci(fsm *f, u_char *p, int len, int treat_as_reject) { break; case CI_AUTHTYPE: /* This is potentially dead code (#if !PPP_AUTH_SUPPORT) - * Thus the double parantheses to mark the code explicitely + * Thus the double parentheses to mark the code explicitly * disabled when building with clang */ if ((0 From 3c06267d8e3b2ff3b8e0e7d452c44f1b0de53eee Mon Sep 17 00:00:00 2001 From: Erik Ekman Date: Sat, 14 Oct 2023 17:50:02 +0200 Subject: [PATCH 54/94] apps/http_client: Fix speling issues Found by codespell --- src/apps/http/http_client.c | 8 ++++---- src/include/lwip/apps/http_client.h | 4 ++-- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/apps/http/http_client.c b/src/apps/http/http_client.c index a284708d..8d80cc25 100644 --- a/src/apps/http/http_client.c +++ b/src/apps/http/http_client.c @@ -633,7 +633,7 @@ httpc_init_connection_addr(httpc_state_t **connection, const httpc_connection_t * @param settings connection settings (callbacks, proxy, etc.) * @param recv_fn the http body (not the headers) are passed to this callback * @param callback_arg argument passed to all the callbacks - * @param connection retreives the connection handle (to match in callbacks) + * @param connection retrieves the connection handle (to match in callbacks) * @return ERR_OK if starting the request succeeds (callback_fn will be called later) * or an error code */ @@ -678,7 +678,7 @@ httpc_get_file(const ip_addr_t* server_addr, u16_t port, const char* uri, const * @param settings connection settings (callbacks, proxy, etc.) * @param recv_fn the http body (not the headers) are passed to this callback * @param callback_arg argument passed to all the callbacks - * @param connection retreives the connection handle (to match in callbacks) + * @param connection retrieves the connection handle (to match in callbacks) * @return ERR_OK if starting the request succeeds (callback_fn will be called later) * or an error code */ @@ -819,7 +819,7 @@ httpc_fs_tcp_recv(void *arg, struct altcp_pcb *pcb, struct pbuf *p, err_t err) * @param uri uri to get from the server, remember leading "/"! * @param settings connection settings (callbacks, proxy, etc.) * @param callback_arg argument passed to all the callbacks - * @param connection retreives the connection handle (to match in callbacks) + * @param connection retrieves the connection handle (to match in callbacks) * @return ERR_OK if starting the request succeeds (callback_fn will be called later) * or an error code */ @@ -871,7 +871,7 @@ httpc_get_file_to_disk(const ip_addr_t* server_addr, u16_t port, const char* uri * @param uri uri to get from the server, remember leading "/"! * @param settings connection settings (callbacks, proxy, etc.) * @param callback_arg argument passed to all the callbacks - * @param connection retreives the connection handle (to match in callbacks) + * @param connection retrieves the connection handle (to match in callbacks) * @return ERR_OK if starting the request succeeds (callback_fn will be called later) * or an error code */ diff --git a/src/include/lwip/apps/http_client.h b/src/include/lwip/apps/http_client.h index d39e1bf8..3ba6d803 100644 --- a/src/include/lwip/apps/http_client.h +++ b/src/include/lwip/apps/http_client.h @@ -53,7 +53,7 @@ extern "C" { /** * @ingroup httpc - * HTTPC_HAVE_FILE_IO: define this to 1 to have functions dowloading directly + * HTTPC_HAVE_FILE_IO: define this to 1 to have functions downloading directly * to disk via fopen/fwrite. * These functions are example implementations of the interface only. */ @@ -116,7 +116,7 @@ typedef void (*httpc_result_fn)(void *arg, httpc_result_t httpc_result, u32_t rx * @param connection http client connection * @param arg argument specified when initiating the request * @param hdr header pbuf(s) (may contain data also) - * @param hdr_len length of the heders in 'hdr' + * @param hdr_len length of the headers in 'hdr' * @param content_len content length as received in the headers (-1 if not received) * @return if != ERR_OK is returned, the connection is aborted */ From e7abb85d63f6f18f217bb88101fd9a08fa49e3a0 Mon Sep 17 00:00:00 2001 From: Erik Ekman Date: Sat, 14 Oct 2023 18:01:37 +0200 Subject: [PATCH 55/94] contrib: Fix speling issues Found by codespell --- codespell_check.sh | 2 +- contrib/ports/unix/lib/lwipopts.h | 6 +++--- contrib/ports/unix/posixlib/include/posix/sockets.h | 2 +- contrib/ports/win32/pcapif_helper.c | 2 +- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/codespell_check.sh b/codespell_check.sh index 3c88a3e4..89b25a1f 100755 --- a/codespell_check.sh +++ b/codespell_check.sh @@ -40,7 +40,7 @@ CODESPELL_OPTS+=" --check-hidden" # Disable false positives "nd => and, 2nd", "ans => and", "tolen => token", # "ofo => of", "WAN => WANT", "mut => must, mutt, moot" CODESPELL_OPTS+=" --ignore-words-list=nd,ans,tolen,ofo,wan,mut,clen,useg,clos " -CODESPELL_OPTS+=" --ignore-words-list=devine,clinet,linz,garantie,explicite " +CODESPELL_OPTS+=" --ignore-words-list=devine,clinet,linz,garantie,explicite,numer " # propagate all options to codespell -> pass "-w" to this script to write changes CODESPELL_OPTS+="$@" diff --git a/contrib/ports/unix/lib/lwipopts.h b/contrib/ports/unix/lib/lwipopts.h index 16db449b..79319a1c 100644 --- a/contrib/ports/unix/lib/lwipopts.h +++ b/contrib/ports/unix/lib/lwipopts.h @@ -109,7 +109,7 @@ #define MEMP_NUM_UDP_PCB 4 /** - * MEMP_NUM_TCP_PCB: the number of simulatenously active TCP connections. + * MEMP_NUM_TCP_PCB: the number of simultaneously active TCP connections. * (requires the LWIP_TCP option) */ #define MEMP_NUM_TCP_PCB 4 @@ -133,7 +133,7 @@ #define MEMP_NUM_REASSDATA 1 /** - * MEMP_NUM_ARP_QUEUE: the number of simulateously queued outgoing + * MEMP_NUM_ARP_QUEUE: the number of simultaneously queued outgoing * packets (pbufs) that are waiting for an ARP request (to resolve * their destination address) to finish. * (requires the ARP_QUEUEING option) @@ -141,7 +141,7 @@ #define MEMP_NUM_ARP_QUEUE 2 /** - * MEMP_NUM_SYS_TIMEOUT: the number of simulateously active timeouts. + * MEMP_NUM_SYS_TIMEOUT: the number of simultaneously active timeouts. * (requires NO_SYS==0) */ #define MEMP_NUM_SYS_TIMEOUT 8 diff --git a/contrib/ports/unix/posixlib/include/posix/sockets.h b/contrib/ports/unix/posixlib/include/posix/sockets.h index f3900666..2370bb7f 100644 --- a/contrib/ports/unix/posixlib/include/posix/sockets.h +++ b/contrib/ports/unix/posixlib/include/posix/sockets.h @@ -120,7 +120,7 @@ const char *lwip_inet_ntop(int af, const void *src, char *dst, socklen_t size); int lwip_inet_pton(int af, const char *src, void *dst); #endif -/* Unsuported indetifiers */ +/* Unsupported identifiers */ #ifndef SO_NO_CHECK #define SO_NO_CHECK 0xFF #endif diff --git a/contrib/ports/win32/pcapif_helper.c b/contrib/ports/win32/pcapif_helper.c index 03b92e0d..9cc889c1 100644 --- a/contrib/ports/win32/pcapif_helper.c +++ b/contrib/ports/win32/pcapif_helper.c @@ -115,7 +115,7 @@ pcapifh_free_readonly_mem(void *data) } /** - * Npcap keeps its DLLs in a different directory for compatiblity with winpcap. + * Npcap keeps its DLLs in a different directory for compatibility with winpcap. * Make sure they get found by adding that directory to the DLL search path. */ void pcapifh_init_npcap(void) From b6b20613ceb0fc4f806499ff3b0833b9ea5cec17 Mon Sep 17 00:00:00 2001 From: Erik Ekman Date: Sat, 14 Oct 2023 18:04:35 +0200 Subject: [PATCH 56/94] src/api: Fix speling issues Found by codespell --- src/api/netdb.c | 2 +- src/api/tcpip.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/api/netdb.c b/src/api/netdb.c index e07ab049..6c1c8e18 100644 --- a/src/api/netdb.c +++ b/src/api/netdb.c @@ -62,7 +62,7 @@ int h_errno; #endif /* LWIP_DNS_API_DECLARE_H_ERRNO */ /** LWIP_DNS_API_HOSTENT_STORAGE: if set to 0 (default), lwip_gethostbyname() - * returns the same global variabe for all calls (in all threads). + * returns the same global variable for all calls (in all threads). * When set to 1, your port should provide a function * struct hostent* sys_thread_hostent( struct hostent* h); * which have to do a copy of "h" and return a pointer ont the "per-thread" diff --git a/src/api/tcpip.c b/src/api/tcpip.c index 3aecbd43..cad53800 100644 --- a/src/api/tcpip.c +++ b/src/api/tcpip.c @@ -428,7 +428,7 @@ tcpip_untimeout(sys_timeout_handler h, void *arg) /** * Sends a message to TCPIP thread to call a function. Caller thread blocks on - * on a provided semaphore, which ist NOT automatically signalled by TCPIP thread, + * on a provided semaphore, which is NOT automatically signalled by TCPIP thread, * this has to be done by the user. * It is recommended to use LWIP_TCPIP_CORE_LOCKING since this is the way * with least runtime overhead. From 5e45328bb52d47538c22a67918a55af96dd33d0f Mon Sep 17 00:00:00 2001 From: Erik Ekman Date: Sat, 14 Oct 2023 18:08:00 +0200 Subject: [PATCH 57/94] src/apps: Fix speling issues Found by codespell --- src/apps/altcp_tls/altcp_tls_mbedtls.c | 2 +- src/apps/mdns/mdns.c | 2 +- src/apps/mqtt/mqtt.c | 2 +- src/apps/netbiosns/netbiosns.c | 2 +- src/apps/smtp/smtp.c | 2 +- src/apps/snmp/snmp_core.c | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/apps/altcp_tls/altcp_tls_mbedtls.c b/src/apps/altcp_tls/altcp_tls_mbedtls.c index e387f8d1..9e619126 100644 --- a/src/apps/altcp_tls/altcp_tls_mbedtls.c +++ b/src/apps/altcp_tls/altcp_tls_mbedtls.c @@ -48,7 +48,7 @@ * GOOD custom entropy * * Missing things / @todo: - * - some unhandled/untested things migh be caught by LWIP_ASSERTs... + * - some unhandled/untested things might be caught by LWIP_ASSERTs... */ #include "lwip/opt.h" diff --git a/src/apps/mdns/mdns.c b/src/apps/mdns/mdns.c index 394d9d1c..84f267a6 100644 --- a/src/apps/mdns/mdns.c +++ b/src/apps/mdns/mdns.c @@ -1792,7 +1792,7 @@ mdns_probe_conflict(struct netif *netif, s8_t slot) } /** - * Loockup matching request for response MDNS packet + * Lookup matching request for response MDNS packet */ #if LWIP_MDNS_SEARCH static struct mdns_request * diff --git a/src/apps/mqtt/mqtt.c b/src/apps/mqtt/mqtt.c index 33c89add..af4b331a 100644 --- a/src/apps/mqtt/mqtt.c +++ b/src/apps/mqtt/mqtt.c @@ -318,7 +318,7 @@ mqtt_append_request(struct mqtt_request_t **tail, struct mqtt_request_t *r) LWIP_ASSERT("mqtt_append_request: tail != NULL", tail != NULL); - /* Iterate trough queue to find head, and count total timeout time */ + /* Iterate through queue to find head, and count total timeout time */ for (iter = *tail; iter != NULL; iter = iter->next) { time_before += iter->timeout_diff; head = iter; diff --git a/src/apps/netbiosns/netbiosns.c b/src/apps/netbiosns/netbiosns.c index 479c375b..4b1383e7 100644 --- a/src/apps/netbiosns/netbiosns.c +++ b/src/apps/netbiosns/netbiosns.c @@ -391,7 +391,7 @@ netbiosns_recv(void *arg, struct udp_pcb *upcb, struct pbuf *p, const ip_addr_t resp->resp_hdr.authorityRRs = 0; resp->resp_hdr.additionalRRs = 0; - /* prepare NetBIOS header datas */ + /* prepare NetBIOS header data */ MEMCPY( resp->resp_name.encname, netbios_question_hdr->encname, sizeof(netbios_question_hdr->encname)); resp->resp_name.nametype = netbios_question_hdr->nametype; resp->resp_name.type = netbios_question_hdr->type; diff --git a/src/apps/smtp/smtp.c b/src/apps/smtp/smtp.c index a1780bda..498af7f5 100644 --- a/src/apps/smtp/smtp.c +++ b/src/apps/smtp/smtp.c @@ -1305,7 +1305,7 @@ smtp_process(void *arg, struct altcp_pcb *pcb, struct pbuf *p) LWIP_DEBUGF(SMTP_DEBUG_TRACE, ("smtp_process: received response code: %d\n", response_code)); if (smtp_is_response_finished(s) != ERR_OK) { LWIP_DEBUGF(SMTP_DEBUG_TRACE, ("smtp_process: partly received response code: %d\n", response_code)); - /* wait for next packet to complete the respone */ + /* wait for next packet to complete the response */ return; } } else { diff --git a/src/apps/snmp/snmp_core.c b/src/apps/snmp/snmp_core.c index 04e0c317..fc64c428 100644 --- a/src/apps/snmp/snmp_core.c +++ b/src/apps/snmp/snmp_core.c @@ -584,7 +584,7 @@ snmp_oid_prefix(struct snmp_obj_id *target, const u32_t *oid, u8_t oid_len) /** * Combine two OIDs into struct snmp_obj_id - * @param target Assignmet target + * @param target Assignment target * @param oid1 OID 1 * @param oid1_len OID 1 length * @param oid2 OID 2 From 8c1190143cc9ae881158c7d5ac5c0a2489f5759a Mon Sep 17 00:00:00 2001 From: Erik Ekman Date: Sat, 14 Oct 2023 18:10:30 +0200 Subject: [PATCH 58/94] Ignore vim swap files --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 0afbf6f6..6062b849 100644 --- a/.gitignore +++ b/.gitignore @@ -4,6 +4,7 @@ *.exe *lwip_unittests.xml *.suo +*.swp *.log .depend* From 5e3268cf3ea16ed4907a55e167fcf7e2b544fb20 Mon Sep 17 00:00:00 2001 From: Erik Ekman Date: Sat, 14 Oct 2023 18:16:49 +0200 Subject: [PATCH 59/94] src/core: Fix speling issues Found by codespell --- codespell_check.sh | 1 + src/core/ipv4/acd.c | 2 +- src/core/ipv6/nd6.c | 4 ++-- src/core/mem.c | 2 +- src/core/netif.c | 2 +- src/core/tcp_in.c | 2 +- src/core/tcp_out.c | 2 +- src/core/udp.c | 2 +- src/include/lwip/arch.h | 2 +- src/include/lwip/snmp.h | 2 +- 10 files changed, 11 insertions(+), 10 deletions(-) diff --git a/codespell_check.sh b/codespell_check.sh index 89b25a1f..b3c2a169 100755 --- a/codespell_check.sh +++ b/codespell_check.sh @@ -41,6 +41,7 @@ CODESPELL_OPTS+=" --check-hidden" # "ofo => of", "WAN => WANT", "mut => must, mutt, moot" CODESPELL_OPTS+=" --ignore-words-list=nd,ans,tolen,ofo,wan,mut,clen,useg,clos " CODESPELL_OPTS+=" --ignore-words-list=devine,clinet,linz,garantie,explicite,numer " +CODESPELL_OPTS+=" --ignore-words-list=skool " # propagate all options to codespell -> pass "-w" to this script to write changes CODESPELL_OPTS+="$@" diff --git a/src/core/ipv4/acd.c b/src/core/ipv4/acd.c index 2c7d867c..92f3b5a3 100644 --- a/src/core/ipv4/acd.c +++ b/src/core/ipv4/acd.c @@ -143,7 +143,7 @@ acd_add(struct netif *netif, struct acd *acd, /** * @ingroup acd - * Remvoe ACD client from the client list + * Remove ACD client from the client list * * @param netif network interface from which to remove the acd client * @param acd acd module to be removed from the list diff --git a/src/core/ipv6/nd6.c b/src/core/ipv6/nd6.c index 55b5774f..f7b5f563 100644 --- a/src/core/ipv6/nd6.c +++ b/src/core/ipv6/nd6.c @@ -1176,7 +1176,7 @@ nd6_tmr(void) /** Send a neighbor solicitation message for a specific neighbor cache entry * - * @param entry the neightbor cache entry for which to send the message + * @param entry the neighbor cache entry for which to send the message * @param flags one of ND6_SEND_FLAG_* */ static void @@ -1707,7 +1707,7 @@ nd6_select_router(const ip6_addr_t *ip6addr, struct netif *netif) /* Look for valid routers. A reachable router is preferred. */ valid_router = -1; for (i = 0; i < LWIP_ND6_NUM_ROUTERS; i++) { - /* Is the router netif both set and apppropriate? */ + /* Is the router netif both set and appropriate? */ if (default_router_list[i].neighbor_entry != NULL) { router_netif = default_router_list[i].neighbor_entry->netif; if ((router_netif != NULL) && (netif != NULL ? netif == router_netif : diff --git a/src/core/mem.c b/src/core/mem.c index f94fb923..0aa34a26 100644 --- a/src/core/mem.c +++ b/src/core/mem.c @@ -792,7 +792,7 @@ mem_trim(void *rmem, mem_size_t new_size) /* else { next struct mem is used but size between mem and mem2 is not big enough to create another struct mem - -> don't do anyhting. + -> don't do anything. -> the remaining space stays unused since it is too small } */ #if MEM_OVERFLOW_CHECK diff --git a/src/core/netif.c b/src/core/netif.c index d3a06774..98e0553f 100644 --- a/src/core/netif.c +++ b/src/core/netif.c @@ -1409,7 +1409,7 @@ netif_ip6_addr_set_parts(struct netif *netif, s8_t addr_idx, u32_t i0, u32_t i1, if (ip6_addr_isvalid(netif_ip6_addr_state(netif, addr_idx))) { netif_do_ip_addr_changed(netif_ip_addr6(netif, addr_idx), &new_ipaddr); } - /* @todo: remove/readd mib2 ip6 entries? */ + /* @todo: remove/re-add mib2 ip6 entries? */ ip_addr_copy(netif->ip6_addr[addr_idx], new_ipaddr); diff --git a/src/core/tcp_in.c b/src/core/tcp_in.c index 8eb58b97..1b17e40f 100644 --- a/src/core/tcp_in.c +++ b/src/core/tcp_in.c @@ -1564,7 +1564,7 @@ tcp_receive(struct tcp_pcb *pcb) recv_data = inseg.p; /* Since this pbuf now is the responsibility of the application, we delete our reference to it so that we won't - (mistakingly) deallocate it. */ + (mistakenly) deallocate it. */ inseg.p = NULL; } if (TCPH_FLAGS(inseg.tcphdr) & TCP_FIN) { diff --git a/src/core/tcp_out.c b/src/core/tcp_out.c index fee3f5ad..cfcc55dd 100644 --- a/src/core/tcp_out.c +++ b/src/core/tcp_out.c @@ -301,7 +301,7 @@ tcp_seg_add_chksum(u16_t chksum, u16_t len, u16_t *seg_chksum, /** Checks if tcp_write is allowed or not (checks state, snd_buf and snd_queuelen). * * @param pcb the tcp pcb to check for - * @param len length of data to send (checked agains snd_buf) + * @param len length of data to send (checked against snd_buf) * @return ERR_OK if tcp_write is allowed to proceed, another err_t otherwise */ static err_t diff --git a/src/core/udp.c b/src/core/udp.c index 23c2be27..c787ae0a 100644 --- a/src/core/udp.c +++ b/src/core/udp.c @@ -988,7 +988,7 @@ udp_bind(struct udp_pcb *pcb, const ip_addr_t *ipaddr, u16_t port) for (ipcb = udp_pcbs; ipcb != NULL; ipcb = ipcb->next) { if (pcb != ipcb) { /* By default, we don't allow to bind to a port that any other udp - PCB is already bound to, unless *all* PCBs with that port have tha + PCB is already bound to, unless *all* PCBs with that port have the REUSEADDR flag set. */ #if SO_REUSE if (!ip_get_option(pcb, SOF_REUSEADDR) || diff --git a/src/include/lwip/arch.h b/src/include/lwip/arch.h index 596c1c9e..c659a80c 100644 --- a/src/include/lwip/arch.h +++ b/src/include/lwip/arch.h @@ -382,7 +382,7 @@ extern "C" { #define LWIP_PROVIDE_ERRNO #endif -/* Use a special, reproducable version of rand() for fuzz tests? */ +/* Use a special, reproducible version of rand() for fuzz tests? */ #ifdef LWIP_RAND_FOR_FUZZ #ifdef LWIP_RAND #undef LWIP_RAND diff --git a/src/include/lwip/snmp.h b/src/include/lwip/snmp.h index 8704d0b4..24315897 100644 --- a/src/include/lwip/snmp.h +++ b/src/include/lwip/snmp.h @@ -1,6 +1,6 @@ /** * @file - * SNMP support API for implementing netifs and statitics for MIB2 + * SNMP support API for implementing netifs and statistics for MIB2 */ /* From ee1523630a81fffa6b7d93dd0c7a6191de5856cd Mon Sep 17 00:00:00 2001 From: Simon Goldschmidt Date: Wed, 29 Nov 2023 21:35:06 +0100 Subject: [PATCH 60/94] httpc with LWIP_HTTPC_HAVE_FILE_IO: fix heap buffer overflow for long local filenames See bug #64940 --- src/apps/http/http_client.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/apps/http/http_client.c b/src/apps/http/http_client.c index 8d80cc25..32c6f6c2 100644 --- a/src/apps/http/http_client.c +++ b/src/apps/http/http_client.c @@ -734,12 +734,17 @@ httpc_fs_init(httpc_filestate_t **filestate_out, const char* local_file_name, { httpc_filestate_t *filestate; size_t file_len, alloc_len; + mem_size_t alloc_mem_size; FILE *f; file_len = strlen(local_file_name); alloc_len = sizeof(httpc_filestate_t) + file_len + 1; - - filestate = (httpc_filestate_t *)mem_malloc((mem_size_t)alloc_len); + alloc_mem_size = (mem_size_t)alloc_len; + if (alloc_mem_size < alloc_len) { + /* overflow */ + return ERR_MEM; + } + filestate = (httpc_filestate_t *)mem_malloc(alloc_mem_size); if (filestate == NULL) { return ERR_MEM; } From b413b040936f48d4cd9ed632ac579542c710efae Mon Sep 17 00:00:00 2001 From: Simon Goldschmidt Date: Wed, 29 Nov 2023 22:03:46 +0100 Subject: [PATCH 61/94] makefsdata: fix buffer corruption with very long paths See bug #64941 --- src/apps/http/makefsdata/makefsdata.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/apps/http/makefsdata/makefsdata.c b/src/apps/http/makefsdata/makefsdata.c index 240c72e4..c325ee86 100644 --- a/src/apps/http/makefsdata/makefsdata.c +++ b/src/apps/http/makefsdata/makefsdata.c @@ -895,6 +895,10 @@ static int is_ssi_file(const char *filename) /* build up the relative path to this file */ size_t sublen = strlen(curSubdir); size_t freelen = sizeof(curSubdir) - sublen - 1; + if (sublen + strlen(filename) + 1 >= sizeof(curSubdir)) { + /* prevent buffer overflow */ + return 0; + } strncat(curSubdir, "/", freelen); strncat(curSubdir, filename, freelen - 1); curSubdir[sizeof(curSubdir) - 1] = 0; From 09188668c7e776f68eab4473c59ad54c515242af Mon Sep 17 00:00:00 2001 From: Simon Goldschmidt Date: Thu, 4 Jan 2024 22:00:56 +0100 Subject: [PATCH 62/94] update tinydir.h to newest version (1.2.6) Update to cxong/tinydir version 1.2.6 commit 8124807 ("Fix buffer overflow in tinydir_file_open with long path names") Although we're not affected of this bug, prevent others copying from our repo being affected... --- src/apps/http/makefsdata/tinydir.h | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/src/apps/http/makefsdata/tinydir.h b/src/apps/http/makefsdata/tinydir.h index e08eb84e..0b536fa4 100644 --- a/src/apps/http/makefsdata/tinydir.h +++ b/src/apps/http/makefsdata/tinydir.h @@ -1,5 +1,5 @@ /* -Copyright (c) 2013-2019, tinydir authors: +Copyright (c) 2013-2021, tinydir authors: - Cong Xu - Lautis Sun - Baudouin Feildel @@ -125,8 +125,13 @@ extern "C" { # define _TINYDIR_FUNC static __inline #elif !defined __STDC_VERSION__ || __STDC_VERSION__ < 199901L # define _TINYDIR_FUNC static __inline__ -#else +#elif defined(__cplusplus) # define _TINYDIR_FUNC static inline +#elif defined(__GNUC__) +/* Suppress unused function warning */ +# define _TINYDIR_FUNC __attribute__((unused)) static +#else +# define _TINYDIR_FUNC static #endif /* readdir_r usage; define TINYDIR_USE_READDIR_R to use it (if supported) */ @@ -543,7 +548,9 @@ int tinydir_readfile(const tinydir_dir *dir, tinydir_file *file) if (_tstat( #elif (defined _BSD_SOURCE) || (defined _DEFAULT_SOURCE) \ || ((defined _XOPEN_SOURCE) && (_XOPEN_SOURCE >= 500)) \ - || ((defined _POSIX_C_SOURCE) && (_POSIX_C_SOURCE >= 200112L)) + || ((defined _POSIX_C_SOURCE) && (_POSIX_C_SOURCE >= 200112L)) \ + || ((defined __APPLE__) && (defined __MACH__)) \ + || (defined BSD) if (lstat( #else if (stat( @@ -636,7 +643,7 @@ int tinydir_file_open(tinydir_file *file, const _tinydir_char_t *path) int result = 0; int found = 0; _tinydir_char_t dir_name_buf[_TINYDIR_PATH_MAX]; - _tinydir_char_t file_name_buf[_TINYDIR_FILENAME_MAX]; + _tinydir_char_t file_name_buf[_TINYDIR_PATH_MAX]; _tinydir_char_t *dir_name; _tinydir_char_t *base_name; #if (defined _MSC_VER || defined __MINGW32__) From 83abc8714c960879b8140542bafdd0885cad259c Mon Sep 17 00:00:00 2001 From: Renzo Davoli Date: Thu, 2 Feb 2023 18:54:28 +0100 Subject: [PATCH 63/94] avoid callbacks for unsuccessful lwip_accept See bug #64780 --- src/api/sockets.c | 40 +++++++++++++++++++++------------------- 1 file changed, 21 insertions(+), 19 deletions(-) diff --git a/src/api/sockets.c b/src/api/sockets.c index ddf37ab7..6eef9d71 100644 --- a/src/api/sockets.c +++ b/src/api/sockets.c @@ -699,25 +699,6 @@ lwip_accept(int s, struct sockaddr *addr, socklen_t *addrlen) LWIP_ASSERT("invalid socket index", (newsock >= LWIP_SOCKET_OFFSET) && (newsock < NUM_SOCKETS + LWIP_SOCKET_OFFSET)); nsock = &sockets[newsock - LWIP_SOCKET_OFFSET]; - /* See event_callback: If data comes in right away after an accept, even - * though the server task might not have created a new socket yet. - * In that case, newconn->socket is counted down (newconn->socket--), - * so nsock->rcvevent is >= 1 here! - */ - SYS_ARCH_PROTECT(lev); - recvevent = (s16_t)(-1 - newconn->callback_arg.socket); - newconn->callback_arg.socket = newsock; - SYS_ARCH_UNPROTECT(lev); - - if (newconn->callback) { - LOCK_TCPIP_CORE(); - while (recvevent > 0) { - recvevent--; - newconn->callback(newconn, NETCONN_EVT_RCVPLUS, 0); - } - UNLOCK_TCPIP_CORE(); - } - /* Note that POSIX only requires us to check addr is non-NULL. addrlen must * not be NULL if addr is valid. */ @@ -738,7 +719,28 @@ lwip_accept(int s, struct sockaddr *addr, socklen_t *addrlen) *addrlen = IPADDR_SOCKADDR_GET_LEN(&tempaddr); } MEMCPY(addr, &tempaddr, *addrlen); + } + /* See event_callback: If data comes in right away after an accept, even + * though the server task might not have created a new socket yet. + * In that case, newconn->socket is counted down (newconn->socket--), + * so nsock->rcvevent is >= 1 here! + */ + SYS_ARCH_PROTECT(lev); + recvevent = (s16_t)(-1 - newconn->callback_arg.socket); + newconn->callback_arg.socket = newsock; + SYS_ARCH_UNPROTECT(lev); + + if (newconn->callback) { + LOCK_TCPIP_CORE(); + while (recvevent > 0) { + recvevent--; + newconn->callback(newconn, NETCONN_EVT_RCVPLUS, 0); + } + UNLOCK_TCPIP_CORE(); + } + + if ((addr != NULL) && (addrlen != NULL)) { LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_accept(%d) returning new sock=%d addr=", s, newsock)); ip_addr_debug_print_val(SOCKETS_DEBUG, naddr); LWIP_DEBUGF(SOCKETS_DEBUG, (" port=%"U16_F"\n", port)); From 09d929f7ff6c52619510939e724df438a9d5eab1 Mon Sep 17 00:00:00 2001 From: Simon Goldschmidt Date: Tue, 9 Jan 2024 20:51:10 +0100 Subject: [PATCH 64/94] Fix uninitialized variable warning introduced with last commit (at least reported by MS-VS C compiler) --- src/api/sockets.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/api/sockets.c b/src/api/sockets.c index 6eef9d71..b97bdd7e 100644 --- a/src/api/sockets.c +++ b/src/api/sockets.c @@ -660,7 +660,7 @@ lwip_accept(int s, struct sockaddr *addr, socklen_t *addrlen) { struct lwip_sock *sock, *nsock; struct netconn *newconn; - ip_addr_t naddr; + ip_addr_t naddr = {0}; u16_t port = 0; int newsock; err_t err; From 25de99d1c1e8fb984922349ab2128fdaeb025485 Mon Sep 17 00:00:00 2001 From: Simon Goldschmidt Date: Tue, 9 Jan 2024 21:14:49 +0100 Subject: [PATCH 65/94] Introduce constant-time memcmp and use it for snmpv3_get_engine_boots See #65118 --- src/apps/snmp/snmp_msg.c | 2 +- src/core/def.c | 23 +++++++++++++++++++++++ src/include/lwip/def.h | 10 ++++++++++ 3 files changed, 34 insertions(+), 1 deletion(-) diff --git a/src/apps/snmp/snmp_msg.c b/src/apps/snmp/snmp_msg.c index 9cd4b071..9c0a15c5 100644 --- a/src/apps/snmp/snmp_msg.c +++ b/src/apps/snmp/snmp_msg.c @@ -1058,7 +1058,7 @@ snmp_parse_inbound_frame(struct snmp_request *request) IF_PARSE_EXEC(snmpv3_get_user((char *)request->msg_user_name, &auth, key, NULL, NULL)); IF_PARSE_EXEC(snmpv3_auth(&auth_stream, request->inbound_pbuf->tot_len, key, auth, hmac)); - if (memcmp(request->msg_authentication_parameters, hmac, SNMP_V3_MAX_AUTH_PARAM_LENGTH)) { + if (lwip_memcmp_consttime(request->msg_authentication_parameters, hmac, SNMP_V3_MAX_AUTH_PARAM_LENGTH)) { snmp_stats.wrongdigests++; request->msg_flags = SNMP_V3_NOAUTHNOPRIV; request->error_status = SNMP_ERR_AUTHORIZATIONERROR; diff --git a/src/core/def.c b/src/core/def.c index 282fb41d..b2b079c6 100644 --- a/src/core/def.c +++ b/src/core/def.c @@ -261,3 +261,26 @@ lwip_itoa(char *result, size_t bufsize, int number) memmove(res, tmp, (size_t)((result + bufsize) - tmp)); } #endif + +#ifndef lwip_memcmp_consttime +/** + * @ingroup sys_nonstandard + * The goal of this function is to compare memory with constant runtime in order to prevent + * timing attacks to various parts in the stack. + * To do that, in contrast to memcmp(), it only returns: + * 0: equal + * != 0: not equal + */ +int lwip_memcmp_consttime(const void* s1, const void* s2, size_t len) +{ + size_t i; + const unsigned char* a1 = s1; + const unsigned char* a2 = s2; + unsigned char ret = 0; + + for (i = 0; i < len; i++) { + ret |= a1[i] ^ a2[i]; + } + return ret; +} +#endif diff --git a/src/include/lwip/def.h b/src/include/lwip/def.h index d6bf7630..fd7c6a21 100644 --- a/src/include/lwip/def.h +++ b/src/include/lwip/def.h @@ -148,6 +148,16 @@ char* lwip_strnstr(const char* buffer, const char* token, size_t n); /* This can be #defined to strnistr() depending on your platform */ char* lwip_strnistr(const char* buffer, const char* token, size_t n); #endif +#ifndef lwip_memcmp_consttime +/* This could be #defined to something existing on your platform + * The goal of this function is to compare memory with constant runtime in order to prevent + * timing attacks to various parts in the stack. + * To do that, in contrast to memcmp(), it only returns: + * 0: equal + * != 0: not equal + */ +int lwip_memcmp_consttime(const void* s1, const void* s2, size_t len); +#endif #ifdef __cplusplus } From c167a545408c46b69fc554ae5fdace19879b84fb Mon Sep 17 00:00:00 2001 From: Simon Goldschmidt Date: Tue, 9 Jan 2024 21:23:11 +0100 Subject: [PATCH 66/94] ppp: use constant-time memcmp for checking credentials See #65119 --- src/netif/ppp/auth.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/netif/ppp/auth.c b/src/netif/ppp/auth.c index 3e174187..1f271752 100644 --- a/src/netif/ppp/auth.c +++ b/src/netif/ppp/auth.c @@ -1012,8 +1012,8 @@ int auth_check_passwd(ppp_pcb *pcb, char *auser, unsigned int userlen, char *apa secretpasswdlen = strlen(pcb->settings.passwd); if (secretuserlen == userlen && secretpasswdlen == passwdlen - && !memcmp(auser, pcb->settings.user, userlen) - && !memcmp(apasswd, pcb->settings.passwd, passwdlen) ) { + && !lwip_memcmp_consttime(auser, pcb->settings.user, userlen) + && !lwip_memcmp_consttime(apasswd, pcb->settings.passwd, passwdlen) ) { *msg = "Login ok"; *msglen = sizeof("Login ok")-1; return 1; From 347054b329d141b858cc7180bf2aa23c672dc6d7 Mon Sep 17 00:00:00 2001 From: Simon Goldschmidt Date: Tue, 9 Jan 2024 21:26:40 +0100 Subject: [PATCH 67/94] Fix C++ compatibility of newly added function lwip_memcmp_consttime() --- src/core/def.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/core/def.c b/src/core/def.c index b2b079c6..11ad31b6 100644 --- a/src/core/def.c +++ b/src/core/def.c @@ -274,8 +274,8 @@ lwip_itoa(char *result, size_t bufsize, int number) int lwip_memcmp_consttime(const void* s1, const void* s2, size_t len) { size_t i; - const unsigned char* a1 = s1; - const unsigned char* a2 = s2; + const unsigned char* a1 = (const unsigned char*)s1; + const unsigned char* a2 = (const unsigned char*)s2; unsigned char ret = 0; for (i = 0; i < len; i++) { From e1b808034662f89a22748ae9a81d752dacf3b54e Mon Sep 17 00:00:00 2001 From: Sebastian Michel Date: Thu, 4 Jan 2024 08:31:28 +0100 Subject: [PATCH 68/94] contrib: fixed c++ compatibility of unix port --- contrib/ports/unix/port/include/arch/cc.h | 8 ++++++++ contrib/ports/unix/port/include/arch/perf.h | 8 ++++++++ contrib/ports/unix/port/include/arch/sys_arch.h | 8 ++++++++ contrib/ports/unix/port/include/netif/fifo.h | 8 ++++++++ contrib/ports/unix/port/include/netif/list.h | 8 ++++++++ contrib/ports/unix/port/include/netif/pcapif.h | 8 ++++++++ contrib/ports/unix/port/include/netif/sio.h | 8 ++++++++ contrib/ports/unix/port/include/netif/tapif.h | 8 ++++++++ contrib/ports/unix/port/include/netif/vdeif.h | 8 ++++++++ 9 files changed, 72 insertions(+) diff --git a/contrib/ports/unix/port/include/arch/cc.h b/contrib/ports/unix/port/include/arch/cc.h index 7be900bf..c4b51b67 100644 --- a/contrib/ports/unix/port/include/arch/cc.h +++ b/contrib/ports/unix/port/include/arch/cc.h @@ -52,6 +52,10 @@ #define LWIP_TIMEVAL_PRIVATE 0 #include +#ifdef __cplusplus +extern "C" { +#endif + #define LWIP_ERRNO_INCLUDE #if defined(LWIP_UNIX_LINUX) || defined(LWIP_UNIX_HURD) || defined(LWIP_UNIX_KFREEBSD) @@ -86,4 +90,8 @@ typedef struct sio_status_s sio_status_t; typedef unsigned int sys_prot_t; +#ifdef __cplusplus +} +#endif + #endif /* LWIP_ARCH_CC_H */ diff --git a/contrib/ports/unix/port/include/arch/perf.h b/contrib/ports/unix/port/include/arch/perf.h index 364f3164..112a3478 100644 --- a/contrib/ports/unix/port/include/arch/perf.h +++ b/contrib/ports/unix/port/include/arch/perf.h @@ -34,6 +34,10 @@ #include +#ifdef __cplusplus +extern "C" { +#endif + #ifdef PERF #define PERF_START { \ unsigned long __c1l, __c1h, __c2l, __c2h; \ @@ -60,4 +64,8 @@ void perf_print_times(struct tms *start, struct tms *end, char *key); void perf_init(char *fname); +#ifdef __cplusplus +} +#endif + #endif /* LWIP_ARCH_PERF_H */ diff --git a/contrib/ports/unix/port/include/arch/sys_arch.h b/contrib/ports/unix/port/include/arch/sys_arch.h index 567e1256..eb6d1d3e 100644 --- a/contrib/ports/unix/port/include/arch/sys_arch.h +++ b/contrib/ports/unix/port/include/arch/sys_arch.h @@ -32,6 +32,10 @@ #ifndef LWIP_ARCH_SYS_ARCH_H #define LWIP_ARCH_SYS_ARCH_H +#ifdef __cplusplus +extern "C" { +#endif + #define SYS_MBOX_NULL NULL #define SYS_SEM_NULL NULL @@ -87,4 +91,8 @@ void sys_unlock_tcpip_core(void); #define UNLOCK_TCPIP_CORE() sys_unlock_tcpip_core() #endif +#ifdef __cplusplus +} +#endif + #endif /* LWIP_ARCH_SYS_ARCH_H */ diff --git a/contrib/ports/unix/port/include/netif/fifo.h b/contrib/ports/unix/port/include/netif/fifo.h index bda352a7..7c87c829 100644 --- a/contrib/ports/unix/port/include/netif/fifo.h +++ b/contrib/ports/unix/port/include/netif/fifo.h @@ -3,6 +3,10 @@ #include "lwip/sys.h" +#ifdef __cplusplus +extern "C" { +#endif + /** How many bytes in fifo */ #define FIFOSIZE 2048 @@ -50,5 +54,9 @@ void fifoPut(fifo_t * fifo, int fd); */ void fifoInit(fifo_t * fifo); +#ifdef __cplusplus +} +#endif + #endif diff --git a/contrib/ports/unix/port/include/netif/list.h b/contrib/ports/unix/port/include/netif/list.h index 2c4d142a..8c0fe256 100644 --- a/contrib/ports/unix/port/include/netif/list.h +++ b/contrib/ports/unix/port/include/netif/list.h @@ -2,6 +2,10 @@ #ifndef LWIP_LIST_H #define LWIP_LIST_H +#ifdef __cplusplus +extern "C" { +#endif + struct elem; struct list { @@ -23,4 +27,8 @@ void list_delete(struct list *list); int list_remove(struct list *list, void *elem); void list_map(struct list *list, void (* func)(void *arg)); +#ifdef __cplusplus +} +#endif + #endif diff --git a/contrib/ports/unix/port/include/netif/pcapif.h b/contrib/ports/unix/port/include/netif/pcapif.h index ef7abd5f..a9e19720 100644 --- a/contrib/ports/unix/port/include/netif/pcapif.h +++ b/contrib/ports/unix/port/include/netif/pcapif.h @@ -34,6 +34,14 @@ #include "lwip/netif.h" +#ifdef __cplusplus +extern "C" { +#endif + err_t pcapif_init(struct netif *netif); +#ifdef __cplusplus +} +#endif + #endif /* LWIP_PCAPIF_H */ diff --git a/contrib/ports/unix/port/include/netif/sio.h b/contrib/ports/unix/port/include/netif/sio.h index b9ff131b..cb992f86 100644 --- a/contrib/ports/unix/port/include/netif/sio.h +++ b/contrib/ports/unix/port/include/netif/sio.h @@ -6,6 +6,10 @@ #include "netif/fifo.h" /*#include "netif/pppif.h"*/ +#ifdef __cplusplus +extern "C" { +#endif + struct sio_status_s { int fd; fifo_t myfifo; @@ -56,5 +60,9 @@ void sio_flush( sio_status_t * siostat ); */ void sio_change_baud( sioBaudrates baud, sio_status_t * siostat ); +#ifdef __cplusplus +} +#endif + #endif diff --git a/contrib/ports/unix/port/include/netif/tapif.h b/contrib/ports/unix/port/include/netif/tapif.h index 4c0fa6b3..c156e1db 100644 --- a/contrib/ports/unix/port/include/netif/tapif.h +++ b/contrib/ports/unix/port/include/netif/tapif.h @@ -34,10 +34,18 @@ #include "lwip/netif.h" +#ifdef __cplusplus +extern "C" { +#endif + err_t tapif_init(struct netif *netif); void tapif_poll(struct netif *netif); #if NO_SYS int tapif_select(struct netif *netif); #endif /* NO_SYS */ +#ifdef __cplusplus +} +#endif + #endif /* LWIP_TAPIF_H */ diff --git a/contrib/ports/unix/port/include/netif/vdeif.h b/contrib/ports/unix/port/include/netif/vdeif.h index 01df2d14..e3183924 100644 --- a/contrib/ports/unix/port/include/netif/vdeif.h +++ b/contrib/ports/unix/port/include/netif/vdeif.h @@ -34,10 +34,18 @@ #include "lwip/netif.h" +#ifdef __cplusplus +extern "C" { +#endif + err_t vdeif_init(struct netif *netif); void vdeif_poll(struct netif *netif); #if NO_SYS int vdeif_select(struct netif *netif); #endif /* NO_SYS */ +#ifdef __cplusplus +} +#endif + #endif /* LWIP_VDEIF_H */ From 7c494b3829616e3b721db31b19680611932a2487 Mon Sep 17 00:00:00 2001 From: Kirill Lokotkov Date: Wed, 29 Nov 2023 12:41:25 +0300 Subject: [PATCH 69/94] Added "lwip/errno.h" to netdb.c includes Defines EINVAL and ERANGE are used in the file but not included directly. When I try to use and as LWIP_SOCKET_EXTERNAL_HEADERS it causes errors with this defines. --- src/api/netdb.c | 1 + 1 file changed, 1 insertion(+) diff --git a/src/api/netdb.c b/src/api/netdb.c index 6c1c8e18..cd4874e8 100644 --- a/src/api/netdb.c +++ b/src/api/netdb.c @@ -40,6 +40,7 @@ #if LWIP_DNS && LWIP_SOCKET #include "lwip/err.h" +#include "lwip/errno.h" #include "lwip/mem.h" #include "lwip/memp.h" #include "lwip/ip_addr.h" From 93821fc437d7755b657499b4356e8c5454e62bf7 Mon Sep 17 00:00:00 2001 From: Kirill Lokotkov Date: Wed, 29 Nov 2023 13:23:23 +0300 Subject: [PATCH 70/94] Fixed netdb.c when LWIP_SOCKET_HAVE_SA_LEN == 0 Fields sin6_len and sin_len are always used in the file but not all implementations of sockaddr_in or sockaddr_in6 have this fields (including Linux implementation). Added #if-check to avoid compilation errors in such cases. --- src/api/netdb.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/api/netdb.c b/src/api/netdb.c index cd4874e8..73028c8e 100644 --- a/src/api/netdb.c +++ b/src/api/netdb.c @@ -383,7 +383,9 @@ lwip_getaddrinfo(const char *nodename, const char *servname, /* set up sockaddr */ inet6_addr_from_ip6addr(&sa6->sin6_addr, ip_2_ip6(&addr)); sa6->sin6_family = AF_INET6; +#if LWIP_SOCKET_HAVE_SA_LEN sa6->sin6_len = sizeof(struct sockaddr_in6); +#endif /* LWIP_SOCKET_HAVE_SA_LEN */ sa6->sin6_port = lwip_htons((u16_t)port_nr); sa6->sin6_scope_id = ip6_addr_zone(ip_2_ip6(&addr)); ai->ai_family = AF_INET6; @@ -394,7 +396,9 @@ lwip_getaddrinfo(const char *nodename, const char *servname, /* set up sockaddr */ inet_addr_from_ip4addr(&sa4->sin_addr, ip_2_ip4(&addr)); sa4->sin_family = AF_INET; +#if LWIP_SOCKET_HAVE_SA_LEN sa4->sin_len = sizeof(struct sockaddr_in); +#endif /* LWIP_SOCKET_HAVE_SA_LEN */ sa4->sin_port = lwip_htons((u16_t)port_nr); ai->ai_family = AF_INET; #endif /* LWIP_IPV4 */ From c3d6fe9d722604f9cdcf28b975232fcde4175177 Mon Sep 17 00:00:00 2001 From: Brian Date: Wed, 11 Oct 2023 20:49:19 -0400 Subject: [PATCH 71/94] Add CodeQL Workflow for Code Security Analysis Add CodeQL Workflow for Code Security Analysis This pull request introduces a CodeQL workflow to enhance the security analysis of our repository. CodeQL is a powerful static analysis tool that helps identify and mitigate security vulnerabilities in our codebase. By integrating this workflow into our GitHub Actions, we can proactively identify and address potential issues before they become security threats. We added a new CodeQL workflow file (.github/workflows/codeql.yml) that - Runs on every push and pull request to the main branch. - Excludes queries with a high false positive rate or low-severity findings. - Does not display results for third-party code, focusing only on our own codebase. Testing: To validate the functionality of this workflow, we have run several test scans on the codebase and reviewed the results. The workflow successfully compiles the project, identifies issues, and provides actionable insights while reducing noise by excluding certain queries and third-party code. Deployment: Once this pull request is merged, the CodeQL workflow will be active and automatically run on every push and pull request to the main branch. To view the results of these code scans, please follow these steps: 1. Under the repository name, click on the Security tab. 2. In the left sidebar, click Code scanning alerts. Additional Information: - You can further customize the workflow to adapt to your specific needs by modifying the workflow file. - For more information on CodeQL and how to interpret its results, refer to the GitHub documentation and the CodeQL documentation. Signed-off-by: Brian --- .github/workflows/codeql-buildscript.sh | 5 + .github/workflows/codeql.yml | 123 ++++++++++++++++++++++++ 2 files changed, 128 insertions(+) create mode 100644 .github/workflows/codeql-buildscript.sh create mode 100644 .github/workflows/codeql.yml diff --git a/.github/workflows/codeql-buildscript.sh b/.github/workflows/codeql-buildscript.sh new file mode 100644 index 00000000..3270270d --- /dev/null +++ b/.github/workflows/codeql-buildscript.sh @@ -0,0 +1,5 @@ +#!/usr/bin/env bash + +cp contrib/examples/example_app/lwipcfg.h.ci contrib/examples/example_app/lwipcfg.h +make -C contrib/ports/unix/check +mkdir build && cd build && cmake .. -G Ninja && cmake --build . diff --git a/.github/workflows/codeql.yml b/.github/workflows/codeql.yml new file mode 100644 index 00000000..eaa9599b --- /dev/null +++ b/.github/workflows/codeql.yml @@ -0,0 +1,123 @@ +# For most projects, this workflow file will not need changing; you simply need +# to commit it to your repository. +# +# You may wish to alter this file to override the set of languages analyzed, +# or to provide custom queries or build logic. +# +# ******** NOTE ******** +# We have attempted to detect the languages in your repository. Please check +# the `language` matrix defined below to confirm you have the correct set of +# supported CodeQL languages. +# +name: "CodeQL" + +on: + push: + branches: [ "main", "master" ] + pull_request: + # The branches below must be a subset of the branches above + branches: [ "main", "master" ] + schedule: + - cron: '28 21 * * 0' + +jobs: + analyze: + name: Analyze + # Runner size impacts CodeQL analysis time. To learn more, please see: + # - https://gh.io/recommended-hardware-resources-for-running-codeql + # - https://gh.io/supported-runners-and-hardware-resources + # - https://gh.io/using-larger-runners + # Consider using larger runners for possible analysis time improvements. + runs-on: ${{ (matrix.language == 'swift' && 'macos-latest') || 'ubuntu-20.04' }} + timeout-minutes: ${{ (matrix.language == 'swift' && 120) || 360 }} + permissions: + actions: read + contents: read + security-events: write + + strategy: + fail-fast: false + matrix: + language: [ 'cpp' ] + # CodeQL supports [ 'cpp', 'csharp', 'go', 'java', 'javascript', 'python', 'ruby', 'swift' ] + # Use only 'java' to analyze code written in Java, Kotlin or both + # Use only 'javascript' to analyze code written in JavaScript, TypeScript or both + # Learn more about CodeQL language support at https://aka.ms/codeql-docs/language-support + + steps: + - name: Checkout repository + uses: actions/checkout@v3 + with: + submodules: recursive + + # Initializes the CodeQL tools for scanning. + - name: Initialize CodeQL + uses: github/codeql-action/init@v2 + with: + languages: ${{ matrix.language }} + # If you wish to specify custom queries, you can do so here or in a config file. + # By default, queries listed here will override any specified in a config file. + # Prefix the list here with "+" to use these queries and those in the config file. + + # For more details on CodeQL's query packs, refer to: https://docs.github.com/en/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/configuring-code-scanning#using-queries-in-ql-packs + # queries: security-extended,security-and-quality + queries: security-and-quality + + + # Autobuild attempts to build any compiled languages (C/C++, C#, Go, Java, or Swift). + # If this step fails, then you should remove it and run the build manually (see below) + #- name: Autobuild + # uses: github/codeql-action/autobuild@v2 + + # ℹ️ Command-line programs to run using the OS shell. + # 📚 See https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstepsrun + + # If the Autobuild fails above, remove it and uncomment the following three lines. + # modify them (or add more) to build your code if your project, please refer to the EXAMPLE below for guidance. + + - run: | + ./.github/workflows/codeql-buildscript.sh + + - name: Perform CodeQL Analysis + uses: github/codeql-action/analyze@v2 + with: + category: "/language:${{matrix.language}}" + upload: false + id: step1 + + # Filter out rules with low severity or high false positve rate + # Also filter out warnings in third-party code + - name: Filter out unwanted errors and warnings + uses: advanced-security/filter-sarif@v1 + with: + patterns: | + -**:cpp/path-injection + -**:cpp/world-writable-file-creation + -**:cpp/poorly-documented-function + -**:cpp/potentially-dangerous-function + -**:cpp/use-of-goto + -**:cpp/integer-multiplication-cast-to-long + -**:cpp/comparison-with-wider-type + -**:cpp/leap-year/* + -**:cpp/ambiguously-signed-bit-field + -**:cpp/suspicious-pointer-scaling + -**:cpp/suspicious-pointer-scaling-void + -**:cpp/unsigned-comparison-zero + -**/third*party/** + -**/3rd*party/** + -**/external/** + input: ${{ steps.step1.outputs.sarif-output }}/cpp.sarif + output: ${{ steps.step1.outputs.sarif-output }}/cpp.sarif + + - name: Upload SARIF + uses: github/codeql-action/upload-sarif@v2 + with: + sarif_file: ${{ steps.step1.outputs.sarif-output }} + category: "/language:${{matrix.language}}" + + - name: Archive CodeQL results + uses: actions/upload-artifact@v3 + with: + name: codeql-results + path: ${{ steps.step1.outputs.sarif-output }} + retention-days: 5 \ No newline at end of file From 10dc9b7eb3d1710d2e6ca9f2e61c27eb7a1e8d75 Mon Sep 17 00:00:00 2001 From: Brian Date: Wed, 18 Oct 2023 16:53:26 -0400 Subject: [PATCH 72/94] Add CodeQL Workflow for Code Security Analysis Add CodeQL Workflow for Code Security Analysis This pull request introduces a CodeQL workflow to enhance the security analysis of our repository. CodeQL is a powerful static analysis tool that helps identify and mitigate security vulnerabilities in our codebase. By integrating this workflow into our GitHub Actions, we can proactively identify and address potential issues before they become security threats. We added a new CodeQL workflow file (.github/workflows/codeql.yml) that - Runs on every pull request (functionality to run on every push to main branches is included as a comment for convenience). - Runs daily. - Excludes queries with a high false positive rate or low-severity findings. - Does not display results for git submodules, focusing only on our own codebase. Testing: To validate the functionality of this workflow, we have run several test scans on the codebase and reviewed the results. The workflow successfully compiles the project, identifies issues, and provides actionable insights while reducing noise by excluding certain queries and third-party code. Deployment: Once this pull request is merged, the CodeQL workflow will be active and automatically run on every push and pull request to the main branch. To view the results of these code scans, please follow these steps: 1. Under the repository name, click on the Security tab. 2. In the left sidebar, click Code scanning alerts. Additional Information: - You can further customize the workflow to adapt to your specific needs by modifying the workflow file. - For more information on CodeQL and how to interpret its results, refer to the GitHub documentation and the CodeQL documentation (https://codeql.github.com/ and https://codeql.github.com/docs/). Signed-off-by: Brian --- .github/workflows/codeql.yml | 23 +++++++++++++---------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/.github/workflows/codeql.yml b/.github/workflows/codeql.yml index eaa9599b..3ef873fc 100644 --- a/.github/workflows/codeql.yml +++ b/.github/workflows/codeql.yml @@ -14,11 +14,10 @@ name: "CodeQL" on: push: branches: [ "main", "master" ] - pull_request: - # The branches below must be a subset of the branches above - branches: [ "main", "master" ] schedule: - - cron: '28 21 * * 0' + - cron: '0 0 * * *' + pull_request: + branches: '*' jobs: analyze: @@ -103,21 +102,25 @@ jobs: -**:cpp/suspicious-pointer-scaling -**:cpp/suspicious-pointer-scaling-void -**:cpp/unsigned-comparison-zero - -**/third*party/** - -**/3rd*party/** - -**/external/** + -**/cmake*/Modules/** input: ${{ steps.step1.outputs.sarif-output }}/cpp.sarif output: ${{ steps.step1.outputs.sarif-output }}/cpp.sarif - - name: Upload SARIF + - name: Upload CodeQL results to code scanning uses: github/codeql-action/upload-sarif@v2 with: sarif_file: ${{ steps.step1.outputs.sarif-output }} category: "/language:${{matrix.language}}" - - name: Archive CodeQL results + - name: Upload CodeQL results as an artifact + if: success() || failure() uses: actions/upload-artifact@v3 with: name: codeql-results path: ${{ steps.step1.outputs.sarif-output }} - retention-days: 5 \ No newline at end of file + retention-days: 5 + + - name: Fail if an error is found + run: | + ./.github/workflows/fail_on_error.py \ + ${{ steps.step1.outputs.sarif-output }}/cpp.sarif From 17b1f5d382ba9bbd818563e8c22f6101bcdd2c8f Mon Sep 17 00:00:00 2001 From: Brian Date: Fri, 20 Oct 2023 01:03:46 -0400 Subject: [PATCH 73/94] Add CodeQL Workflow for Code Security Analysis Add CodeQL Workflow for Code Security Analysis This pull request introduces a CodeQL workflow to enhance the security analysis of our repository. CodeQL is a powerful static analysis tool that helps identify and mitigate security vulnerabilities in our codebase. By integrating this workflow into our GitHub Actions, we can proactively identify and address potential issues before they become security threats. We added a new CodeQL workflow file (.github/workflows/codeql.yml) that - Runs on every pull request (functionality to run on every push to main branches is included as a comment for convenience). - Runs daily. - Excludes queries with a high false positive rate or low-severity findings. - Does not display results for git submodules, focusing only on our own codebase. Testing: To validate the functionality of this workflow, we have run several test scans on the codebase and reviewed the results. The workflow successfully compiles the project, identifies issues, and provides actionable insights while reducing noise by excluding certain queries and third-party code. Deployment: Once this pull request is merged, the CodeQL workflow will be active and automatically run on every push and pull request to the main branch. To view the results of these code scans, please follow these steps: 1. Under the repository name, click on the Security tab. 2. In the left sidebar, click Code scanning alerts. Additional Information: - You can further customize the workflow to adapt to your specific needs by modifying the workflow file. - For more information on CodeQL and how to interpret its results, refer to the GitHub documentation and the CodeQL documentation (https://codeql.github.com/ and https://codeql.github.com/docs/). Signed-off-by: Brian --- .github/workflows/fail_on_error.py | 34 ++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100755 .github/workflows/fail_on_error.py diff --git a/.github/workflows/fail_on_error.py b/.github/workflows/fail_on_error.py new file mode 100755 index 00000000..29791742 --- /dev/null +++ b/.github/workflows/fail_on_error.py @@ -0,0 +1,34 @@ +#!/usr/bin/env python3 + +import json +import sys + +# Return whether SARIF file contains error-level results +def codeql_sarif_contain_error(filename): + with open(filename, 'r') as f: + s = json.load(f) + + for run in s.get('runs', []): + rules_metadata = run['tool']['driver']['rules'] + if not rules_metadata: + rules_metadata = run['tool']['extensions'][0]['rules'] + + for res in run.get('results', []): + if 'ruleIndex' in res: + rule_index = res['ruleIndex'] + elif 'rule' in res and 'index' in res['rule']: + rule_index = res['rule']['index'] + else: + continue + try: + rule_level = rules_metadata[rule_index]['defaultConfiguration']['level'] + except IndexError as e: + print(e, rule_index, len(rules_metadata)) + else: + if rule_level == 'error': + return True + return False + +if __name__ == "__main__": + if codeql_sarif_contain_error(sys.argv[1]): + sys.exit(1) From 9004e7bd77cb58797445446c96f8a5e8b56b4c70 Mon Sep 17 00:00:00 2001 From: Brian Date: Sun, 29 Oct 2023 15:29:29 -0400 Subject: [PATCH 74/94] Add CodeQL Workflow for Code Security Analysis Add CodeQL Workflow for Code Security Analysis This pull request introduces a CodeQL workflow to enhance the security analysis of our repository. CodeQL is a powerful static analysis tool that helps identify and mitigate security vulnerabilities in our codebase. By integrating this workflow into our GitHub Actions, we can proactively identify and address potential issues before they become security threats. We added a new CodeQL workflow file (.github/workflows/codeql.yml) that - Runs on every pull request (functionality to run on every push to main branches is included as a comment for convenience). - Runs daily. - Excludes queries with a high false positive rate or low-severity findings. - Does not display results for git submodules, focusing only on our own codebase. Testing: To validate the functionality of this workflow, we have run several test scans on the codebase and reviewed the results. The workflow successfully compiles the project, identifies issues, and provides actionable insights while reducing noise by excluding certain queries and third-party code. Deployment: Once this pull request is merged, the CodeQL workflow will be active and automatically run on every push and pull request to the main branch. To view the results of these code scans, please follow these steps: 1. Under the repository name, click on the Security tab. 2. In the left sidebar, click Code scanning alerts. Additional Information: - You can further customize the workflow to adapt to your specific needs by modifying the workflow file. - For more information on CodeQL and how to interpret its results, refer to the GitHub documentation and the CodeQL documentation (https://codeql.github.com/ and https://codeql.github.com/docs/). Signed-off-by: Brian --- .github/workflows/codeql.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/codeql.yml b/.github/workflows/codeql.yml index 3ef873fc..81649227 100644 --- a/.github/workflows/codeql.yml +++ b/.github/workflows/codeql.yml @@ -12,8 +12,8 @@ name: "CodeQL" on: - push: - branches: [ "main", "master" ] + # push: + # branches: [ "main", "master" ] schedule: - cron: '0 0 * * *' pull_request: From cb511019b0c5532152173f646a8eef789822c535 Mon Sep 17 00:00:00 2001 From: Brian <89487381+b4yuan@users.noreply.github.com> Date: Mon, 27 Nov 2023 11:36:47 -0500 Subject: [PATCH 75/94] Update codeql-buildscript.sh Adding install dependencies step --- .github/workflows/codeql-buildscript.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/codeql-buildscript.sh b/.github/workflows/codeql-buildscript.sh index 3270270d..7e5ae810 100644 --- a/.github/workflows/codeql-buildscript.sh +++ b/.github/workflows/codeql-buildscript.sh @@ -1,5 +1,6 @@ #!/usr/bin/env bash +sudo apt-get install check ninja-build doxygen cp contrib/examples/example_app/lwipcfg.h.ci contrib/examples/example_app/lwipcfg.h make -C contrib/ports/unix/check mkdir build && cd build && cmake .. -G Ninja && cmake --build . From e799c266facc3c70190676eccad49d6c2db2caac Mon Sep 17 00:00:00 2001 From: Krzysztof Mazur Date: Sun, 14 Aug 2022 12:03:50 +0200 Subject: [PATCH 76/94] makefsdata: extend file type matching with .shtml and .shtm [Problem] When using makefsdata perl script to convert shtml files with SSI tags the shtml files get generated with text/plain content type, making browsers not render them correctly [Solution] Extend the regex to generate text/html content type for any of: .htm, .html, .shtm, .shtml extensions --- src/apps/http/makefsdata/makefsdata | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/apps/http/makefsdata/makefsdata b/src/apps/http/makefsdata/makefsdata index 667eb888..7f1d4d2b 100644 --- a/src/apps/http/makefsdata/makefsdata +++ b/src/apps/http/makefsdata/makefsdata @@ -21,7 +21,7 @@ while($file = ) { print(HEADER "HTTP/1.0 200 OK\r\n"); } print(HEADER "Server: lwIP/pre-0.6 (http://www.sics.se/~adam/lwip/)\r\n"); - if($file =~ /\.html$/) { + if($file =~ /\.s?html?$/) { print(HEADER "Content-type: text/html\r\n"); } elsif($file =~ /\.gif$/) { print(HEADER "Content-type: image/gif\r\n"); From d0efd9ef7ba08e54b46b1060e2b4629a4907391b Mon Sep 17 00:00:00 2001 From: Simon Goldschmidt Date: Mon, 19 Feb 2024 21:44:18 +0100 Subject: [PATCH 77/94] tcpip: fix that TCPIP_CORE_LOCK is not released for LWIP_TIMERS==0 See bug #65328 Signed-off-by: Simon Goldschmidt --- src/api/tcpip.c | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/src/api/tcpip.c b/src/api/tcpip.c index cad53800..0891f9e0 100644 --- a/src/api/tcpip.c +++ b/src/api/tcpip.c @@ -68,11 +68,20 @@ sys_mutex_t lock_tcpip_core; static void tcpip_thread_handle_msg(struct tcpip_msg *msg); #if !LWIP_TIMERS -/* wait for a message with timers disabled (e.g. pass a timer-check trigger into tcpip_thread) */ -#define TCPIP_MBOX_FETCH(mbox, msg) sys_mbox_fetch(mbox, msg) + +/** Wait for a message with timers disabled (e.g. pass a timer-check trigger into tcpip_thread) */ +static void +tcpip_mbox_fetch(sys_mbox_t* mbox, void** msg) +{ + LWIP_ASSERT_CORE_LOCKED(); + + UNLOCK_TCPIP_CORE(); + sys_mbox_fetch(mbox, msg); + LOCK_TCPIP_CORE(); +} + #else /* !LWIP_TIMERS */ -/* wait for a message, timeouts are processed while waiting */ -#define TCPIP_MBOX_FETCH(mbox, msg) tcpip_timeouts_mbox_fetch(mbox, msg) + /** * Wait (forever) for a message to arrive in an mbox. * While waiting, timeouts are processed. @@ -81,7 +90,7 @@ static void tcpip_thread_handle_msg(struct tcpip_msg *msg); * @param msg the place to store the message */ static void -tcpip_timeouts_mbox_fetch(sys_mbox_t *mbox, void **msg) +tcpip_mbox_fetch(sys_mbox_t *mbox, void **msg) { u32_t sleeptime, res; @@ -139,7 +148,7 @@ tcpip_thread(void *arg) while (1) { /* MAIN Loop */ LWIP_TCPIP_THREAD_ALIVE(); /* wait for a message, timeouts are processed while waiting */ - TCPIP_MBOX_FETCH(&tcpip_mbox, (void **)&msg); + tcpip_mbox_fetch(&tcpip_mbox, (void **)&msg); if (msg == NULL) { LWIP_DEBUGF(TCPIP_DEBUG, ("tcpip_thread: invalid message: NULL\n")); LWIP_ASSERT("tcpip_thread: invalid message", 0); From 1cc1536e6a7117e23ebaf5546405a843a3e558ae Mon Sep 17 00:00:00 2001 From: Erik Ekman Date: Tue, 9 Apr 2024 20:11:39 +0200 Subject: [PATCH 78/94] test/unit: fix inconsistent nullness check error Inside a testcase, but still. Trying to address #160 --- test/unit/core/test_pbuf.c | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/test/unit/core/test_pbuf.c b/test/unit/core/test_pbuf.c index 6163e4fa..9c5df33b 100644 --- a/test/unit/core/test_pbuf.c +++ b/test/unit/core/test_pbuf.c @@ -88,6 +88,7 @@ START_TEST(test_pbuf_copy_zero_pbuf) fail_unless(p2->ref == 1); p3 = pbuf_alloc(PBUF_RAW, p1->tot_len, PBUF_POOL); + fail_unless(p3 != NULL); err = pbuf_copy(p3, p1); fail_unless(err == ERR_VAL); @@ -161,8 +162,8 @@ START_TEST(test_pbuf_copy_partial_pbuf) b->payload = packet; pbuf_cat(a, b); dest = pbuf_alloc(PBUF_RAW, 14, PBUF_RAM); - memset(dest->payload, 0, dest->len); fail_unless(dest != NULL); + memset(dest->payload, 0, dest->len); /* Don't copy if data will not fit */ err = pbuf_copy_partial_pbuf(dest, a, a->tot_len, 4); @@ -198,6 +199,7 @@ START_TEST(test_pbuf_split_64k_on_small_pbufs) LWIP_UNUSED_ARG(_i); p = pbuf_alloc(PBUF_RAW, 1, PBUF_POOL); + fail_unless(p != NULL); pbuf_split_64k(p, &rest); fail_unless(p->tot_len == 1); pbuf_free(p); @@ -267,9 +269,14 @@ START_TEST(test_pbuf_take_at_edge) u8_t *out; int i; u8_t testdata[] = { 0x01, 0x08, 0x82, 0x02 }; - struct pbuf *p = pbuf_alloc(PBUF_RAW, 1024, PBUF_POOL); - struct pbuf *q = p->next; + struct pbuf *p; + struct pbuf *q; LWIP_UNUSED_ARG(_i); + + p = pbuf_alloc(PBUF_RAW, 1024, PBUF_POOL); + fail_unless(p != NULL); + q = p->next; + /* alloc big enough to get a chain of pbufs */ fail_if(p->tot_len == p->len); memset(p->payload, 0, p->len); @@ -319,9 +326,14 @@ START_TEST(test_pbuf_get_put_at_edge) u8_t *out; u8_t testdata = 0x01; u8_t getdata; - struct pbuf *p = pbuf_alloc(PBUF_RAW, 1024, PBUF_POOL); - struct pbuf *q = p->next; + struct pbuf *p; + struct pbuf *q; LWIP_UNUSED_ARG(_i); + + p = pbuf_alloc(PBUF_RAW, 1024, PBUF_POOL); + fail_unless(p != NULL); + q = p->next; + /* alloc big enough to get a chain of pbufs */ fail_if(p->tot_len == p->len); memset(p->payload, 0, p->len); From 8e1a247c1f37210aca2416494302f143acb9c00c Mon Sep 17 00:00:00 2001 From: jeans Date: Sat, 27 Apr 2024 01:06:37 -0600 Subject: [PATCH 79/94] refactor: added macOS include file MacOS supports util.h as well --- contrib/ports/unix/port/netif/sio.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/contrib/ports/unix/port/netif/sio.c b/contrib/ports/unix/port/netif/sio.c index 8d8be9be..a6560ba4 100644 --- a/contrib/ports/unix/port/netif/sio.c +++ b/contrib/ports/unix/port/netif/sio.c @@ -35,7 +35,7 @@ #include #include -#if defined(LWIP_UNIX_OPENBSD) +#if defined(LWIP_UNIX_OPENBSD) || defined(LWIP_UNIX_MACH) #include #endif #include From 86c9f7999150199374d7697fd2eed62dcd9b1afa Mon Sep 17 00:00:00 2001 From: jeans Date: Sat, 27 Apr 2024 01:07:07 -0600 Subject: [PATCH 80/94] refactor: added apple macro for fs handling --- src/apps/http/makefsdata/makefsdata.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/apps/http/makefsdata/makefsdata.c b/src/apps/http/makefsdata/makefsdata.c index c325ee86..62d77a32 100644 --- a/src/apps/http/makefsdata/makefsdata.c +++ b/src/apps/http/makefsdata/makefsdata.c @@ -77,7 +77,7 @@ static int deflate_level; /* default compression level, can be changed via comma #define CHDIR(path) SetCurrentDirectoryA(path) #define CHDIR_SUCCEEDED(ret) (ret == TRUE) -#elif __linux__ +#elif __linux__ || __APPLE__ #define GETCWD(path, len) getcwd(path, len) #define GETCWD_SUCCEEDED(ret) (ret != NULL) From 4f9484f5ab935781c4bbbcc778860ad0887eeaaa Mon Sep 17 00:00:00 2001 From: Erik Ekman Date: Sun, 30 Jun 2024 22:01:59 +0200 Subject: [PATCH 81/94] Run ci job on github pull requests --- .github/workflows/ci-linux.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/ci-linux.yml b/.github/workflows/ci-linux.yml index 6c3e5a98..2f2413cd 100644 --- a/.github/workflows/ci-linux.yml +++ b/.github/workflows/ci-linux.yml @@ -3,6 +3,8 @@ name: CI on: push: branches: [master] + pull_request: + branches: '*' jobs: build: From 73fcf72792a926a4e0ac8b656b29bff70552d927 Mon Sep 17 00:00:00 2001 From: Erik Ekman Date: Sun, 30 Jun 2024 22:05:50 +0200 Subject: [PATCH 82/94] Stop running codeql every 24h Only run on push/pull requests --- .github/workflows/codeql.yml | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/.github/workflows/codeql.yml b/.github/workflows/codeql.yml index 81649227..6d8693b4 100644 --- a/.github/workflows/codeql.yml +++ b/.github/workflows/codeql.yml @@ -12,10 +12,8 @@ name: "CodeQL" on: - # push: - # branches: [ "main", "master" ] - schedule: - - cron: '0 0 * * *' + push: + branches: [ "master" ] pull_request: branches: '*' From 80cfb002f92c1b34d1b0b1bf96f89545d617c77a Mon Sep 17 00:00:00 2001 From: Sebastian Huber Date: Fri, 22 Nov 2024 15:54:25 +0100 Subject: [PATCH 83/94] test/unit: Fix test_ip4_frag Reset linkoutput_byte_ctr for this test case. --- test/unit/ip4/test_ip4.c | 1 + 1 file changed, 1 insertion(+) diff --git a/test/unit/ip4/test_ip4.c b/test/unit/ip4/test_ip4.c index af715daf..64ec1c4f 100644 --- a/test/unit/ip4/test_ip4.c +++ b/test/unit/ip4/test_ip4.c @@ -147,6 +147,7 @@ START_TEST(test_ip4_frag) LWIP_UNUSED_ARG(_i); linkoutput_ctr = 0; + linkoutput_byte_ctr = 0; /* Verify that 8000 byte payload is split into six packets */ fail_unless(data != NULL); From c24678acd20746d354cfd3a34eab8414f21dde20 Mon Sep 17 00:00:00 2001 From: Sebastian Huber Date: Tue, 26 Nov 2024 06:59:52 +0100 Subject: [PATCH 84/94] test/unit: Fix DHCP tests On big-endian targets, the htonl() function is a no operation. We need another way to get a bad XID. Add get_bad_xid() to avoid code duplication. --- test/unit/dhcp/test_dhcp.c | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/test/unit/dhcp/test_dhcp.c b/test/unit/dhcp/test_dhcp.c index ac8a2191..0a75e549 100644 --- a/test/unit/dhcp/test_dhcp.c +++ b/test/unit/dhcp/test_dhcp.c @@ -155,6 +155,11 @@ static void tick_lwip(void) } } +static u32_t get_bad_xid(const struct netif *netif) +{ + return ~netif_dhcp_data(netif)->xid; +} + static void send_pkt(struct netif *netif, const u8_t *data, size_t len) { struct pbuf *p, *q; @@ -493,7 +498,7 @@ START_TEST(test_dhcp) dhcp_start(&net_test); fail_unless(txpacket == 1); /* DHCP discover sent */ - xid = netif_dhcp_data(&net_test)->xid; /* Write bad xid, not using htonl! */ + xid = get_bad_xid(&net_test); memcpy(&dhcp_offer[46], &xid, 4); send_pkt(&net_test, dhcp_offer, sizeof(dhcp_offer)); @@ -508,7 +513,7 @@ START_TEST(test_dhcp) send_pkt(&net_test, dhcp_offer, sizeof(dhcp_offer)); fail_unless(txpacket == 2, "TX %d packets, expected 2", txpacket); /* DHCP request sent */ - xid = netif_dhcp_data(&net_test)->xid; /* Write bad xid, not using htonl! */ + xid = get_bad_xid(&net_test); memcpy(&dhcp_ack[46], &xid, 4); send_pkt(&net_test, dhcp_ack, sizeof(dhcp_ack)); @@ -568,7 +573,7 @@ START_TEST(test_dhcp_nak) dhcp_start(&net_test); fail_unless(txpacket == 1); /* DHCP discover sent */ - xid = netif_dhcp_data(&net_test)->xid; /* Write bad xid, not using htonl! */ + xid = get_bad_xid(&net_test); memcpy(&dhcp_offer[46], &xid, 4); send_pkt(&net_test, dhcp_offer, sizeof(dhcp_offer)); @@ -583,7 +588,7 @@ START_TEST(test_dhcp_nak) send_pkt(&net_test, dhcp_offer, sizeof(dhcp_offer)); fail_unless(txpacket == 2); /* DHCP request sent */ - xid = netif_dhcp_data(&net_test)->xid; /* Write bad xid, not using htonl! */ + xid = get_bad_xid(&net_test); memcpy(&dhcp_ack[46], &xid, 4); send_pkt(&net_test, dhcp_ack, sizeof(dhcp_ack)); @@ -941,7 +946,7 @@ START_TEST(test_dhcp_nak_no_endmarker) dhcp = netif_dhcp_data(&net_test); fail_unless(txpacket == 1); /* DHCP discover sent */ - xid = dhcp->xid; /* Write bad xid, not using htonl! */ + xid = get_bad_xid(&net_test); memcpy(&dhcp_offer[46], &xid, 4); send_pkt(&net_test, dhcp_offer, sizeof(dhcp_offer)); From 5d1b34f5811ae10337872456b003efadfa79d06a Mon Sep 17 00:00:00 2001 From: Erik Ekman Date: Tue, 26 Nov 2024 23:10:47 +0100 Subject: [PATCH 85/94] Bump versions in codeql action --- .github/workflows/codeql.yml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/.github/workflows/codeql.yml b/.github/workflows/codeql.yml index 6d8693b4..0876355f 100644 --- a/.github/workflows/codeql.yml +++ b/.github/workflows/codeql.yml @@ -43,13 +43,13 @@ jobs: steps: - name: Checkout repository - uses: actions/checkout@v3 + uses: actions/checkout@v4 with: submodules: recursive # Initializes the CodeQL tools for scanning. - name: Initialize CodeQL - uses: github/codeql-action/init@v2 + uses: github/codeql-action/init@v3 with: languages: ${{ matrix.language }} # If you wish to specify custom queries, you can do so here or in a config file. @@ -64,7 +64,7 @@ jobs: # Autobuild attempts to build any compiled languages (C/C++, C#, Go, Java, or Swift). # If this step fails, then you should remove it and run the build manually (see below) #- name: Autobuild - # uses: github/codeql-action/autobuild@v2 + # uses: github/codeql-action/autobuild@v3 # ℹ️ Command-line programs to run using the OS shell. # 📚 See https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstepsrun @@ -76,7 +76,7 @@ jobs: ./.github/workflows/codeql-buildscript.sh - name: Perform CodeQL Analysis - uses: github/codeql-action/analyze@v2 + uses: github/codeql-action/analyze@v3 with: category: "/language:${{matrix.language}}" upload: false @@ -105,14 +105,14 @@ jobs: output: ${{ steps.step1.outputs.sarif-output }}/cpp.sarif - name: Upload CodeQL results to code scanning - uses: github/codeql-action/upload-sarif@v2 + uses: github/codeql-action/upload-sarif@v3 with: sarif_file: ${{ steps.step1.outputs.sarif-output }} category: "/language:${{matrix.language}}" - name: Upload CodeQL results as an artifact if: success() || failure() - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: codeql-results path: ${{ steps.step1.outputs.sarif-output }} From 41b8f785c3b2400d8106d682303e5f4d871d08dc Mon Sep 17 00:00:00 2001 From: scribam Date: Mon, 8 Jul 2024 21:25:04 +0200 Subject: [PATCH 86/94] cmake: create dist target if not exists --- CMakeLists.txt | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 55fc44a1..7ff51473 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -29,7 +29,9 @@ include(CPack) # Generate docs before creating source package include(src/Filelists.cmake) -add_custom_target(dist COMMAND ${CMAKE_MAKE_PROGRAM} package_source) -if (TARGET lwipdocs) - add_dependencies(dist lwipdocs) +if (NOT TARGET dist) + add_custom_target(dist COMMAND ${CMAKE_MAKE_PROGRAM} package_source) + if (TARGET lwipdocs) + add_dependencies(dist lwipdocs) + endif() endif() From 3cae475d63caecef0d622f32f01ed5027d84799c Mon Sep 17 00:00:00 2001 From: Erik Ekman Date: Tue, 26 Nov 2024 23:43:48 +0100 Subject: [PATCH 87/94] apps/snmp: Remove @retval tags on void methods Fixing clang 19.1.0 error: src/apps/snmp/snmp_traps.c:140:15: error: empty paragraph passed to '@retval' command [-Werror,-Wdocumentation] --- src/apps/snmp/snmp_traps.c | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/src/apps/snmp/snmp_traps.c b/src/apps/snmp/snmp_traps.c index 4acbe604..3998723f 100644 --- a/src/apps/snmp/snmp_traps.c +++ b/src/apps/snmp/snmp_traps.c @@ -137,7 +137,6 @@ static s32_t req_id = 1; * @param dst_idx index in 0 .. SNMP_TRAP_DESTINATIONS-1 * @param enable switch if 0 destination is disabled >0 enabled. * - * @retval void */ void snmp_trap_dst_enable(u8_t dst_idx, u8_t enable) @@ -154,7 +153,6 @@ snmp_trap_dst_enable(u8_t dst_idx, u8_t enable) * @param dst_idx index in 0 .. SNMP_TRAP_DESTINATIONS-1 * @param dst IPv4 address in host order. * - * @retval void */ void snmp_trap_dst_ip_set(u8_t dst_idx, const ip_addr_t *dst) @@ -171,7 +169,6 @@ snmp_trap_dst_ip_set(u8_t dst_idx, const ip_addr_t *dst) * * @param enable enable SNMP traps * - * @retval void */ void snmp_set_auth_traps_enabled(u8_t enable) @@ -200,7 +197,6 @@ snmp_get_auth_traps_enabled(void) * * @param snmp_version version that will be used for sending traps * - * @retval void */ void snmp_set_default_trap_version(u8_t snmp_version) @@ -274,7 +270,6 @@ snmp_prepare_trap_oid(struct snmp_obj_id *dest_snmp_trap_oid, const struct snmp_ * @param generic_trap SNMP v1 generic trap * @param specific_trap SNMP v1 specific trap * @param varbinds list of varbinds - * @retval void */ static void snmp_prepare_necessary_msg_fields(struct snmp_msg_trap *trap_msg, const struct snmp_obj_id *eoid, s32_t generic_trap, s32_t specific_trap, struct snmp_varbind *varbinds) @@ -498,7 +493,6 @@ snmp_send_trap_specific(s32_t specific_trap, struct snmp_varbind *varbinds) /** * @ingroup snmp_traps * Send coldstart trap - * @retval void */ void snmp_coldstart_trap(void) @@ -509,7 +503,6 @@ snmp_coldstart_trap(void) /** * @ingroup snmp_traps * Send authentication failure trap (used internally by agent) - * @retval void */ void snmp_authfail_trap(void) @@ -727,7 +720,6 @@ snmp_trap_header_enc_pdu(struct snmp_msg_trap *trap, struct snmp_pbuf_stream *pb * Encodes trap header part that is SNMP v1 header specific. * @param trap Trap message * @param pbuf_stream stream used for storing data inside pbuf - * @retval void */ static err_t snmp_trap_header_enc_v1_specific(struct snmp_msg_trap *trap, struct snmp_pbuf_stream *pbuf_stream) @@ -781,7 +773,6 @@ snmp_trap_header_enc_v1_specific(struct snmp_msg_trap *trap, struct snmp_pbuf_st * * @param trap Trap message * @param pbuf_stream stream used for storing data inside pbuf - * @retval void */ static err_t snmp_trap_header_enc_v2c_specific(struct snmp_msg_trap *trap, struct snmp_pbuf_stream *pbuf_stream) @@ -814,7 +805,6 @@ snmp_trap_header_enc_v2c_specific(struct snmp_msg_trap *trap, struct snmp_pbuf_s * * @param trap Trap message * @param pbuf_stream stream used for storing data inside pbuf - * @retval void */ static err_t snmp_trap_header_enc(struct snmp_msg_trap *trap, struct snmp_pbuf_stream *pbuf_stream) From c06cc7655d9401980008c4f56dc5c1f0e05271b5 Mon Sep 17 00:00:00 2001 From: Arne Schwabe Date: Thu, 12 Sep 2024 13:43:38 +0200 Subject: [PATCH 88/94] Support FreeBSD in the default configuration FreeBSD support is basically just very small changes related to some different includes and one define to not hide non-standard defines like B115200. Signed-off-by: Arne Schwabe --- CMakeLists.txt | 2 +- contrib/ports/unix/port/include/arch/cc.h | 2 ++ contrib/ports/unix/port/netif/sio.c | 5 +++++ 3 files changed, 8 insertions(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 7ff51473..62a2c102 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -11,7 +11,7 @@ set (LWIP_DEFINITIONS LWIP_DEBUG=1) if (${CMAKE_SYSTEM_NAME} STREQUAL "Windows") add_subdirectory(${LWIP_DIR}/contrib/ports/win32/example_app) -elseif(${CMAKE_SYSTEM_NAME} STREQUAL "Linux" OR ${CMAKE_SYSTEM_NAME} STREQUAL "Darwin") +elseif(${CMAKE_SYSTEM_NAME} STREQUAL "Linux" OR ${CMAKE_SYSTEM_NAME} STREQUAL "Darwin" OR ${CMAKE_SYSTEM_NAME} STREQUAL "FreeBSD") add_subdirectory(${LWIP_DIR}/contrib/ports/unix/example_app) else() message(WARNING "Host ${CMAKE_SYSTEM_NAME} is not supported to build example_app") diff --git a/contrib/ports/unix/port/include/arch/cc.h b/contrib/ports/unix/port/include/arch/cc.h index c4b51b67..a072f60f 100644 --- a/contrib/ports/unix/port/include/arch/cc.h +++ b/contrib/ports/unix/port/include/arch/cc.h @@ -41,6 +41,8 @@ #define LWIP_UNIX_MACH #elif defined __OpenBSD__ #define LWIP_UNIX_OPENBSD +#elif defined __FreeBSD__ +#define LWIP_UNIX_FREEBSD #elif defined __FreeBSD_kernel__ && __GLIBC__ #define LWIP_UNIX_KFREEBSD #elif defined __CYGWIN__ diff --git a/contrib/ports/unix/port/netif/sio.c b/contrib/ports/unix/port/netif/sio.c index a6560ba4..41bbba5d 100644 --- a/contrib/ports/unix/port/netif/sio.c +++ b/contrib/ports/unix/port/netif/sio.c @@ -1,7 +1,10 @@ /* Author: Magnus Ivarsson */ /* to get rid of implicit function declarations */ +#ifndef __FreeBSD__ +/* defining this on FreeBSD hides non-standard defines that sio.c depends on */ #define _XOPEN_SOURCE 600 +#endif #define _GNU_SOURCE /* build with Darwin C extensions not part of POSIX, i.e. FASYNC, SIGIO. @@ -37,6 +40,8 @@ #include #if defined(LWIP_UNIX_OPENBSD) || defined(LWIP_UNIX_MACH) #include +#elif defined(LWIP_UNIX_FREEBSD) +#include #endif #include #include From 52bb3eedd7a9f891afec5d26f03576cb4aced722 Mon Sep 17 00:00:00 2001 From: Jan Breuer Date: Fri, 1 Nov 2024 10:38:16 +0100 Subject: [PATCH 89/94] snmp: fix dangling pointer in snmp_traps --- src/apps/snmp/snmp_traps.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/apps/snmp/snmp_traps.c b/src/apps/snmp/snmp_traps.c index 3998723f..e6f0804f 100644 --- a/src/apps/snmp/snmp_traps.c +++ b/src/apps/snmp/snmp_traps.c @@ -348,6 +348,7 @@ snmp_send_trap_or_notification_or_inform_generic(struct snmp_msg_trap *trap_msg, u32_t timestamp = 0; struct snmp_varbind *original_varbinds = varbinds; struct snmp_varbind *original_prev = NULL; + struct snmp_obj_id snmp_trap_oid = { 0 }; /* used for converting SNMPv1 generic/specific trap parameter to SNMPv2 snmpTrapOID */ struct snmp_varbind snmp_v2_special_varbinds[] = { /* First varbind is used to store sysUpTime */ { @@ -386,7 +387,6 @@ snmp_send_trap_or_notification_or_inform_generic(struct snmp_msg_trap *trap_msg, /* see rfc3584 */ if (trap_msg->snmp_version == SNMP_VERSION_2c) { - struct snmp_obj_id snmp_trap_oid = { 0 }; /* used for converting SNMPv1 generic/specific trap parameter to SNMPv2 snmpTrapOID */ err = snmp_prepare_trap_oid(&snmp_trap_oid, eoid, generic_trap, specific_trap); if (err == ERR_OK) { snmp_v2_special_varbinds[1].value_len = snmp_trap_oid.len * sizeof(snmp_trap_oid.id[0]); From f05e20101ec6a5160d00a23dd1def7790aeaccf6 Mon Sep 17 00:00:00 2001 From: Jan Breuer Date: Wed, 27 Nov 2024 09:55:36 +0100 Subject: [PATCH 90/94] snmp: remove handling of varbind->prev because it is never used No code in snmp traverses varbinds backwards so prev is never used. This also fixes false positive dangling pointer detection by GCC. --- src/apps/snmp/snmp_traps.c | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/src/apps/snmp/snmp_traps.c b/src/apps/snmp/snmp_traps.c index e6f0804f..2b441966 100644 --- a/src/apps/snmp/snmp_traps.c +++ b/src/apps/snmp/snmp_traps.c @@ -346,8 +346,6 @@ snmp_send_trap_or_notification_or_inform_generic(struct snmp_msg_trap *trap_msg, u16_t tot_len = 0; err_t err = ERR_OK; u32_t timestamp = 0; - struct snmp_varbind *original_varbinds = varbinds; - struct snmp_varbind *original_prev = NULL; struct snmp_obj_id snmp_trap_oid = { 0 }; /* used for converting SNMPv1 generic/specific trap parameter to SNMPv2 snmpTrapOID */ struct snmp_varbind snmp_v2_special_varbinds[] = { /* First varbind is used to store sysUpTime */ @@ -379,7 +377,6 @@ snmp_send_trap_or_notification_or_inform_generic(struct snmp_msg_trap *trap_msg, LWIP_ASSERT_SNMP_LOCKED(); snmp_v2_special_varbinds[0].next = &snmp_v2_special_varbinds[1]; - snmp_v2_special_varbinds[1].prev = &snmp_v2_special_varbinds[0]; snmp_v2_special_varbinds[0].value = ×tamp; @@ -391,10 +388,6 @@ snmp_send_trap_or_notification_or_inform_generic(struct snmp_msg_trap *trap_msg, if (err == ERR_OK) { snmp_v2_special_varbinds[1].value_len = snmp_trap_oid.len * sizeof(snmp_trap_oid.id[0]); snmp_v2_special_varbinds[1].value = snmp_trap_oid.id; - if (varbinds != NULL) { - original_prev = varbinds->prev; - varbinds->prev = &snmp_v2_special_varbinds[1]; - } varbinds = snmp_v2_special_varbinds; /* After inserting two varbinds at the beginning of the list, make sure that pointer is pointing to the first element */ } } @@ -417,9 +410,6 @@ snmp_send_trap_or_notification_or_inform_generic(struct snmp_msg_trap *trap_msg, } } } - if ((trap_msg->snmp_version == SNMP_VERSION_2c) && (original_varbinds != NULL)) { - original_varbinds->prev = original_prev; - } req_id++; return err; } From 5ee5801c2c9bf16eaa9821193334f37110a87f28 Mon Sep 17 00:00:00 2001 From: Jan Breuer Date: Fri, 29 Nov 2024 11:50:09 +0100 Subject: [PATCH 91/94] snmp: remove unused prev field from snmp_varbind --- src/apps/snmp/snmp_msg.c | 1 - src/apps/snmp/snmp_traps.c | 2 -- src/include/lwip/apps/snmp.h | 2 -- 3 files changed, 5 deletions(-) diff --git a/src/apps/snmp/snmp_msg.c b/src/apps/snmp/snmp_msg.c index 9c0a15c5..f8c75bb7 100644 --- a/src/apps/snmp/snmp_msg.c +++ b/src/apps/snmp/snmp_msg.c @@ -328,7 +328,6 @@ snmp_receive(void *handle, struct pbuf *p, const ip_addr_t *source_ip, u16_t por struct snmp_varbind vb; vb.next = NULL; - vb.prev = NULL; vb.type = SNMP_ASN1_TYPE_COUNTER32; vb.value_len = sizeof(u32_t); diff --git a/src/apps/snmp/snmp_traps.c b/src/apps/snmp/snmp_traps.c index 2b441966..465fb9c9 100644 --- a/src/apps/snmp/snmp_traps.c +++ b/src/apps/snmp/snmp_traps.c @@ -351,7 +351,6 @@ snmp_send_trap_or_notification_or_inform_generic(struct snmp_msg_trap *trap_msg, /* First varbind is used to store sysUpTime */ { NULL, /* *next */ - NULL, /* *prev */ { /* oid */ 8, /* oid len */ {1, 3, 6, 1, 2, 1, 1, 3} /* oid for sysUpTime */ @@ -363,7 +362,6 @@ snmp_send_trap_or_notification_or_inform_generic(struct snmp_msg_trap *trap_msg, /* Second varbind is used to store snmpTrapOID */ { NULL, /* *next */ - NULL, /* *prev */ { /* oid */ 10, /* oid len */ {1, 3, 6, 1, 6, 3, 1, 1, 4, 1} /* oid for snmpTrapOID */ diff --git a/src/include/lwip/apps/snmp.h b/src/include/lwip/apps/snmp.h index dc5bb0d0..d01f99b8 100644 --- a/src/include/lwip/apps/snmp.h +++ b/src/include/lwip/apps/snmp.h @@ -55,8 +55,6 @@ struct snmp_varbind { /** pointer to next varbind, NULL for last in list */ struct snmp_varbind *next; - /** pointer to previous varbind, NULL for first in list */ - struct snmp_varbind *prev; /** object identifier */ struct snmp_obj_id oid; From fbd597e4500bbd51c8872f1ab11e50dba075f291 Mon Sep 17 00:00:00 2001 From: Jan Breuer Date: Fri, 29 Nov 2024 18:26:58 +0100 Subject: [PATCH 92/94] snmp: Mention struct field removal in UPGRADING --- UPGRADING | 1 + 1 file changed, 1 insertion(+) diff --git a/UPGRADING b/UPGRADING index 0d357906..ac77cf58 100644 --- a/UPGRADING +++ b/UPGRADING @@ -10,6 +10,7 @@ with newer versions. * The eth_addr_cmp and ip_addr_cmp set of functions have been renamed to eth_addr_eq, ip_addr_eq and so on, since they return non-zero on equality. Macros for the old names exist. * The sio_write function used by PPP now takes the data argument as const. + * The prev field in the snmp_varbind struct has been removed. (2.2.0) From b6c60989645be22b9e91bcc7a81c07fff4dabaa1 Mon Sep 17 00:00:00 2001 From: Simon Goldschmidt Date: Wed, 5 Feb 2025 20:25:11 +0100 Subject: [PATCH 93/94] Update CHANGELOG in preparation for 2.2.1 release --- CHANGELOG | 47 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) diff --git a/CHANGELOG b/CHANGELOG index e113c2ad..90a5834c 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -6,11 +6,58 @@ HISTORY * [Enter new changes just after this line - do not remove this line] +(STABLE-2.2.1): + + ++ New features: + + 2023-10-11: Faidon Liambotis + * Add MEM_CUSTOM_ALLOCATOR and make LIBC a subset of it + + 2023-09-29: Jiri Findejs + * mqtt: support binary Will Message + ++ Bugfixes: + 2024-02-19: Simon Goldschmidt + * tcpip: fix that TCPIP_CORE_LOCK is not released for LWIP_TIMERS==0 + + 2024-01-09: Simon Goldschmidt + * snmp v3, ppp: prevent possible timing attacks by using a constant-runtime-memcmp when + checking credentials + + 2023-01-04: Simon Goldschmidt + * makefsdata: update tinydir.h to newest version (1.2.6) + + 2023-10-12: Borys Szefler + * dhcp: fix memory corruption when LWIP_DHCP_MAX_DNS_SERVERS > DNS_MAX_SERVERS + + 2023-10-11: Mazakazu + * sockets: fix socket leak when using setsockopt/getsockopt hook with LWIP_NETCONN_FULLDUPLEX==1 + + 2023-10-10: Simon Goldschmidt + * sockets: fix bug #63898: allow socket option IPV6_CHECKSUM for both IPPROTO_IPV6 and IPPROTO_RAW + + 2023-10-10: Simon Goldschmidt + * ipv6: fix ip6_current_header() after reassembly + + 2023-10-07: Simon Goldschmidt + * ipv6 reassembly: fix detecting holes in reassembled packets + + 2023-10-04: Simon Goldschmidt + * apps: http client: improve the HTTP client; ensure connection settings are passed + + 2023-10-03: Simon Goldschmidt + * ipv6: frag: fix bogus icmp6 response on reassembly timeout + + 2023-09-28: Szabolcs Szekelyi + * httpd: ensure headers are parsed case-insensitive + 2023-09-28: Erik Ekman * Fix ND6 Router Advertisement parsing when NETIF_MAX_HWADDR_LEN is above 6. + 2023-09-27: Hardy Griech + * Fix iperf byte counting mode + (STABLE-2.2.0): 2018-10-02: Dirk Ziegelmeier From 77dcd25a72509eb83f72b033d219b1d40cd8eb95 Mon Sep 17 00:00:00 2001 From: Simon Goldschmidt Date: Wed, 5 Feb 2025 20:38:17 +0100 Subject: [PATCH 94/94] Prepare 2.2.1 release --- doc/doxygen/lwip.Doxyfile | 2 +- src/Filelists.cmake | 2 +- src/include/lwip/init.h | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/doc/doxygen/lwip.Doxyfile b/doc/doxygen/lwip.Doxyfile index d51fe67e..f68fa0c5 100644 --- a/doc/doxygen/lwip.Doxyfile +++ b/doc/doxygen/lwip.Doxyfile @@ -38,7 +38,7 @@ PROJECT_NAME = "lwIP" # could be handy for archiving the generated documentation or if some version # control system is used. -PROJECT_NUMBER = "2.2.1.dev" +PROJECT_NUMBER = "2.2.1" # Using the PROJECT_BRIEF tag one can provide an optional one line description # for a project that appears at the top of each page and should give viewer a diff --git a/src/Filelists.cmake b/src/Filelists.cmake index 8008a440..228e0f0c 100644 --- a/src/Filelists.cmake +++ b/src/Filelists.cmake @@ -18,7 +18,7 @@ set(LWIP_VERSION_REVISION "1") # LWIP_VERSION_RC is set to LWIP_RC_RELEASE for official releases # LWIP_VERSION_RC is set to LWIP_RC_DEVELOPMENT for Git versions # Numbers 1..31 are reserved for release candidates -set(LWIP_VERSION_RC "LWIP_RC_DEVELOPMENT") +set(LWIP_VERSION_RC "LWIP_RC_RELEASE") if ("${LWIP_VERSION_RC}" STREQUAL "LWIP_RC_RELEASE") set(LWIP_VERSION_STRING diff --git a/src/include/lwip/init.h b/src/include/lwip/init.h index b10f7ec4..f579da48 100644 --- a/src/include/lwip/init.h +++ b/src/include/lwip/init.h @@ -58,7 +58,7 @@ extern "C" { /** For release candidates, this is set to 1..254 * For official releases, this is set to 255 (LWIP_RC_RELEASE) * For development versions (Git), this is set to 0 (LWIP_RC_DEVELOPMENT) */ -#define LWIP_VERSION_RC LWIP_RC_DEVELOPMENT +#define LWIP_VERSION_RC LWIP_RC_RELEASE /** LWIP_VERSION_RC is set to LWIP_RC_RELEASE for official releases */ #define LWIP_RC_RELEASE 255