diff --git a/core/embed/trezorhal/stm32f4/translations.c b/core/embed/trezorhal/stm32f4/translations.c index 03b044796..d01debbf4 100644 --- a/core/embed/trezorhal/stm32f4/translations.c +++ b/core/embed/trezorhal/stm32f4/translations.c @@ -1,12 +1,17 @@ #include "translations.h" #include +#include #include #include "common.h" #include "flash.h" #include "model.h" -void translations_write(const uint8_t* data, uint32_t offset, uint32_t len) { - // TODO maybe return errors from here? +bool translations_write(const uint8_t* data, uint32_t offset, uint32_t len) { + uint32_t size = translations_area_bytesize(); + if (offset > size || size - offset < len) { + return false; + } + ensure(flash_unlock_write(), "translations_write unlock"); for (int i = 0; i < len; i++) { // TODO optimize by writing by (quad)words @@ -14,6 +19,7 @@ void translations_write(const uint8_t* data, uint32_t offset, uint32_t len) { "translations_write write"); } ensure(flash_lock_write(), "translations_write lock"); + return true; } const uint8_t* translations_read(uint32_t* len, uint32_t offset) { diff --git a/core/embed/trezorhal/translations.h b/core/embed/trezorhal/translations.h index d3d07590f..6fede56ce 100644 --- a/core/embed/trezorhal/translations.h +++ b/core/embed/trezorhal/translations.h @@ -1,6 +1,7 @@ +#include #include -void translations_write(const uint8_t* data, uint32_t offset, uint32_t len); +bool translations_write(const uint8_t* data, uint32_t offset, uint32_t len); const uint8_t* translations_read(uint32_t* len, uint32_t offset);