Jelajahi Sumber

feat(freertos): Exposed Kconfig option for configUSE_LIST_DATA_INTEGRITY_CHECK_BYTES

This commit exposes the FreeRTOS List integrity check option
configUSE_LIST_DATA_INTEGRITY_CHECK_BYTES via menuconfig.
Sudeep Mohanty 2 tahun lalu
induk
melakukan
d507a86285

+ 1 - 1
components/esp_event/test_apps/main/test_event_target.c

@@ -720,7 +720,7 @@ bool test_event_on_timer_alarm(gptimer_handle_t timer, const gptimer_alarm_event
 TEST_CASE("can post events from interrupt handler", "[event][intr]")
 {
     /* Lazy allocated resources in gptimer/intr_alloc */
-    unity_utils_set_leak_level(150);
+    unity_utils_set_leak_level(160);
 
     TEST_ESP_OK(esp_event_loop_create_default());
 

+ 1 - 1
components/esp_system/test_apps/esp_system_unity_tests/main/test_app_main.c

@@ -11,7 +11,7 @@
 #include "freertos/task.h"
 
 // Some resources are lazy allocated, the threshold is left for that case
-#define TEST_MEMORY_LEAK_THRESHOLD (-800)
+#define TEST_MEMORY_LEAK_THRESHOLD (-900)
 
 static size_t before_free_8bit;
 static size_t before_free_32bit;

+ 4 - 0
components/freertos/FreeRTOS-Kernel-SMP/portable/riscv/include/freertos/portmacro.h

@@ -9,7 +9,11 @@
 #include "sdkconfig.h"
 
 /* Macros used instead ofsetoff() for better performance of interrupt handler */
+#if CONFIG_FREERTOS_USE_LIST_DATA_INTEGRITY_CHECK_BYTES
+#define PORT_OFFSET_PX_STACK 0x40
+#else
 #define PORT_OFFSET_PX_STACK 0x30
+#endif /* #if CONFIG_FREERTOS_USE_LIST_DATA_INTEGRITY_CHECK_BYTES */
 #define PORT_OFFSET_PX_END_OF_STACK (PORT_OFFSET_PX_STACK + \
                                      /* void * pxDummy6 */ 4 + \
                                      /* BaseType_t xDummy23[ 2 ] */ 8 + \

+ 4 - 0
components/freertos/FreeRTOS-Kernel/portable/riscv/include/freertos/portmacro.h

@@ -37,7 +37,11 @@
 #include "freertos/FreeRTOSConfig.h"
 
 /* Macros used instead ofsetoff() for better performance of interrupt handler */
+#if CONFIG_FREERTOS_USE_LIST_DATA_INTEGRITY_CHECK_BYTES
+#define PORT_OFFSET_PX_STACK 0x40
+#else
 #define PORT_OFFSET_PX_STACK 0x30
+#endif /* #if CONFIG_FREERTOS_USE_LIST_DATA_INTEGRITY_CHECK_BYTES */
 #define PORT_OFFSET_PX_END_OF_STACK (PORT_OFFSET_PX_STACK + \
                                      /* void * pxDummy6 */ 4 + \
                                      /* uint8_t ucDummy7[ configMAX_TASK_NAME_LEN ] */ CONFIG_FREERTOS_MAX_TASK_NAME_LEN + \

+ 7 - 0
components/freertos/Kconfig

@@ -224,6 +224,13 @@ menu "FreeRTOS"
                 ``vTaskList()`` and ``vTaskGetRunTimeStats()`` functions in the build (see
                 configUSE_STATS_FORMATTING_FUNCTIONS documentation for more details).
 
+        config FREERTOS_USE_LIST_DATA_INTEGRITY_CHECK_BYTES
+            bool "configUSE_LIST_DATA_INTEGRITY_CHECK_BYTES"
+            #TODO: Enable by default for debug builds (IDF-8517)
+            default n
+            help
+                Enable list integrity checker (see configUSE_LIST_DATA_INTEGRITY_CHECK_BYTES documentation for more details).
+
         config FREERTOS_VTASKLIST_INCLUDE_COREID
             # Core affinity is supported in stats for Amazon FreeRTOS SMP by default
             bool "Enable display of xCoreID in vTaskList"

+ 3 - 0
components/freertos/config/include/freertos/FreeRTOSConfig.h

@@ -247,6 +247,9 @@
     #endif /* CONFIG_FREERTOS_SMP */
 #endif /* def __ASSEMBLER__ */
 
+/* -------------- List Data Integrity Checks --------------- */
+#define configUSE_LIST_DATA_INTEGRITY_CHECK_BYTES    CONFIG_FREERTOS_USE_LIST_DATA_INTEGRITY_CHECK_BYTES
+
 /* ----------------------------------------------- Amazon SMP FreeRTOS -------------------------------------------------
  * - All Amazon SMP FreeRTOS specific configurations
  * ------------------------------------------------------------------------------------------------------------------ */

+ 1 - 0
components/freertos/test_apps/freertos/sdkconfig.ci.freertos_options

@@ -17,3 +17,4 @@ CONFIG_FREERTOS_RUN_TIME_COUNTER_TYPE_U64=y
 CONFIG_FREERTOS_PLACE_FUNCTIONS_INTO_FLASH=y
 CONFIG_FREERTOS_FPU_IN_ISR=y
 CONFIG_FREERTOS_TASK_NOTIFICATION_ARRAY_ENTRIES=2
+CONFIG_FREERTOS_USE_LIST_DATA_INTEGRITY_CHECK_BYTES=y

+ 11 - 6
components/newlib/platform_include/sys/lock.h

@@ -1,11 +1,12 @@
 /*
- * SPDX-FileCopyrightText: 2022 Espressif Systems (Shanghai) CO LTD
+ * SPDX-FileCopyrightText: 2022-2023 Espressif Systems (Shanghai) CO LTD
  *
  * SPDX-License-Identifier: Apache-2.0
  */
 #pragma once
 
 #include_next <sys/lock.h>
+#include "sdkconfig.h"
 
 #ifdef _RETARGETABLE_LOCKING
 
@@ -13,15 +14,19 @@
  * The size here should be sufficient for a FreeRTOS mutex.
  * This is checked by a static assertion in locks.c
  *
- * Note 1: this might need to be made dependent on whether FreeRTOS
+ * Note: this might need to be made dependent on whether FreeRTOS
  * is included in the build.
- *
- * Note 2: the size is made sufficient for the case when
- * configUSE_TRACE_FACILITY is enabled. If it is disabled,
- * this definition wastes 8 bytes.
  */
 struct __lock {
+#if (CONFIG_FREERTOS_USE_LIST_DATA_INTEGRITY_CHECK_BYTES && CONFIG_FREERTOS_USE_TRACE_FACILITY)
+   int reserved[29];
+#elif (CONFIG_FREERTOS_USE_LIST_DATA_INTEGRITY_CHECK_BYTES && !CONFIG_FREERTOS_USE_TRACE_FACILITY)
+   int reserved[27];
+#elif (!CONFIG_FREERTOS_USE_LIST_DATA_INTEGRITY_CHECK_BYTES && CONFIG_FREERTOS_USE_TRACE_FACILITY)
    int reserved[23];
+#else
+   int reserved[21];
+#endif /* #if (CONFIG_FREERTOS_USE_LIST_DATA_INTEGRITY_CHECK_BYTES && CONFIG_FREERTOS_USE_TRACE_FACILITY) */
 };
 
 /* Compatibility definitions for the legacy ESP-specific locking implementation.

+ 1 - 1
components/wpa_supplicant/test_apps/main/test_crypto.c

@@ -22,7 +22,7 @@ typedef struct crypto_bignum crypto_bignum;
 
 TEST_CASE("Test crypto lib bignum apis", "[wpa_crypto]")
 {
-    set_leak_threshold(250);
+    set_leak_threshold(300);
     {
 
         uint8_t buf[32], buf2[32];

+ 1 - 1
components/wpa_supplicant/test_apps/main/test_dpp.c

@@ -34,7 +34,7 @@ extern size_t dpp_nonce_override_len;
 
 TEST_CASE("Test vectors DPP responder p256", "[wpa_dpp]")
 {
-    set_leak_threshold(120);
+    set_leak_threshold(130);
     /* Global variables */
     char command[1200] = {0};
     const u8 *frame;

+ 1 - 1
components/wpa_supplicant/test_apps/main/test_eloop.c

@@ -55,7 +55,7 @@ extern const wifi_osi_funcs_t *wifi_funcs;
 /* Check if eloop runs its timers correctly & in correct order */
 TEST_CASE("Test eloop timers run", "[eloop]")
 {
-    set_leak_threshold(800);
+    set_leak_threshold(1000);
     wifi_init_config_t cfg = WIFI_INIT_CONFIG_DEFAULT();
     cfg.nvs_enable = false;
     ESP_ERROR_CHECK(esp_wifi_init(&cfg));

+ 1 - 1
components/wpa_supplicant/test_apps/main/test_fast_pbkdf2.c

@@ -15,7 +15,7 @@
 
 TEST_CASE("Test pbkdf2", "[crypto-pbkdf2]")
 {
-    set_leak_threshold(120);
+    set_leak_threshold(130);
 
     uint8_t PMK[PMK_LEN];
     uint8_t ssid_len;

+ 1 - 1
components/wpa_supplicant/test_apps/main/test_sae.c

@@ -48,7 +48,7 @@ void wpabuf_free2(struct wpabuf *buf)
 
 TEST_CASE("Test SAE functionality with ECC group", "[wpa3_sae]")
 {
-    set_leak_threshold(120);
+    set_leak_threshold(400);
     ESP_LOGI("SAE Test", "### Beginning SAE init and deinit ###");
     {
         /* Test init and deinit*/

+ 1 - 0
tools/test_apps/configs/sdkconfig.debug_helpers

@@ -4,3 +4,4 @@ CONFIG_COMPILER_WARN_WRITE_STRINGS=y
 CONFIG_FREERTOS_WATCHPOINT_END_OF_STACK=y
 CONFIG_COMPILER_STACK_CHECK_MODE_STRONG=y
 CONFIG_COMPILER_STACK_CHECK=y
+CONFIG_FREERTOS_USE_LIST_DATA_INTEGRITY_CHECK_BYTES=y