[CRIU] [PATCH] restorer: don't close SYSV IPC vma fd
Kinsbursky Stanislav
skinsbursky at openvz.org
Fri Feb 17 05:56:37 EST 2012
If't not a fd, used for open and but, but SYSV IPC id instead.
So don't close it - this can lead to unpredictable resultd (if SYSV IPC id
will match with real fd, opened by processes.
Signed-off-by: Stanislav Kinsbursky <skinsbursky at openvz.org>
---
restorer.c | 12 +++++++-----
1 files changed, 7 insertions(+), 5 deletions(-)
diff --git a/restorer.c b/restorer.c
index e0eccb4..c333b95 100644
--- a/restorer.c
+++ b/restorer.c
@@ -290,6 +290,7 @@ err:
static u64 restore_mapping(const struct vma_entry *vma_entry)
{
int prot, flags;
+ u64 addr;
if (vma_entry_is(vma_entry, VMA_AREA_SYSVIPC))
return sys_shmat(vma_entry->fd, (void *)vma_entry->start,
@@ -319,12 +320,17 @@ static u64 restore_mapping(const struct vma_entry *vma_entry)
* writable since we're going to restore page
* contents.
*/
- return sys_mmap((void *)vma_entry->start,
+ addr = sys_mmap((void *)vma_entry->start,
vma_entry_len(vma_entry),
prot,
flags | MAP_FIXED,
vma_entry->fd,
vma_entry->pgoff);
+
+ if (vma_entry->fd != -1UL)
+ sys_close(vma_entry->fd);
+
+ return addr;
}
/*
@@ -427,10 +433,6 @@ long restore_task(struct task_restore_core_args *args)
write_hex_n(va);
goto core_restore_end;
}
-
- if (vma_entry->fd != -1UL)
- sys_close(vma_entry->fd);
-
}
/*
More information about the CRIU
mailing list