diff --git a/components/heap/.build-test-rules.yml b/components/heap/.build-test-rules.yml index 90a31dbc77..ee02ab85e3 100644 --- a/components/heap/.build-test-rules.yml +++ b/components/heap/.build-test-rules.yml @@ -3,8 +3,3 @@ components/heap/host_test/host_test_linux: enable: - if: IDF_TARGET == "linux" -components/heap/test_apps: - disable_test: - - if: IDF_TARGET == "esp32c6" - temporary: true - reason: target esp32c6 is not supported yet diff --git a/components/heap/test_apps/main/test_malloc_caps.c b/components/heap/test_apps/main/test_malloc_caps.c index 7a925dca49..b4943e3d79 100644 --- a/components/heap/test_apps/main/test_malloc_caps.c +++ b/components/heap/test_apps/main/test_malloc_caps.c @@ -278,3 +278,23 @@ TEST_CASE("RTC memory shoule be lowest priority and its free size should be big free(ptr); } #endif + +TEST_CASE("test memory protection features", "[heap][mem_prot]") +{ + // try to allocate memory in IRAM and check that if memory protection is active, + // no memory is being allocated + uint32_t *iram_ptr = heap_caps_malloc(4, MALLOC_CAP_EXEC); + +#ifndef CONFIG_ESP_SYSTEM_MEMPROT_FEATURE + // System memory protection not active, check that iram_ptr is not null + // Check that iram_ptr is in IRAM + TEST_ASSERT_NOT_NULL(iram_ptr); + TEST_ASSERT(true == esp_ptr_in_iram(iram_ptr)); + + // free the memory + heap_caps_free(iram_ptr); +#else + // System memory protection is active, DIRAM seen as DRAM, iram_ptr should be null + TEST_ASSERT_NULL(iram_ptr); +#endif // CONFIG_ESP_SYSTEM_MEMPROT_FEATURE +} diff --git a/components/heap/test_apps/pytest_heap.py b/components/heap/test_apps/pytest_heap.py index 1ccc46f047..a6f6007461 100644 --- a/components/heap/test_apps/pytest_heap.py +++ b/components/heap/test_apps/pytest_heap.py @@ -1,4 +1,4 @@ -# SPDX-FileCopyrightText: 2022 Espressif Systems (Shanghai) CO LTD +# SPDX-FileCopyrightText: 2022-2023 Espressif Systems (Shanghai) CO LTD # SPDX-License-Identifier: CC0-1.0 import pytest @@ -92,3 +92,18 @@ def test_heap_trace_dump(dut: Dut) -> None: dut.expect_exact('Enter next test, or \'enter\' to see menu') dut.write('[heap-trace]') dut.expect_unity_test_output(timeout=100) + + +@pytest.mark.generic +@pytest.mark.supported_targets +@pytest.mark.temp_skip_ci(targets=['esp32c3', 'esp32s3'], reason='test failed') +@pytest.mark.parametrize( + 'config', + [ + 'mem_prot' + ] +) +def test_memory_protection(dut: Dut) -> None: + dut.expect_exact('Press ENTER to see the list of tests') + dut.write('[heap][mem_prot]') + dut.expect_unity_test_output(timeout=300) diff --git a/components/heap/test_apps/sdkconfig.ci.mem_prot b/components/heap/test_apps/sdkconfig.ci.mem_prot new file mode 100644 index 0000000000..b6ef908834 --- /dev/null +++ b/components/heap/test_apps/sdkconfig.ci.mem_prot @@ -0,0 +1 @@ +CONFIG_ESP_SYSTEM_MEMPROT_FEATURE=y