From 9c9870b1038ca4c91f7cce556e5f16f783a309fc Mon Sep 17 00:00:00 2001 From: Mounir IDRASSI Date: Sat, 16 Nov 2024 01:50:06 +0100 Subject: Windows: Avoid modifying BootArguments structure and use __unaligned keyword to inform compiler that pointer is unaligned. This avoids issues with existing bootloaders --- src/Boot/Windows/BootCommon.h | 3 +-- src/Common/Cache.c | 2 +- src/Common/Cache.h | 2 +- src/Driver/DriveFilter.c | 2 +- 4 files changed, 4 insertions(+), 5 deletions(-) diff --git a/src/Boot/Windows/BootCommon.h b/src/Boot/Windows/BootCommon.h index 0e6c973c..45a1a650 100644 --- a/src/Boot/Windows/BootCommon.h +++ b/src/Boot/Windows/BootCommon.h @@ -14,7 +14,6 @@ #define TC_HEADER_Boot_BootCommon #include "Common/Password.h" -#include "Crypto/config.h" #include "BootDefs.h" // The user will be advised to upgrade the rescue disk if upgrading from the following or any previous version @@ -59,7 +58,7 @@ typedef struct uint16 CryptoInfoOffset; uint16 CryptoInfoLength; uint32 HeaderSaltCrc32; - CRYPTOPP_ALIGN_DATA(8) PasswordLegacy BootPassword; + PasswordLegacy BootPassword; uint64 HiddenSystemPartitionStart; uint64 DecoySystemPartitionStart; uint32 Flags; diff --git a/src/Common/Cache.c b/src/Common/Cache.c index c72aa79d..60b2f04a 100644 --- a/src/Common/Cache.c +++ b/src/Common/Cache.c @@ -170,7 +170,7 @@ void AddPasswordToCache (Password *password, int pim, BOOL bCachePim) burn (&tmpPass, sizeof (Password)); } -void AddLegacyPasswordToCache (PasswordLegacy *password, int pim) +void AddLegacyPasswordToCache (__unaligned PasswordLegacy *password, int pim) { Password inputPass = {0}; inputPass.Length = password->Length; diff --git a/src/Common/Cache.h b/src/Common/Cache.h index 84bb6937..cfab6f4f 100644 --- a/src/Common/Cache.h +++ b/src/Common/Cache.h @@ -21,6 +21,6 @@ extern int cacheEmpty; void AddPasswordToCache (Password *password, int pim, BOOL bCachePim); -void AddLegacyPasswordToCache (PasswordLegacy *password, int pim); +void AddLegacyPasswordToCache (__unaligned PasswordLegacy *password, int pim); int ReadVolumeHeaderWCache (BOOL bBoot, BOOL bCache, BOOL bCachePim, unsigned char *header, Password *password, int pkcs5_prf, int pim, PCRYPTO_INFO *retInfo); void WipeCache (void); diff --git a/src/Driver/DriveFilter.c b/src/Driver/DriveFilter.c index f549cc08..7503a8ee 100644 --- a/src/Driver/DriveFilter.c +++ b/src/Driver/DriveFilter.c @@ -411,7 +411,7 @@ static void ComputeBootLoaderFingerprint(PDEVICE_OBJECT LowerDeviceObject, uint8 } -static NTSTATUS MountDrive (DriveFilterExtension *Extension, Password *password, uint32 *headerSaltCrc32) +static NTSTATUS MountDrive (DriveFilterExtension *Extension, Password *password, __unaligned uint32 *headerSaltCrc32) { BOOL hiddenVolume = (BootArgs.HiddenSystemPartitionStart != 0); int64 hiddenHeaderOffset = BootArgs.HiddenSystemPartitionStart + TC_HIDDEN_VOLUME_HEADER_OFFSET; -- cgit v1.2.3