VeraCrypt
aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMounir IDRASSI <mounir.idrassi@idrix.fr>2019-11-08 22:06:25 (GMT)
committerMounir IDRASSI <mounir.idrassi@idrix.fr>2019-11-08 22:07:42 (GMT)
commit2d4d3ab4ed0ee86d46fe2b44ca1e56a3d2916f68 (patch)
tree92955bebea443f32e47c38892e59a34da3624072
parent4566f95fd9f70530866457beb545a794cc80e1d0 (diff)
downloadVeraCrypt-DCS-2d4d3ab4ed0ee86d46fe2b44ca1e56a3d2916f68.zip
VeraCrypt-DCS-2d4d3ab4ed0ee86d46fe2b44ca1e56a3d2916f68.tar.gz
Fix "ActionFailed" not working and add "ActionCancelled" to customize handling of user hitting ESC on password prompt
-rw-r--r--DcsBoot/DcsBoot.c6
-rw-r--r--DcsInt/DcsInt.c5
-rw-r--r--Include/Library/CommonLib.h1
-rw-r--r--Library/VeraCryptLib/DcsVeraCrypt.c3
-rw-r--r--Library/VeraCryptLib/DcsVeraCrypt.h1
5 files changed, 15 insertions, 1 deletions
diff --git a/DcsBoot/DcsBoot.c b/DcsBoot/DcsBoot.c
index 080b052..7029a10 100644
--- a/DcsBoot/DcsBoot.c
+++ b/DcsBoot/DcsBoot.c
@@ -201,7 +201,11 @@ DcsBootMain(
// Authorize
gBS->SetWatchdogTimer(0, 0, 0, NULL);
res = EfiExec(NULL, L"\\EFI\\VeraCrypt\\DcsInt.dcs");
- if (EFI_ERROR(res)) {
+ if (EFI_ERROR(res) && (res != EFI_DCS_POSTEXEC_REQUESTED)) {
+
+ // Clear DcsExecPartGuid before execute OS to avoid problem in VirtualBox with reboot.
+ EfiSetVar(L"DcsExecPartGuid", NULL, NULL, 0, EFI_VARIABLE_BOOTSERVICE_ACCESS);
+ EfiSetVar(L"DcsExecCmd", NULL, NULL, 0, EFI_VARIABLE_BOOTSERVICE_ACCESS);
// ERR_PRINT(L"\nDcsInt.efi %r\n",res);
if (res == EFI_DCS_SHUTDOWN_REQUESTED)
{
diff --git a/DcsInt/DcsInt.c b/DcsInt/DcsInt.c
index 8133726..7dd98ec 100644
--- a/DcsInt/DcsInt.c
+++ b/DcsInt/DcsInt.c
@@ -804,6 +804,7 @@ enum OnExitTypes{
OnExitAuthFaild = 1,
OnExitAuthNotFound,
OnExitAuthTimeout,
+ OnExitAuthCancelled,
OnExitSuccess
};
@@ -976,6 +977,8 @@ OnExit(
if (fileStr != NULL) {
EfiSetVar(L"DcsExecCmd", NULL, fileStr, (StrLen(fileStr) + 1) * 2, EFI_VARIABLE_BOOTSERVICE_ACCESS);
}
+
+ retValue = EFI_DCS_POSTEXEC_REQUESTED;
goto exit;
}
@@ -1185,6 +1188,8 @@ UefiMain(
if (EFI_ERROR(res)) {
if (res == EFI_TIMEOUT)
return OnExit(gOnExitTimeout, OnExitAuthTimeout, res);
+ else if (res == EFI_DCS_USER_CANCELED)
+ return OnExit(gOnExitCancelled, OnExitAuthCancelled, res);
else
return OnExit(gOnExitFailed, OnExitAuthFaild, res);
}
diff --git a/Include/Library/CommonLib.h b/Include/Library/CommonLib.h
index 0bfb631..2cf10d3 100644
--- a/Include/Library/CommonLib.h
+++ b/Include/Library/CommonLib.h
@@ -32,6 +32,7 @@ https://opensource.org/licenses/LGPL-3.0
#define EFI_DCS_REBOOT_REQUESTED ENCODE_ERROR(0xDC50002)
#define EFI_DCS_HALT_REQUESTED ENCODE_ERROR(0xDC50003)
#define EFI_DCS_USER_CANCELED ENCODE_ERROR(0xDC50004)
+#define EFI_DCS_POSTEXEC_REQUESTED ENCODE_ERROR(0xDC50005)
//////////////////////////////////////////////////////////////////////////
// Check error
diff --git a/Library/VeraCryptLib/DcsVeraCrypt.c b/Library/VeraCryptLib/DcsVeraCrypt.c
index 4cf0e05..c3e8a39 100644
--- a/Library/VeraCryptLib/DcsVeraCrypt.c
+++ b/Library/VeraCryptLib/DcsVeraCrypt.c
@@ -82,6 +82,7 @@ CHAR8* gOnExitFailed = NULL;
CHAR8* gOnExitSuccess = NULL;
CHAR8* gOnExitNotFound = NULL;
CHAR8* gOnExitTimeout = NULL;
+CHAR8* gOnExitCancelled = NULL;
//////////////////////////////////////////////////////////////////////////
// Authorize
@@ -184,6 +185,8 @@ VCAuthLoadConfig()
ConfigReadString("ActionFailed", "Exit", gOnExitFailed, MAX_MSG);
VCCONFIG_ALLOC(gOnExitTimeout, MAX_MSG);
ConfigReadString("ActionTimeout", "Shutdown", gOnExitTimeout, MAX_MSG);
+ VCCONFIG_ALLOC(gOnExitCancelled, MAX_MSG);
+ ConfigReadString("ActionCancelled", "Exit", gOnExitCancelled, MAX_MSG);
strTemp = MEM_ALLOC(MAX_MSG);
ConfigReadString("PartitionGuidOS", "", strTemp, MAX_MSG);
diff --git a/Library/VeraCryptLib/DcsVeraCrypt.h b/Library/VeraCryptLib/DcsVeraCrypt.h
index 152a335..1f25ae9 100644
--- a/Library/VeraCryptLib/DcsVeraCrypt.h
+++ b/Library/VeraCryptLib/DcsVeraCrypt.h
@@ -75,6 +75,7 @@ extern CHAR8* gOnExitFailed;
extern CHAR8* gOnExitSuccess;
extern CHAR8* gOnExitNotFound;
extern CHAR8* gOnExitTimeout;
+extern CHAR8* gOnExitCancelled;
void
VCAuthAsk();