From 59f05be52524dfd896136803d8ef2903da1f4a18 Mon Sep 17 00:00:00 2001 From: zhaoxingyu1 Date: Fri, 4 Jul 2025 21:14:54 +0800 Subject: [PATCH] mtd_config/nvs: keep offset increasing during ate traversal Enhance the robustness of ATE traversal. Signed-off-by: zhaoxingyu1 --- drivers/mtd/mtd_config_nvs.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/drivers/mtd/mtd_config_nvs.c b/drivers/mtd/mtd_config_nvs.c index 2671560885d..5baa87ce858 100644 --- a/drivers/mtd/mtd_config_nvs.c +++ b/drivers/mtd/mtd_config_nvs.c @@ -717,7 +717,8 @@ static bool nvs_ate_valid(FAR struct nvs_fs *fs, FAR const struct nvs_ate *entry) { return nvs_ate_crc8_check(entry) && - entry->offset < (fs->blocksize - nvs_ate_size(fs)); + entry->offset < (fs->blocksize - nvs_ate_size(fs)) && + (entry->key_len > 0 || entry->id == nvs_special_ate_id(fs)); } /**************************************************************************** @@ -907,7 +908,8 @@ static int nvs_recover_last_ate(FAR struct nvs_fs *fs, return rc; } - if (nvs_ate_valid(fs, end_ate)) + if (nvs_ate_valid(fs, end_ate) && + end_ate->offset >= (data_end_addr & NVS_ADDR_OFFS_MASK)) { /* Found a valid ate, update data_end_addr and *addr */