From 2784652ab880dcea82aa212096b64d39695012fc Mon Sep 17 00:00:00 2001 From: Mounir IDRASSI Date: Sun, 5 Apr 2015 22:21:59 +0200 Subject: Windows vulnerability fix: CryptAcquireContext vulnerability fix. Add checks to random generator to abort in case of error and display a diagnose message to the user. --- src/Common/Exception.h | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) (limited to 'src/Common/Exception.h') diff --git a/src/Common/Exception.h b/src/Common/Exception.h index e5d4fd4c..0883df14 100644 --- a/src/Common/Exception.h +++ b/src/Common/Exception.h @@ -11,6 +11,7 @@ #include "Platform/PlatformBase.h" #include "Dlgcode.h" +#include namespace VeraCrypt { @@ -62,6 +63,38 @@ namespace VeraCrypt const char *SrcPos; }; + struct RandInitFailed : public Exception + { + RandInitFailed (const char *srcPos, DWORD dwLastError) : SrcPos (srcPos), LastError (dwLastError) { } + + void Show (HWND parent) const + { + char szErrCode[16]; + StringCbPrintf (szErrCode, sizeof(szErrCode), "0x%.8X", LastError); + string msgBody = "The Random Generator initialization failed.\n\n\n(If you report a bug in connection with this, please include the following technical information in the bug report:\n" + string (SrcPos) + "\nLast Error = " + string (szErrCode) + ")"; + MessageBox (parent, msgBody.c_str(), "VeraCrypt", MB_ICONERROR | MB_SETFOREGROUND); + } + + const char *SrcPos; + DWORD LastError; + }; + + struct CryptoApiFailed : public Exception + { + CryptoApiFailed (const char *srcPos, DWORD dwLastError) : SrcPos (srcPos), LastError (dwLastError) { } + + void Show (HWND parent) const + { + char szErrCode[16]; + StringCbPrintf (szErrCode, sizeof(szErrCode), "0x%.8X", LastError); + string msgBody = "Windows Crypto API failed.\n\n\n(If you report a bug in connection with this, please include the following technical information in the bug report:\n" + string (SrcPos) + "\nLast Error = " + string (szErrCode) + ")"; + MessageBox (parent, msgBody.c_str(), "VeraCrypt", MB_ICONERROR | MB_SETFOREGROUND); + } + + const char *SrcPos; + DWORD LastError; + }; + struct TimeOut : public Exception { TimeOut (const char *srcPos) { } -- cgit v1.2.3