[CRIU] [PATCH] seize: get_freezer_state -- Relax stack

Andrew Vagin avagin at virtuozzo.com
Wed Dec 9 06:12:22 PST 2015


On Wed, Dec 09, 2015 at 04:57:05PM +0300, Cyrill Gorcunov wrote:
> For historical reason we allocate the complete PATH_MAX
> here just to fetch a word of freezer state. Lets relax
> the stack pressue and rename @path to @state. Same time
> make states @frozen, @freezing, @thawed being static,
> we don't export them.
>

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

> Signed-off-by: Cyrill Gorcunov <gorcunov at openvz.org>
> ---
>  seize.c | 30 +++++++++++++++++-------------
>  1 file changed, 17 insertions(+), 13 deletions(-)
> 
> diff --git a/seize.c b/seize.c
> index de5c929a9d39..ca623fea28dd 100644
> --- a/seize.c
> +++ b/seize.c
> @@ -20,35 +20,39 @@
>  
>  #define NR_ATTEMPTS 5
>  
> -const char frozen[]	= "FROZEN";
> -const char freezing[]	= "FREEZING";
> -const char thawed[]	= "THAWED";
> +static const char frozen[]	= "FROZEN";
> +static const char freezing[]	= "FREEZING";
> +static const char thawed[]	= "THAWED";
>  
>  static const char *get_freezer_state(int fd)
>  {
> +	char state[32];
>  	int ret;
> -	char path[PATH_MAX];
> +
> +	BUILD_BUG_ON((sizeof(state) < sizeof(frozen))	||
> +		     (sizeof(state) < sizeof(freezing))	||
> +		     (sizeof(state) < sizeof(thawed)));
>  
>  	lseek(fd, 0, SEEK_SET);
> -	ret = read(fd, path, sizeof(path) - 1);
> +	ret = read(fd, state, sizeof(state) - 1);
>  	if (ret <= 0) {
>  		pr_perror("Unable to get a current state");
>  		goto err;
>  	}
> -	if (path[ret - 1] == '\n')
> -		path[ret - 1] = 0;
> +	if (state[ret - 1] == '\n')
> +		state[ret - 1] = 0;
>  	else
> -		path[ret] = 0;
> +		state[ret] = 0;
>  
> -	pr_debug("freezer.state=%s\n", path);
> -	if (strcmp(path, frozen) == 0)
> +	pr_debug("freezer.state=%s\n", state);
> +	if (strcmp(state, frozen) == 0)
>  		return frozen;
> -	if (strcmp(path, freezing) == 0)
> +	else if (strcmp(state, freezing) == 0)
>  		return freezing;
> -	if (strcmp(path, thawed) == 0)
> +	else if (strcmp(state, thawed) == 0)
>  		return thawed;
>  
> -	pr_err("Unknown freezer state: %s\n", path);
> +	pr_err("Unknown freezer state: %s\n", state);
>  err:
>  	return NULL;
>  }
> -- 
> 2.5.0
> 


More information about the CRIU mailing list