mirror of
https://github.com/trezor/trezor-firmware.git
synced 2025-02-22 20:42:03 +00:00
bootloader: guard signatures_ok calls with firmware_present (or !brand_new_firmware)
This commit is contained in:
parent
816b4e0f72
commit
dbe444029a
@ -40,6 +40,8 @@ static const uint8_t * const pubkey[PUBKEYS] = {
|
|||||||
|
|
||||||
int signatures_ok(uint8_t *store_hash)
|
int signatures_ok(uint8_t *store_hash)
|
||||||
{
|
{
|
||||||
|
if (!firmware_present()) return SIG_FAIL; // no firmware present
|
||||||
|
|
||||||
const uint32_t codelen = *((const uint32_t *)FLASH_META_CODELEN);
|
const uint32_t codelen = *((const uint32_t *)FLASH_META_CODELEN);
|
||||||
const uint8_t sigindex1 = *((const uint8_t *)FLASH_META_SIGINDEX1);
|
const uint8_t sigindex1 = *((const uint8_t *)FLASH_META_SIGINDEX1);
|
||||||
const uint8_t sigindex2 = *((const uint8_t *)FLASH_META_SIGINDEX2);
|
const uint8_t sigindex2 = *((const uint8_t *)FLASH_META_SIGINDEX2);
|
||||||
|
@ -476,7 +476,7 @@ static void hid_rx_callback(usbd_device *dev, uint8_t ep)
|
|||||||
}
|
}
|
||||||
if (brand_new_firmware || button.YesUp) {
|
if (brand_new_firmware || button.YesUp) {
|
||||||
// check whether current firmware is signed
|
// check whether current firmware is signed
|
||||||
if (SIG_OK == signatures_ok(NULL)) {
|
if (!brand_new_firmware && SIG_OK == signatures_ok(NULL)) {
|
||||||
old_was_unsigned = false;
|
old_was_unsigned = false;
|
||||||
// backup metadata
|
// backup metadata
|
||||||
backup_metadata(meta_backup);
|
backup_metadata(meta_backup);
|
||||||
@ -632,10 +632,11 @@ static void hid_rx_callback(usbd_device *dev, uint8_t ep)
|
|||||||
layoutProgress("INSTALLING ... Please wait", 1000);
|
layoutProgress("INSTALLING ... Please wait", 1000);
|
||||||
uint8_t flags = *((uint8_t *)FLASH_META_FLAGS);
|
uint8_t flags = *((uint8_t *)FLASH_META_FLAGS);
|
||||||
// wipe storage if:
|
// wipe storage if:
|
||||||
|
// 0) there was no firmware
|
||||||
// 1) old firmware was unsigned
|
// 1) old firmware was unsigned
|
||||||
// 2) firmware restore flag isn't set
|
// 2) firmware restore flag isn't set
|
||||||
// 3) signatures are not ok
|
// 3) signatures are not ok
|
||||||
if (old_was_unsigned || (flags & 0x01) == 0 || SIG_OK != signatures_ok(NULL)) {
|
if (brand_new_firmware || old_was_unsigned || (flags & 0x01) == 0 || SIG_OK != signatures_ok(NULL)) {
|
||||||
memzero(meta_backup, sizeof(meta_backup));
|
memzero(meta_backup, sizeof(meta_backup));
|
||||||
}
|
}
|
||||||
// copy new firmware header
|
// copy new firmware header
|
||||||
|
Loading…
Reference in New Issue
Block a user