[CRIU] Re: [PATCH 2/8] restore: Don't leak opened file descriptor in shmem_remap

Pavel Emelyanov xemul at parallels.com
Mon Feb 20 05:02:04 EST 2012


On 02/20/2012 01:56 PM, Cyrill Gorcunov wrote:
> Don't forget to close opened file in case of error.
> 
> Signed-off-by: Cyrill Gorcunov <gorcunov at openvz.org>

ack

> ---
>  cr-restore.c |   17 +++++++++--------
>  1 files changed, 9 insertions(+), 8 deletions(-)
> 
> diff --git a/cr-restore.c b/cr-restore.c
> index 38d8b4f..8208509 100644
> --- a/cr-restore.c
> +++ b/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)



More information about the CRIU mailing list