Explorar o código

spi_flash: fix memory leak when spi_flash_mmap arguments are invalid

Check src_addr and size first, then allocate new_entry.
Ivan Grokhotkov %!s(int64=9) %!d(string=hai) anos
pai
achega
f3687f7177
Modificáronse 1 ficheiros con 4 adicións e 4 borrados
  1. 4 4
      components/spi_flash/flash_mmap.c

+ 4 - 4
components/spi_flash/flash_mmap.c

@@ -93,16 +93,16 @@ esp_err_t IRAM_ATTR spi_flash_mmap(size_t src_addr, size_t size, spi_flash_mmap_
 {
     esp_err_t ret;
     bool did_flush, need_flush = false;
-    mmap_entry_t* new_entry = (mmap_entry_t*) malloc(sizeof(mmap_entry_t));
-    if (new_entry == 0) {
-        return ESP_ERR_NO_MEM;
-    }
     if (src_addr & 0xffff) {
         return ESP_ERR_INVALID_ARG;
     }
     if (src_addr + size > g_rom_flashchip.chip_size) {
         return ESP_ERR_INVALID_ARG;
     }
+    mmap_entry_t* new_entry = (mmap_entry_t*) malloc(sizeof(mmap_entry_t));
+    if (new_entry == 0) {
+        return ESP_ERR_NO_MEM;
+    }
 
     spi_flash_disable_interrupts_caches_and_other_cpu();