From: Bernhard Übelacker bernhardu@mailbox.org
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=55928 --- dlls/ntdll/tests/info.c | 2 ++ dlls/ntdll/unix/system.c | 3 +++ dlls/wow64/system.c | 4 +++- 3 files changed, 8 insertions(+), 1 deletion(-)
diff --git a/dlls/ntdll/tests/info.c b/dlls/ntdll/tests/info.c index ac979760433..f63ddf4116e 100644 --- a/dlls/ntdll/tests/info.c +++ b/dlls/ntdll/tests/info.c @@ -662,6 +662,8 @@ static void test_query_process( BOOL extended ) } }
+ ok(((INT_PTR)spi & 7) == 0, "Record is not aligned at 8 byte boundary. %p\n", spi); + if (!spi->NextEntryOffset) { winetest_pop_context(); diff --git a/dlls/ntdll/unix/system.c b/dlls/ntdll/unix/system.c index d3983c0dffb..eafc5c5b3b0 100644 --- a/dlls/ntdll/unix/system.c +++ b/dlls/ntdll/unix/system.c @@ -2879,6 +2879,9 @@ C_ASSERT( sizeof(struct process_info) <= sizeof(SYSTEM_PROCESS_INFORMATION) );
proc_len = sizeof(*nt_process) + server_process->thread_count * thread_info_size + (name_len + 1) * sizeof(WCHAR); +#define ALIGN(n, align) (((n) + (align) - 1) & ~((align) - 1)) + proc_len = ALIGN(proc_len, 8); +#undef ALIGN *len += proc_len;
if (*len <= size) diff --git a/dlls/wow64/system.c b/dlls/wow64/system.c index ffa82054b9a..a8eb528fc7d 100644 --- a/dlls/wow64/system.c +++ b/dlls/wow64/system.c @@ -176,7 +176,9 @@ static NTSTATUS put_system_proc_info( SYSTEM_PROCESS_INFORMATION32 *info32, if (prev) prev->NextEntryOffset = (char *)proc32 - (char *)prev; prev = proc32; } - outpos += proc_len + proc->ProcessName.MaximumLength; +#define ALIGN(n, align) (((n) + (align) - 1) & ~((align) - 1)) + outpos += ALIGN(proc_len + proc->ProcessName.MaximumLength, 8); +#undef ALIGN inpos += proc->NextEntryOffset; if (!proc->NextEntryOffset) break; }