@@ -416,36 +416,36 @@ int sata_unlock_disk(int drv, int freeze)
416416 int secret_size = ATA_UNLOCK_DISK_KEY_SZ ;
417417 uint8_t secret [ATA_UNLOCK_DISK_KEY_SZ ];
418418 enum ata_security_state ata_st ;
419- int r ;
419+ int r = -1 ;
420420
421421#ifdef WOLFBOOT_ATA_DISABLE_USER_PASSWORD
422422 sata_disable_password (0 );
423423#endif
424424 r = sata_get_unlock_secret (secret , & secret_size );
425425 if (r != 0 )
426- return r ;
426+ goto cleanup ;
427427 ata_st = ata_security_get_state (drv );
428428 wolfBoot_printf ("ATA: Security state SEC%d\r\n" , ata_st );
429429#if defined(TARGET_x86_fsp_qemu )
430430 if (ata_st == ATA_SEC0 )
431- return 0 ;
431+ goto cleanup ;
432432#endif
433433 if (ata_st == ATA_SEC1 ) {
434434 AHCI_DEBUG_PRINTF ("ATA: calling set passphrase\r\n" , r );
435435 r = ata_security_set_password (drv , 0 , (char * )secret );
436436 if (r != 0 )
437- return -1 ;
437+ goto error ;
438438 AHCI_DEBUG_PRINTF ("ATA: calling freeze lock\r\n" , r );
439439 if (freeze ) {
440440 r = ata_security_freeze_lock (drv );
441441 AHCI_DEBUG_PRINTF ("ATA security freeze lock: returned %d\r\n" , r );
442442 if (r != 0 )
443- return -1 ;
443+ goto error ;
444444 }
445445 r = ata_identify_device (drv );
446446 AHCI_DEBUG_PRINTF ("ATA identify: returned %d\r\n" , r );
447447 if (r != 0 )
448- return -1 ;
448+ goto error ;
449449 ata_st = ata_security_get_state (drv );
450450 wolfBoot_printf ("ATA: State SEC%d\r\n" , ata_st );
451451 }
@@ -454,11 +454,11 @@ int sata_unlock_disk(int drv, int freeze)
454454 r = ata_security_unlock_device (drv , (char * )secret , 0 );
455455 AHCI_DEBUG_PRINTF ("ATA device unlock: returned %d\r\n" , r );
456456 if (r != 0 )
457- return -1 ;
457+ goto error ;
458458 r = ata_identify_device (drv );
459459 AHCI_DEBUG_PRINTF ("ATA identify: returned %d\r\n" , r );
460460 if (r != 0 )
461- return -1 ;
461+ goto error ;
462462 ata_st = ata_security_get_state (drv );
463463 if (ata_st == ATA_SEC5 ) {
464464 if (freeze ) {
@@ -467,14 +467,14 @@ int sata_unlock_disk(int drv, int freeze)
467467 AHCI_DEBUG_PRINTF ("ATA security freeze lock: returned %d\r\n" ,
468468 r );
469469 if (r != 0 )
470- return -1 ;
470+ goto error ;
471471 } else {
472472 AHCI_DEBUG_PRINTF ("ATA security freeze skipped\r\n" );
473473 }
474474 r = ata_identify_device (drv );
475475 AHCI_DEBUG_PRINTF ("ATA identify: returned %d\r\n" , r );
476476 if (r != 0 )
477- return -1 ;
477+ goto error ;
478478 }
479479 }
480480 ata_st = ata_security_get_state (drv );
@@ -484,8 +484,13 @@ int sata_unlock_disk(int drv, int freeze)
484484 panic ();
485485 }
486486 AHCI_DEBUG_PRINTF ("ATA: Security enabled. State SEC%d\r\n" , ata_st );
487-
488- return 0 ;
487+ r = 0 ;
488+ goto cleanup ;
489+ error :
490+ r = -1 ;
491+ cleanup :
492+ TPM2_ForceZero (secret , sizeof (secret ));
493+ return r ;
489494}
490495#endif /* WOLFBOOT_ATA_DISK_LOCK */
491496
0 commit comments