diff options
-rw-r--r-- | src/Common/Volumes.c | 27 |
1 files changed, 19 insertions, 8 deletions
diff --git a/src/Common/Volumes.c b/src/Common/Volumes.c index 0940941d..c7f5ce09 100644 --- a/src/Common/Volumes.c +++ b/src/Common/Volumes.c @@ -870,7 +870,8 @@ int CreateVolumeHeaderInMemory (HWND hwndDlg, BOOL bBoot, char *header, int ea, #endif { crypto_close (cryptoInfo); - return ERR_CIPHER_INIT_WEAK_KEY; + retVal = ERR_CIPHER_INIT_WEAK_KEY; + goto err; } } else @@ -912,7 +913,8 @@ int CreateVolumeHeaderInMemory (HWND hwndDlg, BOOL bBoot, char *header, int ea, #endif { crypto_close (cryptoInfo); - return ERR_CIPHER_INIT_WEAK_KEY; + retVal = ERR_CIPHER_INIT_WEAK_KEY; + goto err; } if (password) @@ -961,7 +963,8 @@ int CreateVolumeHeaderInMemory (HWND hwndDlg, BOOL bBoot, char *header, int ea, #endif { crypto_close (cryptoInfo); - return ERR_CIPHER_INIT_WEAK_KEY; + retVal = ERR_CIPHER_INIT_WEAK_KEY; + goto err; } } @@ -1045,14 +1048,15 @@ int CreateVolumeHeaderInMemory (HWND hwndDlg, BOOL bBoot, char *header, int ea, if (retVal != ERR_SUCCESS) { crypto_close (cryptoInfo); - return retVal; + goto err; } // Mode of operation if (!EAInitMode (cryptoInfo)) { crypto_close (cryptoInfo); - return ERR_OUTOFMEMORY; + retVal = ERR_OUTOFMEMORY; + goto err; } @@ -1069,7 +1073,7 @@ int CreateVolumeHeaderInMemory (HWND hwndDlg, BOOL bBoot, char *header, int ea, if (retVal != ERR_SUCCESS) { crypto_close (cryptoInfo); - return retVal; + goto err; } memcpy (cryptoInfo->master_keydata, keyInfo.master_keydata, MASTER_KEYDATA_SIZE); @@ -1086,7 +1090,8 @@ int CreateVolumeHeaderInMemory (HWND hwndDlg, BOOL bBoot, char *header, int ea, if (!EAInitMode (cryptoInfo)) { crypto_close (cryptoInfo); - return ERR_OUTOFMEMORY; + retVal = ERR_OUTOFMEMORY; + goto err; } @@ -1132,10 +1137,16 @@ int CreateVolumeHeaderInMemory (HWND hwndDlg, BOOL bBoot, char *header, int ea, } #endif // #ifdef VOLFORMAT + *retInfo = cryptoInfo; + +err: burn (dk, sizeof(dk)); burn (&keyInfo, sizeof (keyInfo)); +#if !defined(_UEFI) + VirtualUnlock (&keyInfo, sizeof (keyInfo)); + VirtualUnlock (&dk, sizeof (dk)); +#endif // !defined(_UEFI) - *retInfo = cryptoInfo; return 0; } |