summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFrédéric Desbiens <[email protected]>2025-02-20 15:05:03 +0100
committerGitHub <[email protected]>2025-02-20 15:05:03 +0100
commitbd5d12e9e601015a560b2e3bef0e78d63fc0d6c3 (patch)
tree698e447a8e105c521e2ad2408a0e084b9a6b38e8
parent6c8e9d1c95d71bd4b313e1cc37d8f8841543b248 (diff)
parent4c391972bc956e7200b71167ba8a38ac0fe9c608 (diff)
Merge pull request #302 from eclipse-threadx/devv6.4.2_rel
Release version 6.4.2
-rwxr-xr-x.gitignore1
-rwxr-xr-xCMakeLists.txt2
-rw-r--r--addons/web/nx_web_http_server.c98
-rw-r--r--common/inc/nx_api.h12
-rw-r--r--common/src/nx_tcp_packet_process.c14
-rw-r--r--nx_secure/inc/nx_secure_tls.h11
-rw-r--r--nx_secure/src/nxe_secure_tls_session_send.c10
-rw-r--r--test/cmake/crypto/regression/CMakeLists.txt2
-rw-r--r--test/cmake/crypto/regression/crypto_standalone.cmake2
m---------test/cmake/filex0
-rw-r--r--test/cmake/mqtt/regression/CMakeLists.txt2
-rw-r--r--test/cmake/mqtt_interoperability/regression/CMakeLists.txt2
-rw-r--r--test/cmake/netxduo/regression/CMakeLists.txt2
-rw-r--r--test/cmake/netxduo/samples/CMakeLists.txt2
-rw-r--r--test/cmake/nx_secure/regression/CMakeLists.txt2
-rw-r--r--test/cmake/nx_secure_interoperability/regression/CMakeLists.txt2
m---------test/cmake/threadx0
-rw-r--r--test/cmake/web/regression/CMakeLists.txt2
18 files changed, 127 insertions, 39 deletions
diff --git a/.gitignore b/.gitignore
index 2d01435e..a71713e1 100755
--- a/.gitignore
+++ b/.gitignore
@@ -14,3 +14,4 @@ compile_commands.json
CTestTestfile.cmake
.run.sh
+scripts/openssl*
diff --git a/CMakeLists.txt b/CMakeLists.txt
index c490b3ce..eca57209 100755
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -1,4 +1,4 @@
-cmake_minimum_required(VERSION 3.0.0 FATAL_ERROR)
+cmake_minimum_required(VERSION 3.13 FATAL_ERROR)
# Set up the project
project(netxduo
diff --git a/addons/web/nx_web_http_server.c b/addons/web/nx_web_http_server.c
index a361452d..400e684f 100644
--- a/addons/web/nx_web_http_server.c
+++ b/addons/web/nx_web_http_server.c
@@ -3968,8 +3968,8 @@ UINT temp_realm_length = 0;
}
/* Send response back to HTTP Client. */
- _nx_web_http_server_response_send(server_ptr, NX_WEB_HTTP_STATUS_INTERNAL_ERROR,
- sizeof(NX_WEB_HTTP_STATUS_INTERNAL_ERROR) - 1,
+ _nx_web_http_server_response_send(server_ptr, NX_WEB_HTTP_STATUS_BAD_REQUEST,
+ sizeof(NX_WEB_HTTP_STATUS_BAD_REQUEST) - 1,
"NetX HTTP Receive Timeout",
sizeof("NetX HTTP Receive Timeout") - 1, NX_NULL, 0);
@@ -4215,6 +4215,7 @@ VOID _nx_web_http_server_put_process(NX_WEB_HTTP_SERVER *server_ptr, NX_PACKET
UINT status;
ULONG length = 0;
+ULONG consumed_length = 0;
UINT offset;
CHAR *name_ptr;
CHAR *password_ptr;
@@ -4447,8 +4448,7 @@ UINT temp_realm_length = 0;
nx_packet_release(packet_ptr);
}
- /* Error, return to caller. */
- return;
+ goto put_process_end;
}
/* Open the specified file for writing. */
@@ -4470,8 +4470,7 @@ UINT temp_realm_length = 0;
nx_packet_release(packet_ptr);
}
- /* Error, return to caller. */
- return;
+ goto put_process_end;
}
/* Determine if there is any content in the first packet. */
@@ -4498,12 +4497,28 @@ UINT temp_realm_length = 0;
nx_packet_release(packet_ptr);
}
- /* Error, return to caller. */
- return;
+ goto put_process_end;
}
/* Update the length. */
- length = length - ((ULONG)(packet_ptr -> nx_packet_append_ptr - packet_ptr -> nx_packet_prepend_ptr) - offset);
+ consumed_length = ((ULONG)(packet_ptr -> nx_packet_append_ptr - packet_ptr -> nx_packet_prepend_ptr) - offset);
+ if ((length - consumed_length) > length)
+ {
+ /* Underflow error has occurred.*/
+
+ /* Send response back to HTTP Client. */
+ _nx_web_http_server_response_send(server_ptr, NX_WEB_HTTP_STATUS_BAD_REQUEST,
+ sizeof(NX_WEB_HTTP_STATUS_BAD_REQUEST) - 1,
+ "NetX HTTP Content Length",
+ sizeof("NetX HTTP Content Length") - 1, NX_NULL, 0);
+
+ /* Release the previous data packet. */
+ nx_packet_release(data_packet_ptr);
+
+ status = NX_UNDERFLOW;
+ goto put_process_end;
+ }
+ length -= consumed_length;
/* Increment the bytes received count. */
server_ptr -> nx_web_http_server_total_bytes_received = server_ptr -> nx_web_http_server_total_bytes_received +
@@ -4536,12 +4551,28 @@ UINT temp_realm_length = 0;
nx_packet_release(packet_ptr);
}
- /* Error, return to caller. */
- return;
+ goto put_process_end;
}
/* Update the length. */
- length = length - (ULONG)(next_packet_ptr -> nx_packet_append_ptr - next_packet_ptr -> nx_packet_prepend_ptr);
+ consumed_length = (ULONG)(next_packet_ptr -> nx_packet_append_ptr - next_packet_ptr -> nx_packet_prepend_ptr);
+ if ((length - consumed_length) > length)
+ {
+ /* Underflow error has occurred.*/
+
+ /* Send response back to HTTP Client. */
+ _nx_web_http_server_response_send(server_ptr, NX_WEB_HTTP_STATUS_BAD_REQUEST,
+ sizeof(NX_WEB_HTTP_STATUS_BAD_REQUEST) - 1,
+ "NetX HTTP Content Length",
+ sizeof("NetX HTTP Content Length") - 1, NX_NULL, 0);
+
+ /* Release the previous data packet. */
+ nx_packet_release(data_packet_ptr);
+
+ status = NX_UNDERFLOW;
+ goto put_process_end;
+ }
+ length -= consumed_length;
/* Increment the bytes received count. */
server_ptr -> nx_web_http_server_total_bytes_received = server_ptr -> nx_web_http_server_total_bytes_received +
@@ -4575,13 +4606,12 @@ UINT temp_realm_length = 0;
}
/* Send response back to HTTP Client. */
- _nx_web_http_server_response_send(server_ptr, NX_WEB_HTTP_STATUS_INTERNAL_ERROR,
- sizeof(NX_WEB_HTTP_STATUS_INTERNAL_ERROR) - 1,
+ _nx_web_http_server_response_send(server_ptr, NX_WEB_HTTP_STATUS_BAD_REQUEST,
+ sizeof(NX_WEB_HTTP_STATUS_BAD_REQUEST) - 1,
"NetX HTTP Receive Timeout",
sizeof("NetX HTTP Receive Timeout") - 1, NX_NULL, 0);
- /* Error, return to caller. */
- return;
+ goto put_process_end;
}
if (server_ptr -> nx_web_http_server_request_chunked)
@@ -4611,12 +4641,28 @@ UINT temp_realm_length = 0;
/* Release the previous data packet. */
nx_packet_release(data_packet_ptr);
- /* Error, return to caller. */
- return;
+ goto put_process_end;
}
/* Update the length. */
- length = length - (UINT)(next_packet_ptr -> nx_packet_append_ptr - next_packet_ptr -> nx_packet_prepend_ptr);
+ consumed_length = (ULONG)(next_packet_ptr -> nx_packet_append_ptr - next_packet_ptr -> nx_packet_prepend_ptr);
+ if ((length - consumed_length) > length)
+ {
+ /* Underflow error has occurred.*/
+
+ /* Send response back to HTTP Client. */
+ _nx_web_http_server_response_send(server_ptr, NX_WEB_HTTP_STATUS_BAD_REQUEST,
+ sizeof(NX_WEB_HTTP_STATUS_BAD_REQUEST) - 1,
+ "NetX HTTP Content Length",
+ sizeof("NetX HTTP Content Length") - 1, NX_NULL, 0);
+
+ /* Release the previous data packet. */
+ nx_packet_release(data_packet_ptr);
+
+ status = NX_UNDERFLOW;
+ goto put_process_end;
+ }
+ length -= consumed_length;
/* Increment the bytes received count. */
server_ptr -> nx_web_http_server_total_bytes_received = server_ptr -> nx_web_http_server_total_bytes_received +
@@ -4635,11 +4681,8 @@ UINT temp_realm_length = 0;
nx_packet_release(data_packet_ptr);
}
- /* Success, at this point close the file and prepare a successful response for the client. */
- fx_file_close(&(server_ptr -> nx_web_http_server_file));
-
-
- /* Now build a response header. */
+ /* Build a response header. No need to check for success up to this point, as
+ program will have jumped to put_process_end label if an error has occurred. */
status = _nx_web_http_server_generate_response_header(server_ptr, &data_packet_ptr, NX_WEB_HTTP_STATUS_OK,
sizeof(NX_WEB_HTTP_STATUS_OK) - 1, 0,
NX_NULL, 0, NX_NULL, 0);
@@ -4657,7 +4700,10 @@ UINT temp_realm_length = 0;
nx_packet_release(data_packet_ptr);
}
}
-
+ put_process_end:
+ /* Always attempt cleanup by closing the file. */
+ fx_file_close(&(server_ptr -> nx_web_http_server_file));
+ return;
}
@@ -11350,4 +11396,4 @@ UINT _nx_web_http_server_authentication_check_set(NX_WEB_HTTP_SERVER *http_serve
/* Return success. */
return(NX_SUCCESS);
-} \ No newline at end of file
+}
diff --git a/common/inc/nx_api.h b/common/inc/nx_api.h
index 44fc1a45..679d1e27 100644
--- a/common/inc/nx_api.h
+++ b/common/inc/nx_api.h
@@ -1,5 +1,6 @@
/***************************************************************************
* Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2025-present Eclipse ThreadX Contributors
*
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
@@ -109,6 +110,9 @@
/* 03-01-2024 Tiejun Zhou Modified comment(s), */
/* update version number, */
/* resulting in version 6.4.1 */
+/* 02-19-2025 Frédéric Desbiens Modified comment(s), */
+/* update version number, */
+/* resulting in version 6.4.2 */
/* */
/**************************************************************************/
@@ -525,7 +529,7 @@ VOID _nx_trace_event_update(TX_TRACE_BUFFER_ENTRY *event, ULONG timestamp, ULONG
#define AZURE_RTOS_NETXDUO
#define NETXDUO_MAJOR_VERSION 6
#define NETXDUO_MINOR_VERSION 4
-#define NETXDUO_PATCH_VERSION 1
+#define NETXDUO_PATCH_VERSION 2
/* Define the following symbols for backward compatibility */
#define EL_PRODUCT_NETXDUO
@@ -2226,6 +2230,12 @@ typedef struct NX_TCP_LISTEN_STRUCT
NX_PACKET *nx_tcp_listen_queue_head,
*nx_tcp_listen_queue_tail;
+#ifndef NX_DISABLE_EXTENDED_NOTIFY_SUPPORT
+ /* Define the callback function for notifying the host application of
+ a new connect request in the listen queue. */
+ VOID (*nx_tcp_listen_queue_notify)(struct NX_TCP_LISTEN_STRUCT *listen_ptr);
+#endif
+
/* Define the link between other TCP listen structures created by the application. */
struct NX_TCP_LISTEN_STRUCT
*nx_tcp_listen_next,
diff --git a/common/src/nx_tcp_packet_process.c b/common/src/nx_tcp_packet_process.c
index a9fa6c38..ef8b2e9f 100644
--- a/common/src/nx_tcp_packet_process.c
+++ b/common/src/nx_tcp_packet_process.c
@@ -108,6 +108,9 @@ NX_TCP_SOCKET *socket_ptr;
NX_TCP_HEADER *tcp_header_ptr;
struct NX_TCP_LISTEN_STRUCT *listen_ptr;
VOID (*listen_callback)(NX_TCP_SOCKET *socket_ptr, UINT port);
+#ifndef NX_DISABLE_EXTENDED_NOTIFY_SUPPORT
+VOID (*queue_callback)(struct NX_TCP_LISTEN_STRUCT *listen_ptr);
+#endif
ULONG option_words;
ULONG mss = 0;
ULONG checksum;
@@ -1011,6 +1014,17 @@ ULONG rwin_scale = 0xFF;
/* Release the packet. */
_nx_packet_release(packet_ptr);
}
+
+#ifndef NX_DISABLE_EXTENDED_NOTIFY_SUPPORT
+ /* If extended notify is enabled, call the listen_queue_notify function.
+ This user-supplied function notifies the host application of
+ a new connect request in the listen queue. */
+ queue_callback = listen_ptr -> nx_tcp_listen_queue_notify;
+ if (queue_callback)
+ {
+ (queue_callback)(listen_ptr);
+ }
+#endif
}
/* Finished processing, just return. */
diff --git a/nx_secure/inc/nx_secure_tls.h b/nx_secure/inc/nx_secure_tls.h
index abbbcac4..174fa541 100644
--- a/nx_secure/inc/nx_secure_tls.h
+++ b/nx_secure/inc/nx_secure_tls.h
@@ -1,5 +1,6 @@
/***************************************************************************
- * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2024 Microsoft Corporation
+ * Copyright (c) 2025-present Eclipse ThreadX Contributors
*
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
@@ -109,6 +110,12 @@
/* 03-01-2024 Tiejun Zhou Modified comment(s), */
/* update version number, */
/* resulting in version 6.4.1 */
+/* 03-01-2024 Tiejun Zhou Modified comment(s), */
+/* update version number, */
+/* resulting in version 6.4.1 */
+/* 02-19-2025 Frédéric Desbiens Modified comment(s), */
+/* update version number, */
+/* resulting in version 6.4.2 */
/* */
/**************************************************************************/
@@ -172,7 +179,7 @@ extern "C" {
#define AZURE_RTOS_NETX_SECURE
#define NETX_SECURE_MAJOR_VERSION 6
#define NETX_SECURE_MINOR_VERSION 4
-#define NETX_SECURE_PATCH_VERSION 1
+#define NETX_SECURE_PATCH_VERSION 2
/* The following symbols are defined for backward compatibility reasons. */
#define EL_PRODUCT_NETX_SECURE
diff --git a/nx_secure/src/nxe_secure_tls_session_send.c b/nx_secure/src/nxe_secure_tls_session_send.c
index 2301fe9d..40c3a5e3 100644
--- a/nx_secure/src/nxe_secure_tls_session_send.c
+++ b/nx_secure/src/nxe_secure_tls_session_send.c
@@ -90,6 +90,16 @@ UINT status;
return(NX_PTR_ERROR);
}
+ if (packet_ptr -> nx_packet_length == 0)
+ {
+ /* Must check for empty packets here, as TLS data will make a packet's contents
+ non-empty. _nx_tcp_socket_send_internal has a check for an empty packet
+ that correctly works in an HTTP session but will result in a false negative if
+ the session is HTTPS. Thus, this check is performed before the TLS session
+ operations that modify the packet. */
+ return(NX_INVALID_PACKET);
+ }
+
if (tls_session -> nx_secure_tls_tcp_socket == NX_NULL)
{
return(NX_SECURE_TLS_SESSION_UNINITIALIZED);
diff --git a/test/cmake/crypto/regression/CMakeLists.txt b/test/cmake/crypto/regression/CMakeLists.txt
index 929b359d..d2c9221c 100644
--- a/test/cmake/crypto/regression/CMakeLists.txt
+++ b/test/cmake/crypto/regression/CMakeLists.txt
@@ -1,4 +1,4 @@
-cmake_minimum_required(VERSION 3.0.0 FATAL_ERROR)
+cmake_minimum_required(VERSION 3.13 FATAL_ERROR)
cmake_policy(SET CMP0057 NEW)
project(regression_test LANGUAGES C)
diff --git a/test/cmake/crypto/regression/crypto_standalone.cmake b/test/cmake/crypto/regression/crypto_standalone.cmake
index 7fb4c98e..7982e462 100644
--- a/test/cmake/crypto/regression/crypto_standalone.cmake
+++ b/test/cmake/crypto/regression/crypto_standalone.cmake
@@ -1,4 +1,4 @@
-cmake_minimum_required(VERSION 3.0.0 FATAL_ERROR)
+cmake_minimum_required(VERSION 3.13 FATAL_ERROR)
set(CPU_ARCH "linux")
set(COMPILER "gnu")
diff --git a/test/cmake/filex b/test/cmake/filex
new file mode 160000
+Subproject 1312f87f3b90c73c8db3aa1ccbadf15c60fe04b
diff --git a/test/cmake/mqtt/regression/CMakeLists.txt b/test/cmake/mqtt/regression/CMakeLists.txt
index c96a6ed7..ec82ba7b 100644
--- a/test/cmake/mqtt/regression/CMakeLists.txt
+++ b/test/cmake/mqtt/regression/CMakeLists.txt
@@ -1,4 +1,4 @@
-cmake_minimum_required(VERSION 3.0.0 FATAL_ERROR)
+cmake_minimum_required(VERSION 3.13 FATAL_ERROR)
cmake_policy(SET CMP0057 NEW)
project(regression_test LANGUAGES C)
diff --git a/test/cmake/mqtt_interoperability/regression/CMakeLists.txt b/test/cmake/mqtt_interoperability/regression/CMakeLists.txt
index c653fded..19bb7bf4 100644
--- a/test/cmake/mqtt_interoperability/regression/CMakeLists.txt
+++ b/test/cmake/mqtt_interoperability/regression/CMakeLists.txt
@@ -1,4 +1,4 @@
-cmake_minimum_required(VERSION 3.0.0 FATAL_ERROR)
+cmake_minimum_required(VERSION 3.13 FATAL_ERROR)
cmake_policy(SET CMP0057 NEW)
project(regression_test LANGUAGES C)
diff --git a/test/cmake/netxduo/regression/CMakeLists.txt b/test/cmake/netxduo/regression/CMakeLists.txt
index bd79a7f1..54685113 100644
--- a/test/cmake/netxduo/regression/CMakeLists.txt
+++ b/test/cmake/netxduo/regression/CMakeLists.txt
@@ -1,4 +1,4 @@
-cmake_minimum_required(VERSION 3.0.0 FATAL_ERROR)
+cmake_minimum_required(VERSION 3.13 FATAL_ERROR)
cmake_policy(SET CMP0057 NEW)
project(regression_test LANGUAGES C)
diff --git a/test/cmake/netxduo/samples/CMakeLists.txt b/test/cmake/netxduo/samples/CMakeLists.txt
index a2241c69..8e04f72b 100644
--- a/test/cmake/netxduo/samples/CMakeLists.txt
+++ b/test/cmake/netxduo/samples/CMakeLists.txt
@@ -1,4 +1,4 @@
-cmake_minimum_required(VERSION 3.0.0 FATAL_ERROR)
+cmake_minimum_required(VERSION 3.13 FATAL_ERROR)
cmake_policy(SET CMP0057 NEW)
project(samples LANGUAGES C)
diff --git a/test/cmake/nx_secure/regression/CMakeLists.txt b/test/cmake/nx_secure/regression/CMakeLists.txt
index 40b8e4eb..d14c1a99 100644
--- a/test/cmake/nx_secure/regression/CMakeLists.txt
+++ b/test/cmake/nx_secure/regression/CMakeLists.txt
@@ -1,4 +1,4 @@
-cmake_minimum_required(VERSION 3.0.0 FATAL_ERROR)
+cmake_minimum_required(VERSION 3.13 FATAL_ERROR)
cmake_policy(SET CMP0057 NEW)
project(regression_test LANGUAGES C)
diff --git a/test/cmake/nx_secure_interoperability/regression/CMakeLists.txt b/test/cmake/nx_secure_interoperability/regression/CMakeLists.txt
index a2d3008a..65b963dd 100644
--- a/test/cmake/nx_secure_interoperability/regression/CMakeLists.txt
+++ b/test/cmake/nx_secure_interoperability/regression/CMakeLists.txt
@@ -1,4 +1,4 @@
-cmake_minimum_required(VERSION 3.0.0 FATAL_ERROR)
+cmake_minimum_required(VERSION 3.13 FATAL_ERROR)
cmake_policy(SET CMP0057 NEW)
project(regression_test LANGUAGES C)
diff --git a/test/cmake/threadx b/test/cmake/threadx
new file mode 160000
+Subproject 98c9172d01dcfdd0026ee3f5c6259dea6a12f25
diff --git a/test/cmake/web/regression/CMakeLists.txt b/test/cmake/web/regression/CMakeLists.txt
index 9111f250..b9330a58 100644
--- a/test/cmake/web/regression/CMakeLists.txt
+++ b/test/cmake/web/regression/CMakeLists.txt
@@ -1,4 +1,4 @@
-cmake_minimum_required(VERSION 3.0.0 FATAL_ERROR)
+cmake_minimum_required(VERSION 3.13 FATAL_ERROR)
cmake_policy(SET CMP0057 NEW)
project(regression_test LANGUAGES C)