From 883aba20be4efdbcef3ed0abe77f2872d2cf9a46 Mon Sep 17 00:00:00 2001 From: Renz Bagaporo Date: Tue, 26 Jan 2021 11:31:41 +0800 Subject: [PATCH] esp_common: move stack check --- components/esp_common/CMakeLists.txt | 8 +----- components/esp_common/component.mk | 6 +---- components/esp_system/CMakeLists.txt | 5 ++-- components/esp_system/stack_check.c | 40 ++++++++++++++++++++++++++++ 4 files changed, 45 insertions(+), 14 deletions(-) create mode 100644 components/esp_system/stack_check.c diff --git a/components/esp_common/CMakeLists.txt b/components/esp_common/CMakeLists.txt index 474ddfba8d..4bb2fcbb97 100644 --- a/components/esp_common/CMakeLists.txt +++ b/components/esp_common/CMakeLists.txt @@ -11,8 +11,7 @@ else() # Regular app build list(APPEND srcs "src/esp_err.c" "src/esp_err_to_name.c" - "src/freertos_hooks.c" - "src/stack_check.c") + "src/freertos_hooks.c") # Note: esp_ipc, esp_pm added as a public requirement to keep compatibility as to be located here. idf_component_register(SRCS "${srcs}" @@ -21,11 +20,6 @@ else() PRIV_REQUIRES soc LDFRAGMENTS "linker.lf") - set_source_files_properties( - "src/stack_check.c" - PROPERTIES COMPILE_FLAGS - -fno-stack-protector) - set_property(TARGET ${COMPONENT_LIB} APPEND PROPERTY LINK_LIBRARIES "-Wl,--gc-sections") set_property(TARGET ${COMPONENT_LIB} APPEND PROPERTY INTERFACE_LINK_LIBRARIES "-Wl,--gc-sections") set_property(TARGET ${COMPONENT_LIB} APPEND PROPERTY LINK_INTERFACE_MULTIPLICITY 4) diff --git a/components/esp_common/component.mk b/components/esp_common/component.mk index da494c4b94..01fc42388a 100644 --- a/components/esp_common/component.mk +++ b/components/esp_common/component.mk @@ -4,10 +4,6 @@ COMPONENT_ADD_INCLUDEDIRS := include COMPONENT_SRCDIRS := src - ifndef CONFIG_IDF_ENV_FPGA COMPONENT_OBJEXCLUDE += src/fpga_overrides.o -endif - -# disable stack protection in files which are involved in initialization of that feature -src/stack_check.o: CFLAGS := $(filter-out -fstack-protector%, $(CFLAGS)) +endif \ No newline at end of file diff --git a/components/esp_system/CMakeLists.txt b/components/esp_system/CMakeLists.txt index 621eeaee2d..74a3fdb655 100644 --- a/components/esp_system/CMakeLists.txt +++ b/components/esp_system/CMakeLists.txt @@ -14,7 +14,8 @@ set(srcs "intr_alloc.c" "system_time.c" "sleep_modes.c" "task_wdt.c" - "int_wdt.c") + "int_wdt.c" + "stack_check.c") if(NOT (${target} STREQUAL "esp32c3") ) list(APPEND srcs "dbg_stubs.c") @@ -43,7 +44,7 @@ endif() # Disable stack protection in files which are involved in initialization of that feature set_source_files_properties( - startup.c + "startup.c" "stack_check.c" PROPERTIES COMPILE_FLAGS -fno-stack-protector) diff --git a/components/esp_system/stack_check.c b/components/esp_system/stack_check.c new file mode 100644 index 0000000000..cffff6555a --- /dev/null +++ b/components/esp_system/stack_check.c @@ -0,0 +1,40 @@ +// Copyright 2017 Espressif Systems (Shanghai) PTE LTD +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include "sdkconfig.h" +#include "esp_system.h" +#include "esp_rom_sys.h" + +#if CONFIG_COMPILER_STACK_CHECK + +#define LOG_LOCAL_LEVEL CONFIG_LOG_DEFAULT_LEVEL +#include "esp_log.h" +const static char *TAG = "stack_chk"; + +void *__stack_chk_guard = NULL; + +static void __attribute__ ((constructor)) +__esp_stack_guard_setup (void) +{ + ESP_LOGD(TAG, "Intialize random stack guard"); + __stack_chk_guard = (void *)esp_random(); +} + +void __stack_chk_fail (void) +{ + esp_rom_printf("\r\nStack smashing protect failure!\r\n\r\n"); + abort(); +} + +#endif