diff options
| -rw-r--r-- | src/kernel/syscall.C | 15 |
1 files changed, 13 insertions, 2 deletions
diff --git a/src/kernel/syscall.C b/src/kernel/syscall.C index 305e3c39a..610f36d26 100644 --- a/src/kernel/syscall.C +++ b/src/kernel/syscall.C @@ -535,7 +535,11 @@ namespace Systemcalls uint64_t devDataSize = ALIGN_PAGE(TASK_GETARG1(t)); bool cacheable = (0 != TASK_GETARG2(t)); - if (devDataSize > THIRTYTWO_GB) + if (TASK_GETARG0(t) & (PAGESIZE - 1)) // ensure address page alignment. + { + TASK_SETRTN(t, NULL); + } + else if (devDataSize > THIRTYTWO_GB) { TASK_SETRTN(t, NULL); } @@ -764,7 +768,14 @@ namespace Systemcalls void* va = (void*)TASK_GETARG1(t); uint64_t size = (uint64_t)TASK_GETARG2(t); - TASK_SETRTN(t, VmmManager::mmAllocBlock(mq,va,size)); + if (TASK_GETARG1(t) & (PAGESIZE - 1)) // ensure address page alignment. + { + TASK_SETRTN(t, NULL); + } + else + { + TASK_SETRTN(t, VmmManager::mmAllocBlock(mq,va,size)); + } } /** |

