mirror of
https://github.com/checkpoint-restore/criu
synced 2025-08-31 14:25:49 +00:00
mm: mark a vma as stack, if a value of sp is in it
/proc/PID/maps can contains not up to date information about a stack vma. A kernel marks a VMA as stack, if thread_struct->usersp is in it, but usersp is updated, when a process calls a syscall. This problem is occured, when we try to dump/restore a process in a loop. When a restorer resumes a process, a restorer vma will be marked as stack. A thread stack should not be marked as stack, because its vma is mapped w/o MAP_GROWSDOWN. Signed-off-by: Andrey Vagin <avagin@openvz.org> Acked-by: Cyrill Gorcunov <gorcunov@openvz.org> Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
This commit is contained in:
committed by
Pavel Emelyanov
parent
0e0da2de9e
commit
0ae2bad0c6
@@ -144,10 +144,7 @@ int parse_smaps(pid_t pid, struct list_head *vma_area_list, bool use_map_files)
|
||||
goto err;
|
||||
}
|
||||
|
||||
if (strstr(buf, "[stack")) {
|
||||
vma_area->vma.status |= VMA_AREA_REGULAR | VMA_AREA_STACK;
|
||||
vma_area->vma.flags |= MAP_GROWSDOWN;
|
||||
} else if (strstr(buf, "[vsyscall]")) {
|
||||
if (strstr(buf, "[vsyscall]")) {
|
||||
vma_area->vma.status |= VMA_AREA_VSYSCALL;
|
||||
} else if (strstr(buf, "[vdso]")) {
|
||||
vma_area->vma.status |= VMA_AREA_REGULAR | VMA_AREA_VDSO;
|
||||
|
Reference in New Issue
Block a user