1
0
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:
Pavol Rusnak 2017-12-09 14:48:49 +01:00
parent 6b94fd26e4
commit 6ab0f03ec4
No known key found for this signature in database
GPG Key ID: 91F3B339B9A02A3D
8 changed files with 16 additions and 34 deletions

View File

@ -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);

View File

@ -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;
} }
/* /*

View File

@ -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

View File

@ -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();
} }

View File

@ -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);

View File

@ -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)

View File

@ -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);

View File

@ -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)