mirror of
https://github.com/eledio-devices/thirdparty-littlefs.git
synced 2025-11-01 16:14:13 +01:00
Fixed issue with corruption due to different cache sizes
The lfs_cache_zero function that was recently added assumed a single cache size, which is incorrect. This would cause a buffer overflow if read_size != prog_size. Since lfs_cache_zero is only used for scrubbing prog caches, the fix here is to use lfs_cache_drop instead on read caches. Info in read caches should never make its way to disk. Found by nstcl
This commit is contained in:
5
lfs.c
5
lfs.c
@@ -1373,7 +1373,10 @@ int lfs_file_opencfg(lfs_t *lfs, lfs_file_t *file,
|
|||||||
}
|
}
|
||||||
|
|
||||||
// zero to avoid information leak
|
// zero to avoid information leak
|
||||||
|
lfs_cache_drop(lfs, &file->cache);
|
||||||
|
if ((file->flags & 3) != LFS_O_RDONLY) {
|
||||||
lfs_cache_zero(lfs, &file->cache);
|
lfs_cache_zero(lfs, &file->cache);
|
||||||
|
}
|
||||||
|
|
||||||
// add to list of files
|
// add to list of files
|
||||||
file->next = lfs->files;
|
file->next = lfs->files;
|
||||||
@@ -2055,8 +2058,8 @@ static int lfs_init(lfs_t *lfs, const struct lfs_config *cfg) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// zero to avoid information leaks
|
// zero to avoid information leaks
|
||||||
lfs_cache_zero(lfs, &lfs->rcache);
|
|
||||||
lfs_cache_zero(lfs, &lfs->pcache);
|
lfs_cache_zero(lfs, &lfs->pcache);
|
||||||
|
lfs_cache_drop(lfs, &lfs->rcache);
|
||||||
|
|
||||||
// setup lookahead, round down to nearest 32-bits
|
// setup lookahead, round down to nearest 32-bits
|
||||||
LFS_ASSERT(lfs->cfg->lookahead % 32 == 0);
|
LFS_ASSERT(lfs->cfg->lookahead % 32 == 0);
|
||||||
|
|||||||
Reference in New Issue
Block a user