mirror of
https://github.com/trezor/trezor-firmware.git
synced 2025-01-10 15:30:55 +00:00
embed: norcow_init, storage_init and flash_init don't return secbool, they halt using ensure if something goes wrong
This commit is contained in:
parent
6b94fd26e4
commit
6ab0f03ec4
@ -20,9 +20,7 @@
|
|||||||
/// called from this module!
|
/// called from this module!
|
||||||
/// '''
|
/// '''
|
||||||
STATIC mp_obj_t mod_trezorconfig_init(void) {
|
STATIC mp_obj_t mod_trezorconfig_init(void) {
|
||||||
if (sectrue != storage_init()) {
|
storage_init();
|
||||||
mp_raise_msg(&mp_type_RuntimeError, "Could not initialize config module");
|
|
||||||
}
|
|
||||||
return mp_const_none;
|
return mp_const_none;
|
||||||
}
|
}
|
||||||
STATIC MP_DEFINE_CONST_FUN_OBJ_0(mod_trezorconfig_init_obj, mod_trezorconfig_init);
|
STATIC MP_DEFINE_CONST_FUN_OBJ_0(mod_trezorconfig_init_obj, mod_trezorconfig_init);
|
||||||
|
@ -220,7 +220,7 @@ static void compact()
|
|||||||
/*
|
/*
|
||||||
* Initializes storage
|
* Initializes storage
|
||||||
*/
|
*/
|
||||||
secbool norcow_init(void)
|
void norcow_init(void)
|
||||||
{
|
{
|
||||||
secbool found = secfalse;
|
secbool found = secfalse;
|
||||||
// detect active sector - starts with magic
|
// detect active sector - starts with magic
|
||||||
@ -236,17 +236,14 @@ secbool norcow_init(void)
|
|||||||
if (sectrue == found) {
|
if (sectrue == found) {
|
||||||
norcow_active_offset = find_free_offset(norcow_active_sector);
|
norcow_active_offset = find_free_offset(norcow_active_sector);
|
||||||
} else {
|
} else {
|
||||||
if (sectrue != norcow_wipe()) {
|
norcow_wipe();
|
||||||
return secfalse;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return sectrue;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Wipe the storage
|
* Wipe the storage
|
||||||
*/
|
*/
|
||||||
secbool norcow_wipe(void)
|
void norcow_wipe(void)
|
||||||
{
|
{
|
||||||
norcow_erase(0, sectrue);
|
norcow_erase(0, sectrue);
|
||||||
for (uint8_t i = 1; i < NORCOW_SECTOR_COUNT; i++) {
|
for (uint8_t i = 1; i < NORCOW_SECTOR_COUNT; i++) {
|
||||||
@ -254,7 +251,6 @@ secbool norcow_wipe(void)
|
|||||||
}
|
}
|
||||||
norcow_active_sector = 0;
|
norcow_active_sector = 0;
|
||||||
norcow_active_offset = NORCOW_MAGIC_LEN;
|
norcow_active_offset = NORCOW_MAGIC_LEN;
|
||||||
return sectrue;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -14,12 +14,12 @@
|
|||||||
/*
|
/*
|
||||||
* Initialize storage
|
* Initialize storage
|
||||||
*/
|
*/
|
||||||
secbool norcow_init(void);
|
void norcow_init(void);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Wipe the storage
|
* Wipe the storage
|
||||||
*/
|
*/
|
||||||
secbool norcow_wipe(void);
|
void norcow_wipe(void);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Looks for the given key, returns status of the operation
|
* Looks for the given key, returns status of the operation
|
||||||
|
@ -26,18 +26,13 @@
|
|||||||
static secbool initialized = secfalse;
|
static secbool initialized = secfalse;
|
||||||
static secbool unlocked = secfalse;
|
static secbool unlocked = secfalse;
|
||||||
|
|
||||||
secbool storage_init(void)
|
void storage_init(void)
|
||||||
{
|
{
|
||||||
initialized = secfalse;
|
initialized = secfalse;
|
||||||
unlocked = secfalse;
|
unlocked = secfalse;
|
||||||
if (sectrue != flash_init()) {
|
flash_init();
|
||||||
return secfalse;
|
norcow_init();
|
||||||
}
|
|
||||||
if (sectrue != norcow_init()) {
|
|
||||||
return secfalse;
|
|
||||||
}
|
|
||||||
initialized = sectrue;
|
initialized = sectrue;
|
||||||
return sectrue;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void pin_fails_reset(uint32_t ofs)
|
static void pin_fails_reset(uint32_t ofs)
|
||||||
@ -84,11 +79,7 @@ static secbool pin_fails_increase(uint32_t ofs)
|
|||||||
static void pin_fails_check_max(uint32_t ctr)
|
static void pin_fails_check_max(uint32_t ctr)
|
||||||
{
|
{
|
||||||
if (~ctr >= 1 << PIN_MAX_TRIES) {
|
if (~ctr >= 1 << PIN_MAX_TRIES) {
|
||||||
for (;;) {
|
norcow_wipe();
|
||||||
if (norcow_wipe()) {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
ensure(secfalse, "pin_fails_check_max");
|
ensure(secfalse, "pin_fails_check_max");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -209,7 +200,7 @@ secbool storage_change_pin(const uint8_t *pin, size_t len, const uint8_t *newpin
|
|||||||
return norcow_set(PIN_KEY, newpin, newlen);
|
return norcow_set(PIN_KEY, newpin, newlen);
|
||||||
}
|
}
|
||||||
|
|
||||||
secbool storage_wipe(void)
|
void storage_wipe(void)
|
||||||
{
|
{
|
||||||
return norcow_wipe();
|
norcow_wipe();
|
||||||
}
|
}
|
||||||
|
@ -9,7 +9,7 @@
|
|||||||
#include <stddef.h>
|
#include <stddef.h>
|
||||||
#include "../../trezorhal/secbool.h"
|
#include "../../trezorhal/secbool.h"
|
||||||
|
|
||||||
secbool storage_init(void);
|
void storage_init(void);
|
||||||
secbool storage_wipe(void);
|
secbool storage_wipe(void);
|
||||||
secbool storage_unlock(const uint8_t *pin, size_t len);
|
secbool storage_unlock(const uint8_t *pin, size_t len);
|
||||||
secbool storage_has_pin(void);
|
secbool storage_has_pin(void);
|
||||||
|
@ -41,9 +41,8 @@ static const uint32_t FLASH_SECTOR_TABLE[FLASH_SECTOR_COUNT + 1] = {
|
|||||||
[24] = 0x08200000, // last element - not a valid sector
|
[24] = 0x08200000, // last element - not a valid sector
|
||||||
};
|
};
|
||||||
|
|
||||||
secbool flash_init(void)
|
void flash_init(void)
|
||||||
{
|
{
|
||||||
return sectrue;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
secbool flash_unlock(void)
|
secbool flash_unlock(void)
|
||||||
|
@ -43,7 +43,7 @@
|
|||||||
// note: FLASH_SR_RDERR is STM32F42xxx and STM32F43xxx specific (STM32F427) (reference RM0090 section 3.7.5)
|
// note: FLASH_SR_RDERR is STM32F42xxx and STM32F43xxx specific (STM32F427) (reference RM0090 section 3.7.5)
|
||||||
#define FLASH_STATUS_ALL_FLAGS (FLASH_SR_RDERR | FLASH_SR_PGSERR | FLASH_SR_PGPERR | FLASH_SR_PGAERR | FLASH_SR_WRPERR | FLASH_SR_SOP | FLASH_SR_EOP)
|
#define FLASH_STATUS_ALL_FLAGS (FLASH_SR_RDERR | FLASH_SR_PGSERR | FLASH_SR_PGPERR | FLASH_SR_PGAERR | FLASH_SR_WRPERR | FLASH_SR_SOP | FLASH_SR_EOP)
|
||||||
|
|
||||||
secbool flash_init(void);
|
void flash_init(void);
|
||||||
|
|
||||||
secbool flash_unlock(void);
|
secbool flash_unlock(void);
|
||||||
secbool flash_lock(void);
|
secbool flash_lock(void);
|
||||||
|
@ -60,7 +60,7 @@ static void flash_exit(void)
|
|||||||
ensure(sectrue * (r == 0), "munmap failed");
|
ensure(sectrue * (r == 0), "munmap failed");
|
||||||
}
|
}
|
||||||
|
|
||||||
secbool flash_init(void)
|
void flash_init(void)
|
||||||
{
|
{
|
||||||
int r;
|
int r;
|
||||||
|
|
||||||
@ -90,8 +90,6 @@ secbool flash_init(void)
|
|||||||
flash_buffer = (uint8_t *)map;
|
flash_buffer = (uint8_t *)map;
|
||||||
|
|
||||||
atexit(flash_exit);
|
atexit(flash_exit);
|
||||||
|
|
||||||
return sectrue;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
secbool flash_unlock(void)
|
secbool flash_unlock(void)
|
||||||
|
Loading…
Reference in New Issue
Block a user