[CRIU] [PATCH] rst alloc: align on reporting cpos too

Pavel Emelyanov xemul at virtuozzo.com
Wed Feb 10 05:37:59 PST 2016


On 02/09/2016 08:38 PM, Tycho Andersen wrote:
> Since we align in rst_mem_alloc, we should also align when reporting the
> current position; if we don't and things get unlucky, we report a different
> position than where the pointer is actually allocated, which fucks things
> up quite bad :)

Applied, thanks.

However, if I do this:

x = rst_mem_cpos()
x2 = rst_mem_alloc_cont()

then x will not correspond to x2 since the latter doesn't align what
it allocates.

I've proposed to introduce a call rst_mem_alogn() that would just
shift the "free" pointer up to the nearest aligned value. With this
any combination would work.

-- Pavel

> Closes #111
> 
> Signed-off-by: Tycho Andersen <tycho.andersen at canonical.com>
> ---
>  rst-malloc.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/rst-malloc.c b/rst-malloc.c
> index 3556980..8e17255 100644
> --- a/rst-malloc.c
> +++ b/rst-malloc.c
> @@ -128,7 +128,7 @@ unsigned long rst_mem_cpos(int type)
>  {
>  	struct rst_mem_type_s *t = &rst_mems[type];
>  	BUG_ON(!t->remapable || !t->enabled);
> -	return t->free_mem - t->buf;
> +	return ((void*) round_up((unsigned long)t->free_mem, sizeof(void *))) - t->buf;
>  }
>  
>  void *rst_mem_remap_ptr(unsigned long pos, int type)
> 



More information about the CRIU mailing list