[CRIU] [PATCHv4] remote: Fix incorrect handling of `port` option

Andrei Vagin avagin at virtuozzo.com
Wed Jan 31 21:13:03 MSK 2018


Applied, thanks!

On Wed, Jan 31, 2018 at 10:24:44AM +0000, Radostin Stoyanov wrote:
> The `port` option is converted from unsigned short integer to
> network byte order twice. Unfortunately the 2nd conversion
> reverses the 1st one.
> 
> Example:
> 
> 	#include <stdio.h>
> 	#include <arpa/inet.h>
> 	#include <stdlib.h>
> 
> 	int main()
> 	{
> 	    printf("%d\n", htons(atoi("1234"))); /* 53764 */
> 	    printf("%d\n", htons(htons(atoi("1234")))); /* 1234 */
> 	    return 0;
> 	}
> 
> Signed-off-by: Radostin Stoyanov <rstoyanov1 at gmail.com>
> ---
>  criu/cr-service.c | 2 +-
>  criu/crtools.c    | 2 +-
>  criu/page-xfer.c  | 2 +-
>  criu/util.c       | 6 +++---
>  4 files changed, 6 insertions(+), 6 deletions(-)
> 
> diff --git a/criu/cr-service.c b/criu/cr-service.c
> index 33d41732..a1e637af 100644
> --- a/criu/cr-service.c
> +++ b/criu/cr-service.c
> @@ -377,7 +377,7 @@ static int setup_opts_from_req(int sk, CriuOpts *req)
>  	}
>  
>  	if (req->ps) {
> -		opts.port = htons((short)req->ps->port);
> +		opts.port = (short)req->ps->port;
>  
>  		if (!opts.lazy_pages) {
>  			opts.use_page_server = true;
> diff --git a/criu/crtools.c b/criu/crtools.c
> index 07bb2655..dffae5c8 100644
> --- a/criu/crtools.c
> +++ b/criu/crtools.c
> @@ -719,7 +719,7 @@ int main(int argc, char *argv[], char *envp[])
>  			opts.addr = optarg;
>  			break;
>  		case 1052:
> -			opts.port = htons(atoi(optarg));
> +			opts.port = atoi(optarg);
>  			if (!opts.port)
>  				goto bad_arg;
>  			break;
> diff --git a/criu/page-xfer.c b/criu/page-xfer.c
> index 9ae21161..b1624059 100644
> --- a/criu/page-xfer.c
> +++ b/criu/page-xfer.c
> @@ -1077,7 +1077,7 @@ int disconnect_from_page_server(void)
>  		return 0;
>  
>  	pr_info("Disconnect from the page server %s:%u\n",
> -			opts.addr, (int)ntohs(opts.port));
> +			opts.addr, opts.port);
>  
>  	if (opts.ps_socket != -1)
>  		/*
> diff --git a/criu/util.c b/criu/util.c
> index b252e93d..41eb15ac 100644
> --- a/criu/util.c
> +++ b/criu/util.c
> @@ -1275,7 +1275,7 @@ static int get_sockaddr_in(struct sockaddr_in *addr, char *host)
>  		return -1;
>  	}
>  
> -	addr->sin_port = opts.port;
> +	addr->sin_port = htons(opts.port);
>  	return 0;
>  }
>  
> @@ -1285,7 +1285,7 @@ int setup_tcp_server(char *type)
>  	struct sockaddr_in saddr;
>  	socklen_t slen = sizeof(saddr);
>  
> -	pr_info("Starting %s server on port %u\n", type, (int)ntohs(opts.port));
> +	pr_info("Starting %s server on port %u\n", type, opts.port);
>  
>  	sk = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);
>  	if (sk < 0) {
> @@ -1375,7 +1375,7 @@ int setup_tcp_client(char *addr)
>  	struct sockaddr_in saddr;
>  	int sk;
>  
> -	pr_info("Connecting to server %s:%u\n", addr, (int)ntohs(opts.port));
> +	pr_info("Connecting to server %s:%u\n", addr, opts.port);
>  
>  	if (get_sockaddr_in(&saddr, addr))
>  		return -1;
> -- 
> 2.14.3
> 
> _______________________________________________
> CRIU mailing list
> CRIU at openvz.org
> https://lists.openvz.org/mailman/listinfo/criu


More information about the CRIU mailing list