This is an automated email from the ASF dual-hosted git repository.

xiaoxiang pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/nuttx.git

commit 59f05be52524dfd896136803d8ef2903da1f4a18
Author: zhaoxingyu1 <[email protected]>
AuthorDate: Fri Jul 4 21:14:54 2025 +0800

    mtd_config/nvs: keep offset increasing during ate traversal
    
    Enhance the robustness of ATE traversal.
    
    Signed-off-by: zhaoxingyu1 <[email protected]>
---
 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 */
 

Reply via email to