mirror of
https://github.com/checkpoint-restore/criu.git
synced 2026-07-27 12:04:24 +00:00
x86/compat: fix error-check for compat mmap()
Raw sys_mmap() returns address or error like -ENOMEM. Don't check MAP_FAILED, check that result is aligned by page. travis-ci: success for x86/compat: fix error-check for compat mmap() Signed-off-by: Dmitry Safonov <dsafonov@virtuozzo.com> Signed-off-by: Pavel Emelyanov <xemul@virtuozzo.com> Signed-off-by: Andrei Vagin <avagin@virtuozzo.com>
This commit is contained in:
parent
f5cad87d5b
commit
6cacaa69d6
1 changed files with 6 additions and 2 deletions
|
|
@ -16,8 +16,12 @@ static inline void *alloc_compat_syscall_stack(void)
|
|||
void *mem = (void*)sys_mmap(NULL, PAGE_SIZE, PROT_READ | PROT_WRITE,
|
||||
MAP_32BIT | MAP_ANONYMOUS | MAP_PRIVATE, -1, 0);
|
||||
|
||||
if (mem == MAP_FAILED)
|
||||
if ((uintptr_t)mem % PAGE_SIZE) {
|
||||
int err = (~(uint32_t)(uintptr_t)mem) + 1;
|
||||
|
||||
pr_err("mmap() of compat syscall stack failed with %d\n", err);
|
||||
return 0;
|
||||
}
|
||||
return mem;
|
||||
}
|
||||
|
||||
|
|
@ -26,7 +30,7 @@ static inline void free_compat_syscall_stack(void *mem)
|
|||
long int ret = sys_munmap(mem, PAGE_SIZE);
|
||||
|
||||
if (ret)
|
||||
pr_err("munmap of compat addr %p failed with %ld", mem, ret);
|
||||
pr_err("munmap() of compat addr %p failed with %ld", mem, ret);
|
||||
}
|
||||
|
||||
#ifdef CONFIG_COMPAT
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue