mirror of
https://github.com/checkpoint-restore/criu.git
synced 2026-07-23 18:19:39 +00:00
rst-malloc: Do not grow sh-remap memory
The mremap() grow on anonymous shared memory doesn't produce usable segment, as the underlying kernel tmpfs file doesn't get truncated. So any access to new mem will result in sigbus. Disable this grow for now, we only need few of such memory. Signed-off-by: Pavel Emelyanov <xemul@virtuozzo.com> Reviewed-by: Cyrill Gorcunov <gorcunov@openvz.org>
This commit is contained in:
parent
7c2542a89b
commit
0216805423
1 changed files with 13 additions and 1 deletions
|
|
@ -66,7 +66,18 @@ static int grow_remap(struct rst_mem_type_s *t, int flag, unsigned long size)
|
|||
*/
|
||||
aux = mmap(NULL, size, PROT_READ | PROT_WRITE,
|
||||
flag | MAP_ANON, 0, 0);
|
||||
else
|
||||
else {
|
||||
if (flag & MAP_SHARED) {
|
||||
/*
|
||||
* Anon shared memory cannot grow with
|
||||
* mremap, anon-shmem file size doesn't
|
||||
* chage and memory access generates
|
||||
* SIGBUS. We should truncate the guy,
|
||||
* but for now we don't need it.
|
||||
*/
|
||||
pr_err("Can't grow RM_SHREMAP memory\n");
|
||||
return -1;
|
||||
}
|
||||
/*
|
||||
* We'll have to remap all objects into restorer
|
||||
* address space and get their new addresses. Since
|
||||
|
|
@ -78,6 +89,7 @@ static int grow_remap(struct rst_mem_type_s *t, int flag, unsigned long size)
|
|||
*/
|
||||
aux = mremap(t->buf, t->size,
|
||||
t->size + size, MREMAP_MAYMOVE);
|
||||
}
|
||||
if (aux == MAP_FAILED)
|
||||
return -1;
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue