From 275d93c9ab0f533fa70d698726afc8adaaefb664 Mon Sep 17 00:00:00 2001
From: Adeniyi Mayokun adeniyimayokun17@gmail.com Date: Wed, 14 Mar 2018 06:50:15 +0100 Subject: [PATCH] Ensure 16 byte alignment of data
Signed-off-by: Adeniyi Mayokun <adeniyimayokun17@gmail.com@gmail.com> --- dlls/ntdll/heap.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-)
diff --git a/dlls/ntdll/heap.c b/dlls/ntdll/heap.c index 57d3d544e5..5469b6fc55 100644 --- a/dlls/ntdll/heap.c +++ b/dlls/ntdll/heap.c @@ -54,8 +54,9 @@ WINE_DEFAULT_DEBUG_CHANNEL(heap); typedef struct tagARENA_INUSE { DWORD size; /* Block size; must be the first field */ - DWORD magic : 24; /* Magic number */ - DWORD unused_bytes : 8; /* Number of bytes in the block not used by user data (max value is HEAP_MIN_DATA_SIZE+HEAP_MIN_SHRINK_SIZE) */ + DWORD magic; /* Magic number */ + DWORD unused_bytes; /* Number of bytes in the block not used by user data (max value is HEAP_MIN_DATA_SIZE+HEAP_MIN_SHRINK_SIZE) */ + DWORD padding; } ARENA_INUSE;
typedef struct tagARENA_FREE @@ -92,9 +93,11 @@ typedef struct
/* everything is aligned on 64 byte boundaries */ #define ALIGNMENT 64 +#define HEADER_ALIGNMENT 16 #define LARGE_ALIGNMENT 16 /* large blocks have stricter alignment */
-C_ASSERT( sizeof(ARENA_LARGE) % LARGE_ALIGNMENT == 0 ); +C_ASSERT( sizeof(ARENA_LARGE) % HEADER_ALIGNMENT == 0 ); +C_ASSERT( sizeof(ARENA_INUSE) % HEADER_ALIGNMENT == 0 );
#define ROUND_SIZE(size) ((size + ALIGNMENT - 1) & ~(ALIGNMENT - 1)) #define ROUND_DATA_SIZE(size) (((size + sizeof(ARENA_INUSE) + ALIGNMENT - 1) \