Harden cleanup and reduce internal RAM use. Phase 8C nearly validated
and somewhat stable.
This commit is contained in:
+15
-3
@@ -89,6 +89,7 @@ static uint32_t s_external_close_id[SSH_TRANSPORT_MAX_SESSIONS];
|
||||
static ssh_transport_counters_t s_counters;
|
||||
static SemaphoreHandle_t s_command_mutex;
|
||||
static bool s_initializing;
|
||||
static bool s_init_faulted;
|
||||
static bool s_initialized;
|
||||
static bool s_running;
|
||||
static bool s_transitioning;
|
||||
@@ -1294,20 +1295,29 @@ esp_err_t ssh_transport_init(void)
|
||||
taskEXIT_CRITICAL(&s_lock);
|
||||
return ESP_OK;
|
||||
}
|
||||
if (s_initializing) {
|
||||
if (s_initializing || s_init_faulted) {
|
||||
taskEXIT_CRITICAL(&s_lock);
|
||||
return ESP_ERR_INVALID_STATE;
|
||||
}
|
||||
s_initializing = true;
|
||||
taskEXIT_CRITICAL(&s_lock);
|
||||
|
||||
bool wolfssh_initialized = false;
|
||||
esp_err_t error = secure_random_init();
|
||||
if (error != ESP_OK) {
|
||||
error = ESP_ERR_INVALID_STATE;
|
||||
goto fail;
|
||||
}
|
||||
if (wolfSSL_SetAllocators(ssh_malloc, ssh_free, ssh_realloc) != 0 ||
|
||||
wolfSSH_Init() != WS_SUCCESS || wc_SetSeed_Cb(ssh_seed) != 0) {
|
||||
if (wolfSSL_SetAllocators(ssh_malloc, ssh_free, ssh_realloc) != 0) {
|
||||
error = ESP_FAIL;
|
||||
goto fail;
|
||||
}
|
||||
if (wolfSSH_Init() != WS_SUCCESS) {
|
||||
error = ESP_FAIL;
|
||||
goto fail;
|
||||
}
|
||||
wolfssh_initialized = true;
|
||||
if (wc_SetSeed_Cb(ssh_seed) != 0) {
|
||||
error = ESP_FAIL;
|
||||
goto fail;
|
||||
}
|
||||
@@ -1347,7 +1357,9 @@ esp_err_t ssh_transport_init(void)
|
||||
return ESP_OK;
|
||||
|
||||
fail:
|
||||
bool cleanup_failed = wolfssh_initialized && wolfSSH_Cleanup() != WS_SUCCESS;
|
||||
taskENTER_CRITICAL(&s_lock);
|
||||
s_init_faulted = cleanup_failed;
|
||||
s_initializing = false;
|
||||
taskEXIT_CRITICAL(&s_lock);
|
||||
return error;
|
||||
|
||||
Reference in New Issue
Block a user