From 453f7315cd3b5a205199ad8a2d8848cf82815449 Mon Sep 17 00:00:00 2001
From: Alexandre Julliard <julliard@winehq.org>
Date: Mon, 15 Nov 1999 00:46:30 +0000
Subject: [PATCH] Fixed allocation rounding for MEM_RESERVE.

---
 memory/virtual.c | 7 ++++---
 1 file changed, 4 insertions(+), 3 deletions(-)

diff --git a/memory/virtual.c b/memory/virtual.c
index f9f917a5afe..b70bf4f52c9 100644
--- a/memory/virtual.c
+++ b/memory/virtual.c
@@ -552,12 +552,13 @@ LPVOID WINAPI VirtualAlloc(
     if (addr)
     {
         if (type & MEM_RESERVE) /* Round down to 64k boundary */
-            base = ((UINT)addr + granularity_mask) & ~granularity_mask;
+            base = (UINT)addr & ~granularity_mask;
         else
             base = ROUND_ADDR( addr );
         size = (((UINT)addr + size + page_mask) & ~page_mask) - base;
-        if (base + size < base)  /* Disallow wrap-around */
+        if ((base <= granularity_mask) || (base + size < base))
         {
+            /* disallow low 64k and wrap-around */
             SetLastError( ERROR_INVALID_PARAMETER );
             return NULL;
         }
@@ -636,7 +637,7 @@ LPVOID WINAPI VirtualAlloc(
     if (!(view = VIRTUAL_FindView( base )) ||
         (base + size > view->base + view->size))
     {
-        SetLastError( ERROR_INVALID_PARAMETER );
+        SetLastError( ERROR_INVALID_ADDRESS );
         return NULL;
     }
 
-- 
GitLab