@@ -315,6 +315,7 @@ uint32_t mifare_nested_worker_predict_delay(
315315 uint32_t nt1 , nt2 , i = 0 , previous = 0 , prng_delay = 0 , zero_prng_value = 65565 , repeat = 0 ;
316316
317317 if (tries > 10 ) {
318+ free (crypto );
318319 return 2 ; // Too many tries, fallback to hardnested
319320 }
320321
@@ -324,6 +325,7 @@ uint32_t mifare_nested_worker_predict_delay(
324325 // First, we find RPNG rounds per 1000 us
325326 for (uint32_t rtr = 0 ; rtr < 25 ; rtr ++ ) {
326327 if (mifare_nested_worker -> state != MifareNestedWorkerStateCollecting ) {
328+ free (crypto );
327329 return 1 ;
328330 }
329331
@@ -363,6 +365,7 @@ uint32_t mifare_nested_worker_predict_delay(
363365
364366 // Let's hope...
365367 if (i > 810 && i < 840 ) {
368+ free (crypto );
366369 return rtr * 1000 ;
367370 }
368371 }
@@ -373,6 +376,7 @@ uint32_t mifare_nested_worker_predict_delay(
373376 // Mifare Classic (weak) RPNG repeats every 65565 PRNG cycles
374377
375378 if (zero_prng_value == 65565 ) {
379+ free (crypto );
376380 // PRNG isn't pretictable
377381 return 1 ;
378382 }
@@ -384,6 +388,7 @@ uint32_t mifare_nested_worker_predict_delay(
384388 for (uint32_t rtr = cycles_to_reset - 1 ; rtr < cycles_to_reset + limit ; rtr ++ ) {
385389 for (uint32_t rtz = 0 ; rtz < 100 ; rtz ++ ) {
386390 if (mifare_nested_worker -> state != MifareNestedWorkerStateCollecting ) {
391+ free (crypto );
387392 return 1 ;
388393 }
389394
@@ -441,11 +446,13 @@ uint32_t mifare_nested_worker_predict_delay(
441446 previous = i ;
442447
443448 if (i > 810 && i < 840 ) {
449+ free (crypto );
444450 FURI_LOG_I (TAG , "Found delay: %lu us" , delay );
445451 return delay ;
446452 } else if (i > 840 && i < 40000 ) {
447453 FURI_LOG_D (TAG , "Trying again: timing lost" );
448454 tries ++ ;
455+ free (crypto );
449456 return mifare_nested_worker_predict_delay (
450457 tx_rx , blockNo , keyType , ui64Key , tries , mifare_nested_worker );
451458 }
@@ -455,10 +462,13 @@ uint32_t mifare_nested_worker_predict_delay(
455462 if (i > 1000 && i < 65000 ) {
456463 FURI_LOG_D (TAG , "Trying again: wrong predicted timing" );
457464 tries ++ ;
465+ free (crypto );
458466 return mifare_nested_worker_predict_delay (
459467 tx_rx , blockNo , keyType , ui64Key , tries , mifare_nested_worker );
460468 }
461469
470+ free (crypto );
471+
462472 return 1 ;
463473}
464474
0 commit comments