Просмотр исходного кода

Mifare Nested: Fix memmgmt to please TLSF

Willy-JL 1 год назад
Родитель
Сommit
b05bff1dc5
1 измененных файлов с 31 добавлено и 32 удалено
  1. 31 32
      mifare_nested/mifare_nested_worker.c

+ 31 - 32
mifare_nested/mifare_nested_worker.c

@@ -542,7 +542,7 @@ SaveNoncesResult_t* mifare_nested_worker_write_nonces(
 
     free_nonces(nonces, sector_count, free_tries_count);
     file_stream_close(file_stream);
-    free(file_stream);
+    stream_free(file_stream);
 
     if(!result->saved) {
         FURI_LOG_E(TAG, "No nonces collected, removing file...");
@@ -733,16 +733,19 @@ void mifare_nested_worker_collect_nonces_static(MifareNestedWorker* mifare_neste
     storage_common_mkdir(storage, furi_string_get_cstr(folder_path));
     furi_string_free(folder_path);
 
-    if(!mifare_nested_worker_read_key_cache(&data, mf_data) ||
-       !mifare_nested_worker_check_initial_keys(
-           &nonces, mf_data, 1, sector_count, &key, &key_block, &found_key_type)) {
+    bool ok = mifare_nested_worker_read_key_cache(&data, mf_data);
+    if(ok) {
+        ok = mifare_nested_worker_check_initial_keys(
+            &nonces, mf_data, 1, sector_count, &key, &key_block, &found_key_type);
+        if(!ok) {
+            free_nonces(&nonces, sector_count, 1);
+        }
+    }
+    if(!ok) {
         mifare_nested_worker->callback(
             MifareNestedWorkerEventNeedKey, mifare_nested_worker->context);
         nfc_deactivate();
 
-        //free(mf_data);
-        free_nonces(&nonces, sector_count, 1);
-
         return;
     }
 
@@ -846,8 +849,6 @@ void mifare_nested_worker_collect_nonces_static(MifareNestedWorker* mifare_neste
     SaveNoncesResult_t* result =
         mifare_nested_worker_write_nonces(&data, storage, &nonces, 1, 1, sector_count, 0, 0);
 
-    //free(mf_data);
-
     if(result->saved) {
         mifare_nested_worker->callback(
             MifareNestedWorkerEventNoncesCollected, mifare_nested_worker->context);
@@ -900,16 +901,19 @@ void mifare_nested_worker_collect_nonces_hard(MifareNestedWorker* mifare_nested_
     storage_common_mkdir(storage, furi_string_get_cstr(folder_path));
     furi_string_free(folder_path);
 
-    if(!mifare_nested_worker_read_key_cache(&data, mf_data) ||
-       !mifare_nested_worker_check_initial_keys(
-           &nonces, mf_data, 1, sector_count, &key, &key_block, &found_key_type)) {
+    bool ok = mifare_nested_worker_read_key_cache(&data, mf_data);
+    if(ok) {
+        ok = mifare_nested_worker_check_initial_keys(
+            &nonces, mf_data, 1, sector_count, &key, &key_block, &found_key_type);
+        if(!ok) {
+            free_nonces(&nonces, sector_count, 1);
+        }
+    }
+    if(!ok) {
         mifare_nested_worker->callback(
             MifareNestedWorkerEventNeedKey, mifare_nested_worker->context);
         nfc_deactivate();
 
-        //free(mf_data);
-        free_nonces(&nonces, sector_count, 1);
-
         return;
     }
 
@@ -1023,7 +1027,6 @@ void mifare_nested_worker_collect_nonces_hard(MifareNestedWorker* mifare_nested_
 
                         furi_string_free(hardnested_file);
                         free(found);
-                        //free(mf_data);
                         nfc_deactivate();
 
                         mifare_nested_worker->callback(
@@ -1095,8 +1098,6 @@ void mifare_nested_worker_collect_nonces_hard(MifareNestedWorker* mifare_nested_
     SaveNoncesResult_t* result =
         mifare_nested_worker_write_nonces(&data, storage, &nonces, 1, 1, sector_count, 0, 0);
 
-    //free(mf_data);
-
     if(result->saved) {
         mifare_nested_worker->callback(
             MifareNestedWorkerEventNoncesCollected, mifare_nested_worker->context);
@@ -1148,16 +1149,19 @@ void mifare_nested_worker_collect_nonces(MifareNestedWorker* mifare_nested_worke
     storage_common_mkdir(storage, furi_string_get_cstr(folder_path));
     furi_string_free(folder_path);
 
-    if(!mifare_nested_worker_read_key_cache(&data, mf_data) ||
-       !mifare_nested_worker_check_initial_keys(
-           &nonces, mf_data, 3, sector_count, &key, &key_block, &found_key_type)) {
+    bool ok = mifare_nested_worker_read_key_cache(&data, mf_data);
+    if(ok) {
+        ok = mifare_nested_worker_check_initial_keys(
+            &nonces, mf_data, 3, sector_count, &key, &key_block, &found_key_type);
+        if(!ok) {
+            free_nonces(&nonces, sector_count, 3);
+        }
+    }
+    if(!ok) {
         mifare_nested_worker->callback(
             MifareNestedWorkerEventNeedKey, mifare_nested_worker->context);
         nfc_deactivate();
 
-        //free(mf_data);
-        free_nonces(&nonces, sector_count, 3);
-
         return;
     }
 
@@ -1187,7 +1191,6 @@ void mifare_nested_worker_collect_nonces(MifareNestedWorker* mifare_nested_worke
         if(first_distance == 0 && second_distance == 0) {
             nfc_deactivate();
 
-            //free(mf_data);
             free_nonces(&nonces, sector_count, 3);
 
             mifare_nested_worker_change_state(
@@ -1271,7 +1274,6 @@ void mifare_nested_worker_collect_nonces(MifareNestedWorker* mifare_nested_worke
 
                 nfc_deactivate();
 
-                //free(mf_data);
                 free_nonces(&nonces, sector_count, 3);
 
                 mifare_nested_worker_change_state(
@@ -1298,7 +1300,6 @@ void mifare_nested_worker_collect_nonces(MifareNestedWorker* mifare_nested_worke
                 mifare_nested_worker->callback(
                     MifareNestedWorkerEventAttackFailed, mifare_nested_worker->context);
 
-                //free(mf_data);
                 free_nonces(&nonces, sector_count, 3);
 
                 return;
@@ -1412,8 +1413,6 @@ void mifare_nested_worker_collect_nonces(MifareNestedWorker* mifare_nested_worke
     SaveNoncesResult_t* result = mifare_nested_worker_write_nonces(
         &data, storage, &nonces, tries_count, 3, sector_count, delay, distance);
 
-    //free(mf_data);
-
     if(result->saved) {
         mifare_nested_worker->callback(
             MifareNestedWorkerEventNoncesCollected, mifare_nested_worker->context);
@@ -1466,7 +1465,7 @@ bool* mifare_nested_worker_check_keys_exists(
     }
 
     file_stream_close(file_stream);
-    free(file_stream);
+    stream_free(file_stream);
 
     return old_keys;
 }
@@ -1546,7 +1545,7 @@ void mifare_nested_worker_check_keys(MifareNestedWorker* mifare_nested_worker) {
 
         file_stream_close(file_stream);
 
-        free(file_stream);
+        stream_free(file_stream);
         furi_string_free(path);
         furi_string_free(next_line);
         furi_record_close(RECORD_STORAGE);
@@ -1653,7 +1652,7 @@ void mifare_nested_worker_check_keys(MifareNestedWorker* mifare_nested_worker) {
 
     furi_string_free(next_line);
     file_stream_close(file_stream);
-    free(file_stream);
+    stream_free(file_stream);
 
     mifare_nested_worker->callback(
         MifareNestedWorkerEventProcessingKeys, mifare_nested_worker->context);