1
0
mirror of https://github.com/trezor/trezor-firmware.git synced 2025-02-19 11:02:02 +00:00

core/embed: switch to unprivileged in main.c

This commit is contained in:
Pavol Rusnak 2020-01-24 08:59:57 +00:00
parent 7a2e0c3412
commit 3de1b3aa54
No known key found for this signature in database
GPG Key ID: 91F3B339B9A02A3D
8 changed files with 14 additions and 32 deletions

View File

@ -105,20 +105,6 @@ STATIC mp_obj_t mod_trezorutils_halt(size_t n_args, const mp_obj_t *args) {
STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(mod_trezorutils_halt_obj, 0, 1, STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(mod_trezorutils_halt_obj, 0, 1,
mod_trezorutils_halt); mod_trezorutils_halt);
/// def set_mode_unprivileged() -> None:
/// """
/// Set unprivileged mode.
/// """
STATIC mp_obj_t mod_trezorutils_set_mode_unprivileged(void) {
#ifndef TREZOR_EMULATOR
__asm__ volatile("msr control, %0" ::"r"(0x1));
__asm__ volatile("isb");
#endif
return mp_const_none;
}
STATIC MP_DEFINE_CONST_FUN_OBJ_0(mod_trezorutils_set_mode_unprivileged_obj,
mod_trezorutils_set_mode_unprivileged);
#define PASTER(s) MP_QSTR_##s #define PASTER(s) MP_QSTR_##s
#define MP_QSTR(s) PASTER(s) #define MP_QSTR(s) PASTER(s)
@ -134,8 +120,6 @@ STATIC const mp_rom_map_elem_t mp_module_trezorutils_globals_table[] = {
{MP_ROM_QSTR(MP_QSTR_consteq), MP_ROM_PTR(&mod_trezorutils_consteq_obj)}, {MP_ROM_QSTR(MP_QSTR_consteq), MP_ROM_PTR(&mod_trezorutils_consteq_obj)},
{MP_ROM_QSTR(MP_QSTR_memcpy), MP_ROM_PTR(&mod_trezorutils_memcpy_obj)}, {MP_ROM_QSTR(MP_QSTR_memcpy), MP_ROM_PTR(&mod_trezorutils_memcpy_obj)},
{MP_ROM_QSTR(MP_QSTR_halt), MP_ROM_PTR(&mod_trezorutils_halt_obj)}, {MP_ROM_QSTR(MP_QSTR_halt), MP_ROM_PTR(&mod_trezorutils_halt_obj)},
{MP_ROM_QSTR(MP_QSTR_set_mode_unprivileged),
MP_ROM_PTR(&mod_trezorutils_set_mode_unprivileged_obj)},
// various built-in constants // various built-in constants
{MP_ROM_QSTR(MP_QSTR_GITREV), MP_ROM_QSTR(MP_QSTR(GITREV))}, {MP_ROM_QSTR(MP_QSTR_GITREV), MP_ROM_QSTR(MP_QSTR(GITREV))},
{MP_ROM_QSTR(MP_QSTR_VERSION_MAJOR), MP_ROM_INT(VERSION_MAJOR)}, {MP_ROM_QSTR(MP_QSTR_VERSION_MAJOR), MP_ROM_INT(VERSION_MAJOR)},

View File

@ -75,6 +75,11 @@ int main(void) {
touch_init(); touch_init();
touch_power_on(); touch_power_on();
// jump to unprivileged mode
// http://infocenter.arm.com/help/topic/com.arm.doc.dui0552a/CHDBIBGJ.html
__asm__ volatile("msr control, %0" ::"r"(0x1));
__asm__ volatile("isb");
display_clear(); display_clear();
#endif #endif

View File

@ -168,4 +168,7 @@ void mpu_config_firmware(void) {
// Enable MPU // Enable MPU
HAL_MPU_Enable(LL_MPU_CTRL_HARDFAULT_NMI); HAL_MPU_Enable(LL_MPU_CTRL_HARDFAULT_NMI);
__asm__ volatile("dsb");
__asm__ volatile("isb");
} }

View File

@ -33,7 +33,7 @@ static inline void svc_setpriority(uint32_t IRQn, uint32_t priority) {
register uint32_t r0 __asm__("r0") = IRQn; register uint32_t r0 __asm__("r0") = IRQn;
register uint32_t r1 __asm__("r1") = priority; register uint32_t r1 __asm__("r1") = priority;
__asm__ __volatile__("svc %0" ::"i"(SVC_SET_PRIORITY), "r"(r0), "r"(r1) __asm__ __volatile__("svc %0" ::"i"(SVC_SET_PRIORITY), "r"(r0), "r"(r1)
: "memory"); : "memory");
} else { } else {
NVIC_SetPriority(IRQn, priority); NVIC_SetPriority(IRQn, priority);
} }

View File

@ -55,6 +55,7 @@
#include "usbd_core.h" #include "usbd_core.h"
#include "usb.h" #include "usb.h"
#include "irq.h" #include "irq.h"
#include "supervise.h"
/* Private typedef -----------------------------------------------------------*/ /* Private typedef -----------------------------------------------------------*/
/* Private define ------------------------------------------------------------*/ /* Private define ------------------------------------------------------------*/
@ -117,10 +118,10 @@ void HAL_PCD_MspInit(PCD_HandleTypeDef *hpcd)
__HAL_RCC_USB_OTG_FS_CLK_ENABLE(); __HAL_RCC_USB_OTG_FS_CLK_ENABLE();
/* Set USBFS Interrupt priority */ /* Set USBFS Interrupt priority */
NVIC_SetPriority(OTG_FS_IRQn, IRQ_PRI_OTG_FS); svc_setpriority(OTG_FS_IRQn, IRQ_PRI_OTG_FS);
/* Enable USBFS Interrupt */ /* Enable USBFS Interrupt */
HAL_NVIC_EnableIRQ(OTG_FS_IRQn); svc_enableIRQ(OTG_FS_IRQn);
} }
#if defined(USE_USB_HS) #if defined(USE_USB_HS)
else if(hpcd->Instance == USB_OTG_HS) else if(hpcd->Instance == USB_OTG_HS)
@ -226,10 +227,10 @@ void HAL_PCD_MspInit(PCD_HandleTypeDef *hpcd)
#endif // !USE_USB_HS_IN_FS #endif // !USE_USB_HS_IN_FS
/* Set USBHS Interrupt to the lowest priority */ /* Set USBHS Interrupt to the lowest priority */
NVIC_SetPriority(OTG_HS_IRQn, IRQ_PRI_OTG_HS); svc_setpriority(OTG_HS_IRQn, IRQ_PRI_OTG_HS);
/* Enable USBHS Interrupt */ /* Enable USBHS Interrupt */
HAL_NVIC_EnableIRQ(OTG_HS_IRQn); svc_enableIRQ(OTG_HS_IRQn);
} }
#endif // USE_USB_HS #endif // USE_USB_HS
} }

View File

@ -27,13 +27,6 @@ def halt(msg: str = None) -> None:
""" """
Halts execution. Halts execution.
""" """
# extmod/modtrezorutils/modtrezorutils.c
def set_mode_unprivileged() -> None:
"""
Set unprivileged mode.
"""
GITREV: str GITREV: str
VERSION_MAJOR: int VERSION_MAJOR: int
VERSION_MINOR: int VERSION_MINOR: int

View File

@ -12,9 +12,6 @@ from trezor import loop, utils, wire, workflow
# start the USB # start the USB
usb.bus.open() usb.bus.open()
# switch into unprivileged mode, as we don't need the extra permissions anymore
utils.set_mode_unprivileged()
def _boot_apps() -> None: def _boot_apps() -> None:
# load applications # load applications

View File

@ -11,7 +11,6 @@ from trezorutils import ( # type: ignore[attr-defined] # noqa: F401
consteq, consteq,
halt, halt,
memcpy, memcpy,
set_mode_unprivileged,
) )
DISABLE_ANIMATION = 0 DISABLE_ANIMATION = 0