Fix flash bounds check

This commit is contained in:
Kevin Thomas
2026-05-09 16:40:32 -04:00
parent 81a746346c
commit 8edeec2bd7
4 changed files with 42 additions and 12 deletions
+12
View File
@@ -34,6 +34,12 @@
#include "pico/stdlib.h"
void flash_driver_write(uint32_t flash_offset, const uint8_t *data, uint32_t len) {
if (data == NULL || flash_offset >= FLASH_DRIVER_SIZE_BYTES) {
return;
}
if (len > FLASH_DRIVER_SIZE_BYTES - flash_offset) {
len = FLASH_DRIVER_SIZE_BYTES - flash_offset;
}
uint32_t ints = save_and_disable_interrupts();
flash_range_erase(flash_offset, FLASH_SECTOR_SIZE);
flash_range_program(flash_offset, data, len);
@@ -41,6 +47,12 @@ void flash_driver_write(uint32_t flash_offset, const uint8_t *data, uint32_t len
}
void flash_driver_read(uint32_t flash_offset, uint8_t *out, uint32_t len) {
if (out == NULL || flash_offset >= FLASH_DRIVER_SIZE_BYTES) {
return;
}
if (len > FLASH_DRIVER_SIZE_BYTES - flash_offset) {
len = FLASH_DRIVER_SIZE_BYTES - flash_offset;
}
const uint8_t *flash_target_contents = (const uint8_t *)(XIP_BASE + flash_offset);
memcpy(out, flash_target_contents, len);
}