mirror of
https://github.com/espressif/esp-idf.git
synced 2026-10-03 03:31:41 +03:00
fix(cpu_region_protect): set DROM mask PMP entry to read-only
PMP entry 3 (SOC_DROM_MASK_HIGH, TOR mode) in the memprot path was incorrectly granted RW permission on esp32h21 and esp32c61. The mask ROM data region is inherently read-only; remove the W bit. Also added necessary tests to check voilations and re-enabled tests for ESP32P4
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* SPDX-FileCopyrightText: 2023-2025 Espressif Systems (Shanghai) CO LTD
|
||||
* SPDX-FileCopyrightText: 2023-2026 Espressif Systems (Shanghai) CO LTD
|
||||
*
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
@@ -63,6 +63,12 @@ void test_spiram_xip_irom_alignment_reg_execute_violation(void);
|
||||
|
||||
void test_spiram_xip_drom_alignment_reg_execute_violation(void);
|
||||
|
||||
void test_irom_mask_reg_write_violation(void);
|
||||
|
||||
#ifdef SOC_DROM_MASK_HIGH
|
||||
void test_drom_mask_reg_write_violation(void);
|
||||
#endif
|
||||
|
||||
void test_drom_reg_write_violation(void);
|
||||
|
||||
void test_drom_reg_execute_violation(void);
|
||||
|
||||
@@ -188,6 +188,10 @@ void app_main(void)
|
||||
|
||||
#if CONFIG_ESP_SYSTEM_MEMPROT
|
||||
HANDLE_TEST(test_name, test_irom_reg_write_violation);
|
||||
HANDLE_TEST(test_name, test_irom_mask_reg_write_violation);
|
||||
#ifdef SOC_DROM_MASK_HIGH
|
||||
HANDLE_TEST(test_name, test_drom_mask_reg_write_violation);
|
||||
#endif
|
||||
HANDLE_TEST(test_name, test_drom_reg_write_violation);
|
||||
HANDLE_TEST(test_name, test_drom_reg_execute_violation);
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* SPDX-FileCopyrightText: 2021-2025 Espressif Systems (Shanghai) CO LTD
|
||||
* SPDX-FileCopyrightText: 2021-2026 Espressif Systems (Shanghai) CO LTD
|
||||
*
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
@@ -299,6 +299,23 @@ void test_irom_reg_write_violation(void)
|
||||
*test_addr = RND_VAL;
|
||||
}
|
||||
|
||||
void test_irom_mask_reg_write_violation(void)
|
||||
{
|
||||
uint32_t *test_addr = (uint32_t *)(SOC_IROM_MASK_LOW + 0x04);
|
||||
printf("ROM (IROM Mask): Write operation | Address: %p\n", test_addr);
|
||||
*test_addr = RND_VAL;
|
||||
}
|
||||
|
||||
#ifdef SOC_DROM_MASK_HIGH
|
||||
void test_drom_mask_reg_write_violation(void)
|
||||
{
|
||||
uint32_t *test_addr = (uint32_t *)(SOC_DROM_MASK_HIGH - 0x04);
|
||||
printf("ROM (DROM Mask): Write operation | Address: %p\n", test_addr);
|
||||
*test_addr = RND_VAL;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
void test_drom_reg_write_violation(void)
|
||||
{
|
||||
uint32_t *test_addr = (uint32_t *)((uint32_t)(foo_buf));
|
||||
|
||||
Reference in New Issue
Block a user