[CRIU] [PATCH] files: check fd flags after restore

Pavel Emelyanov xemul at parallels.com
Tue Dec 15 03:31:51 PST 2015


On 12/14/2015 06:19 PM, Stanislav Kinsburskiy wrote:
> System call sys_fcntl() in _some_ kernels can silently drop some flags during
> set and return success code.

What are these flags?

> This patch adds double check, that all the fd flags were really set.
> 
> Signed-off-by: Stanislav Kinsburskiy <skinsbursky at virtuozzo.com>
> ---
>  files.c |   11 +++++++++++
>  1 file changed, 11 insertions(+)
> 
> diff --git a/files.c b/files.c
> index a27667d..751a9a9 100644
> --- a/files.c
> +++ b/files.c
> @@ -741,6 +741,17 @@ int set_fd_flags(int fd, int flags)
>  	ret = fcntl(fd, F_SETFL, flags);
>  	if (ret < 0)
>  		goto err;
> +
> +	/* Let's check, that now actual flags contains those we need */
> +	ret = fcntl(fd, F_GETFL, 0);
> +	if (ret < 0)
> +		goto err;
> +
> +	if (ret != flags) {
> +		pr_err("fcntl call on fd %d (flags %#o) succeeded, "
> +			"but some flags were dropped: %#o\n", fd, flags, ret);
> +		return -1;
> +	}
>  	return 0;
>  
>  err:
> 
> _______________________________________________
> CRIU mailing list
> CRIU at openvz.org
> https://lists.openvz.org/mailman/listinfo/criu
> .
> 



More information about the CRIU mailing list