[CRIU] [PATCH] proc: Don't use parent proc_self_fd cached descriptor

Andrew Vagin avagin at odin.com
Fri May 29 07:41:45 PDT 2015


On Fri, May 29, 2015 at 04:03:33PM +0300, Pavel Emelyanov wrote:
> When we call open_proc(PROC_SELF, ...) the /proc/self descriptor is
> cached in criu. If the process fork()-s after than and child goes
> open_proc(PROC_SELF, ...) then it will get the parent's proc descriptor.
> 
> Signed-off-by: Pavel Emelyanov <xemul at parallels.com>

Acked-by: Andrew Vagin <avagin at odin.com>

> 
> ---
> 
> diff --git a/util.c b/util.c
> index 36162c4..e83f0b8 100644
> --- a/util.c
> +++ b/util.c
> @@ -174,6 +174,7 @@ int move_img_fd(int *img_fd, int want_fd)
>  
>  static pid_t open_proc_pid = PROC_NONE;
>  static int open_proc_fd = -1;
> +static pid_t open_proc_self_pid;
>  static int open_proc_self_fd = -1;
>  
>  static inline void set_proc_self_fd(int fd)
> @@ -182,6 +183,7 @@ static inline void set_proc_self_fd(int fd)
>  		close(open_proc_self_fd);
>  
>  	open_proc_self_fd = fd;
> +	open_proc_self_pid = getpid();
>  }
>  
>  static inline void set_proc_pid_fd(int pid, int fd)
> @@ -195,9 +197,13 @@ static inline void set_proc_pid_fd(int pid, int fd)
>  
>  static inline int get_proc_fd(int pid)
>  {
> -	if (pid == PROC_SELF)
> +	if (pid == PROC_SELF) {
> +		if (open_proc_self_fd != -1 && open_proc_self_pid != getpid()) {
> +			close(open_proc_self_fd);
> +			open_proc_self_fd = -1;
> +		}
>  		return open_proc_self_fd;
> -	else if (pid == open_proc_pid)
> +	} else if (pid == open_proc_pid)
>  		return open_proc_fd;
>  	else
>  		return -1;
> _______________________________________________
> CRIU mailing list
> CRIU at openvz.org
> https://lists.openvz.org/mailman/listinfo/criu


More information about the CRIU mailing list