[CRIU] Re: [PATCH 5/6] parasite: Don't assign error number on logfd

Pavel Emelyanov xemul at parallels.com
Tue Feb 14 09:20:07 EST 2012


On 02/14/2012 05:42 PM, Cyrill Gorcunov wrote:
> In case if recv_fd failed we must not assign error
> number as logfd, it's bloody wrong. Moreover, never
> close descriptors which were not ever used or point
> to standart descriptors.

Assigning some other task's 2nd file descriptor is wrong
too. It's better to keep it -1 to have NO output at all.

> Signed-off-by: Cyrill Gorcunov <gorcunov at openvz.org>
> ---
>  include/types.h |    1 +
>  parasite.c      |   19 ++++++++++++++-----
>  2 files changed, 15 insertions(+), 5 deletions(-)
> 
> diff --git a/include/types.h b/include/types.h
> index b329630..4ae0c88 100644
> --- a/include/types.h
> +++ b/include/types.h
> @@ -10,6 +10,7 @@
>  #define STDIN_FILENO	0
>  #define STDOUT_FILENO	1
>  #define STDERR_FILENO	2
> +#define STDFILENO_MAX	2
>  
>  /* prctl */
>  #define ARCH_SET_GS 0x1001
> diff --git a/parasite.c b/parasite.c
> index edda844..3ec0f22 100644
> --- a/parasite.c
> +++ b/parasite.c
> @@ -27,7 +27,7 @@ static void __parasite_data *brk_tail;
>  
>  static struct page_entry __parasite_data page;
>  static struct vma_entry __parasite_data vma;
> -static int __parasite_data logfd = -1;
> +static int __parasite_data logfd = STDOUT_FILENO;
>  static int __parasite_data tsock = -1;
>  
>  static unsigned char __parasite_data hex[] = "0123456789abcdef";
> @@ -391,14 +391,23 @@ static int init(struct parasite_init_args *args)
>  
>  static int set_logfd()
>  {
> -	logfd = recv_fd(tsock);
> -	return logfd;
> +	int ret;
> +
> +	ret = recv_fd(tsock);
> +	if (ret >= 0)
> +		logfd = ret;
> +
> +	return ret;
>  }
>  
>  static int fini()
>  {
> -	sys_close(logfd);
> -	sys_close(tsock);
> +	if (logfd > STDFILENO_MAX)
> +		sys_close(logfd);
> +
> +	if (tsock >= 0)
> +		sys_close(tsock);
> +
>  	return 0;
>  }
>  



More information about the CRIU mailing list