[CRIU] [PATCH] Fixed negative returns issues introduced by remote images code.

Andrei Vagin avagin at virtuozzo.com
Tue Feb 28 15:25:54 PST 2017


On Wed, Mar 01, 2017 at 04:32:50AM +0100, rbruno at gsd.inesc-id.pt wrote:
> Hi Andrei,
> 
> here goes a patch to fix the negative returns issue.
> 
> Let me know if you prefer to receive this in another format. If you see
> any problem with the resolution of the problem, let me know.
> 
> ---
>  criu/fdstore.c          |  5 +++++
>  criu/files-reg.c        |  6 +++++-
>  criu/image.c            | 11 +++++++++--
>  criu/img-remote-proto.c |  2 +-
>  criu/img-remote.c       |  5 +++++
>  5 files changed, 25 insertions(+), 4 deletions(-)
> 
> diff --git a/criu/fdstore.c b/criu/fdstore.c
> index d9bed4d..bddd2ab 100644
> --- a/criu/fdstore.c
> +++ b/criu/fdstore.c
> @@ -100,6 +100,11 @@ int fdstore_get(int id)
>  	int sk = get_service_fd(FDSTORE_SK_OFF);
>  	int fd;
> 
> +	if (sk < 0) {
> +		pr_err("Unable get service fd");
> +		return -1;
> +	}
> +
>  	mutex_lock(&desc->lock);
>  	if (setsockopt(sk, SOL_SOCKET, SO_PEEK_OFF, &id, sizeof(id))) {
>  		mutex_unlock(&desc->lock);
> diff --git a/criu/files-reg.c b/criu/files-reg.c
> index 3b93bb9..bc2c330 100644
> --- a/criu/files-reg.c
> +++ b/criu/files-reg.c
> @@ -134,7 +134,11 @@ static int mkreg_ghost(char *path, u32 mode, struct
> ghost_file *gf, struct cr_im

Applying: Fixed negative returns issues introduced by remote images code.
fatal: corrupt patch at line 30

Looks like the previous two lines was the one line in an original patch.

How do you send patches? I recomend to use git send-email.
https://www.freedesktop.org/wiki/Software/PulseAudio/HowToUseGitSendEmail/

>  	if (gfd < 0)
>  		return -1;
> 
> -	ret = copy_file(img_raw_fd(img), gfd, 0);
> +	int rfd = img_raw_fd(img);
> +	if (rfd < 0)
> +		return -1;
> +
> +	ret = copy_file(rfd, gfd, 0);
>  	if (ret < 0)
>  		unlink(path);
>  	close(gfd);
> diff --git a/criu/image.c b/criu/image.c
> index 57d3c7b..7bf52d9 100644
> --- a/criu/image.c
> +++ b/criu/image.c
> @@ -333,8 +333,15 @@ int do_open_remote_image(int dfd, char *path, int flags)
>  	 * change to previous working dir and back to correctly open the image
>  	 * proxy and cache sockets. */
>  	int save = dirfd(opendir("."));
> -	if (fchdir(get_service_fd(IMG_FD_OFF)) < 0) {
> -		pr_debug("fchdir to dfd failed!\n");
> +	int service_fd = get_service_fd(IMG_FD_OFF);
> +
> +	if (service_fd < 0) {
> +		pr_err("Unable to get service fd.\n");
> +		return -1;
> +	}
> +
> +	if (fchdir(service_fd) < 0) {
> +		pr_perror("fchdir to dfd failed");
>  		return -1;
>  	}
> 
> diff --git a/criu/img-remote-proto.c b/criu/img-remote-proto.c
> index c05b921..34074f2 100644
> --- a/criu/img-remote-proto.c
> +++ b/criu/img-remote-proto.c
> @@ -593,7 +593,6 @@ void *accept_local_image_connections(void *port)
>  		if (cli_fd < 0) {
>  			if (!finished)
>  				pr_err("Unable to accept local image connection");
> -			close(cli_fd);
>  			return NULL;
>  		}
> 
> @@ -624,6 +623,7 @@ void *accept_local_image_connections(void *port)
>  		int fd = open_proc_rw(PROC_GEN, LAST_PID_PATH);
>  		if (fd < 0) {
>  			pr_perror("Can't open %s", LAST_PID_PATH);
> +			return NULL;
>  		}
> 
>  		if (flock(fd, LOCK_EX)) {
> diff --git a/criu/img-remote.c b/criu/img-remote.c
> index 337cb4a..7dbde0e 100644
> --- a/criu/img-remote.c
> +++ b/criu/img-remote.c
> @@ -127,6 +127,11 @@ int skip_remote_bytes(int fd, unsigned long len)
>  	int n = 0;
>  	unsigned long curr = 0;
> 
> +	if (fd < 0) {
> +		pr_perror("Invalid fd: %d", fd);
> +		return -1;
> +	}
> +
>  	for (; curr < len; ) {
>  		n = read(fd, buf, min(len - curr, (unsigned long)4096));
>  		if (n == 0) {
> -- 
> 1.9.1
> 
> 
> 
> _______________________________________________
> CRIU mailing list
> CRIU at openvz.org
> https://lists.openvz.org/mailman/listinfo/criu


More information about the CRIU mailing list