Răsfoiți Sursa

ble_mesh: Fix mesh memory use-after-free issue

lly 6 ani în urmă
părinte
comite
7cf29e0f3f
1 a modificat fișierele cu 10 adăugiri și 12 ștergeri
  1. 10 12
      components/bt/esp_ble_mesh/mesh_core/adv.c

+ 10 - 12
components/bt/esp_ble_mesh/mesh_core/adv.c

@@ -770,7 +770,7 @@ void bt_mesh_adv_init(void)
     __ASSERT(adv_task.stack, "%s, Failed to create adv thread stack", __func__);
     adv_task.handle = xTaskCreateStaticPinnedToCore(adv_thread, "BLE_Mesh_ADV_Task", BLE_MESH_ADV_TASK_STACK_SIZE, NULL,
                                   configMAX_PRIORITIES - 5, adv_task.stack, adv_task.task, BLE_MESH_ADV_TASK_CORE);
-    __ASSERT(adv_task.stack, "%s, Failed to create static adv thread stack", __func__);
+    __ASSERT(adv_task.handle, "%s, Failed to create static adv thread", __func__);
 #endif
 }
 
@@ -780,6 +780,15 @@ void bt_mesh_adv_deinit(void)
         return;
     }
 
+    vTaskDelete(adv_task.handle);
+    adv_task.handle = NULL;
+#if CONFIG_SPIRAM_USE_MALLOC
+    heap_caps_free(adv_task.stack);
+    adv_task.stack = NULL;
+    heap_caps_free(adv_task.task);
+    adv_task.task = NULL;
+#endif
+
 #if defined(CONFIG_BLE_MESH_RELAY_ADV_BUF)
     xQueueRemoveFromSet(xBleMeshQueue.queue, xBleMeshQueueSet);
     xQueueRemoveFromSet(xBleMeshRelayQueue.queue, xBleMeshQueueSet);
@@ -811,17 +820,6 @@ void bt_mesh_adv_deinit(void)
 
     bt_mesh_unref_buf_from_pool(&adv_buf_pool);
     memset(adv_pool, 0, sizeof(adv_pool));
-
-    vTaskDelete(adv_task.handle);
-    adv_task.handle = NULL;
-#if CONFIG_SPIRAM_USE_MALLOC
-    heap_caps_free(adv_task.stack);
-    adv_task.stack = NULL;
-    /* Delay certain period for free adv_task.task */
-    vTaskDelay(10 / portTICK_PERIOD_MS);
-    heap_caps_free(adv_task.task);
-    adv_task.task = NULL;
-#endif
 }
 
 int bt_mesh_scan_enable(void)