Fixed allocation rounding for MEM_RESERVE.
diff --git a/memory/virtual.c b/memory/virtual.c
index f9f917a..b70bf4f 100644
--- a/memory/virtual.c
+++ b/memory/virtual.c
@@ -552,12 +552,13 @@
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 @@
if (!(view = VIRTUAL_FindView( base )) ||
(base + size > view->base + view->size))
{
- SetLastError( ERROR_INVALID_PARAMETER );
+ SetLastError( ERROR_INVALID_ADDRESS );
return NULL;
}