mirror of
https://github.com/espressif/esp-idf.git
synced 2026-10-02 03:00:34 +03:00
fix(nvs_flash): erase handle before delete on deinit
This commit is contained in:
@@ -85,10 +85,11 @@ static esp_err_t close_handles_and_deinit(const char* part_name)
|
|||||||
|
|
||||||
auto it = find_if(begin(s_nvs_handles), end(s_nvs_handles), belongs_to_part);
|
auto it = find_if(begin(s_nvs_handles), end(s_nvs_handles), belongs_to_part);
|
||||||
|
|
||||||
// Same as nvs_close(): erase from the list and delete the entry (frees NVSHandleSimple).
|
// Same as nvs_close(): unlink first, then delete. Deleting while still linked
|
||||||
|
// UAF-corrupts the intrusive list (hangs host tests).
|
||||||
while (it != end(s_nvs_handles)) {
|
while (it != end(s_nvs_handles)) {
|
||||||
delete static_cast<NVSHandleEntry*>(it);
|
|
||||||
s_nvs_handles.erase(it);
|
s_nvs_handles.erase(it);
|
||||||
|
delete static_cast<NVSHandleEntry*>(it);
|
||||||
it = find_if(begin(s_nvs_handles), end(s_nvs_handles), belongs_to_part);
|
it = find_if(begin(s_nvs_handles), end(s_nvs_handles), belongs_to_part);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user