mirror of
https://github.com/checkpoint-restore/criu
synced 2025-08-30 05:48:05 +00:00
restore: Don't leak opened file descriptor in shmem_remap
Don't forget to close opened file in case of error. Signed-off-by: Cyrill Gorcunov <gorcunov@openvz.org> Acked-by: Pavel Emelyanov <xemul@parallels.com>
This commit is contained in:
parent
85235af889
commit
6a0b94e7d5
17
cr-restore.c
17
cr-restore.c
@ -343,8 +343,7 @@ static int prepare_pipes_pid(int pid)
|
||||
static int shmem_remap(void *old_addr, void *new_addr, unsigned long size)
|
||||
{
|
||||
char path[PATH_MAX];
|
||||
int fd;
|
||||
void *ret;
|
||||
int fd, ret = -1;
|
||||
|
||||
sprintf(path, "/proc/self/map_files/%lx-%lx",
|
||||
(long)old_addr, (long)old_addr + size);
|
||||
@ -355,15 +354,17 @@ static int shmem_remap(void *old_addr, void *new_addr, unsigned long size)
|
||||
return -1;
|
||||
}
|
||||
|
||||
ret = mmap(new_addr, size, PROT_READ | PROT_WRITE,
|
||||
MAP_SHARED | MAP_FIXED, fd, 0);
|
||||
if (ret != new_addr) {
|
||||
/* reuse old_addr variable */
|
||||
old_addr = mmap(new_addr, size, PROT_READ | PROT_WRITE,
|
||||
MAP_SHARED | MAP_FIXED, fd, 0);
|
||||
if (new_addr == old_addr)
|
||||
ret = 0;
|
||||
else
|
||||
pr_perror("mmap failed");
|
||||
return -1;
|
||||
}
|
||||
|
||||
close(fd);
|
||||
return 0;
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int prepare_shared(int ps_fd)
|
||||
|
Loading…
x
Reference in New Issue
Block a user