File tree Expand file tree Collapse file tree 1 file changed +15
-2
lines changed Expand file tree Collapse file tree 1 file changed +15
-2
lines changed Original file line number Diff line number Diff line change @@ -42,12 +42,17 @@ static File openWrite(FILESYSTEM* fs, const char* filename) {
4242#endif
4343}
4444
45+ #if defined(NRF52_PLATFORM) || defined(STM32_PLATFORM)
46+ static uint32_t _ContactsChannelsTotalBlocks = 0 ;
47+ #endif
48+
4549void DataStore::begin () {
4650#if defined(RP2040_PLATFORM)
4751 identity_store.begin ();
4852#endif
4953
5054#if defined(NRF52_PLATFORM) || defined(STM32_PLATFORM)
55+ _ContactsChannelsTotalBlocks = _getContactsChannelsFS ()->_getFS ()->cfg ->block_count ;
5156 checkAdvBlobFile ();
5257 #if defined(EXTRAFS) || defined(QSPIFLASH)
5358 migrateToSecondaryFS ();
@@ -74,14 +79,22 @@ void DataStore::begin() {
7479
7580#if defined(NRF52_PLATFORM) || defined(STM32_PLATFORM)
7681int _countLfsBlock (void *p, lfs_block_t block){
82+ if (block > _ContactsChannelsTotalBlocks) {
83+ MESH_DEBUG_PRINTLN (" ERROR: Block %d exceeds filesystem bounds - CORRUPTION DETECTED!" , block);
84+ return LFS_ERR_CORRUPT; // return error to abort lfs_traverse() gracefully
85+ }
7786 lfs_size_t *size = (lfs_size_t *) p;
7887 *size += 1 ;
79- return 0 ;
88+ return 0 ;
8089}
8190
8291lfs_ssize_t _getLfsUsedBlockCount (FILESYSTEM* fs) {
8392 lfs_size_t size = 0 ;
84- lfs_traverse (fs->_getFS (), _countLfsBlock, &size);
93+ int err = lfs_traverse (fs->_getFS (), _countLfsBlock, &size);
94+ if (err) {
95+ MESH_DEBUG_PRINTLN (" ERROR: lfs_traverse() error: %d" , err);
96+ return 0 ;
97+ }
8598 return size;
8699}
87100#endif
You can’t perform that action at this time.
0 commit comments