From 9a718b92b99f7e85024f269cdc22b5ca476d2cfc Mon Sep 17 00:00:00 2001 From: matejcik Date: Thu, 25 Jan 2024 13:03:31 +0100 Subject: [PATCH] WIP - C side verification of write validity --- core/embed/trezorhal/stm32f4/translations.c | 10 ++++++++-- core/embed/trezorhal/translations.h | 3 ++- 2 files changed, 10 insertions(+), 3 deletions(-) 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);