[CRIU] [PATCH] s390: Fix off-by-one error for task size detection
Andrei Vagin
avagin at virtuozzo.com
Tue Aug 8 04:22:21 MSK 2017
Applied, thanks!
On Mon, Aug 07, 2017 at 02:56:52PM +0200, Michael Holzheu wrote:
> The entries in /proc/<pid>/maps look like the following:
>
> 3fffffdf000-40000000000 rw-p 00000000 00:00 0
>
> The upper address is the first address that is *not* included in the
> address range.
>
> Our function max_mapped_addr() should return the last valid address
> for a process, but currently returns the first invalid address.
>
> This can lead to the following error message on kernel that have
> kernel commit ee71d16d22bb:
>
> Error (criu/proc_parse.c:694): Can't dump high memory region
> 1ffffffffff000-20000000000000 of task 24 because kernel commit ee71d16d22bb
> is missing
>
> Fix this and make max_mapped_addr() the last valid address (first invalid
> address - 1).
>
> Reported-by: Adrian Reber <areber at redhat.com>
> Signed-off-by: Michael Holzheu <holzheu at linux.vnet.ibm.com>
> ---
> compel/arch/s390/src/lib/infect.c | 4 ++--
> 1 file changed, 2 insertions(+), 2 deletions(-)
>
> diff --git a/compel/arch/s390/src/lib/infect.c b/compel/arch/s390/src/lib/infect.c
> index fcad338..1614fa6 100644
> --- a/compel/arch/s390/src/lib/infect.c
> +++ b/compel/arch/s390/src/lib/infect.c
> @@ -393,7 +393,7 @@ static unsigned long max_mapped_addr(void)
> }
> fclose(fp);
> out:
> - return addr_max;
> + return addr_max - 1;
> }
>
> /*
> @@ -454,7 +454,7 @@ static enum kernel_ts_level get_kernel_ts_level(void)
> unsigned long criu_end_addr = max_mapped_addr();
>
> /* Check for 5 levels */
> - if (criu_end_addr > TASK_SIZE_LEVEL_4)
> + if (criu_end_addr >= TASK_SIZE_LEVEL_4)
> return KERNEL_TS_LEVEL_5;
> else if (munmap((void *) TASK_SIZE_LEVEL_4, 0x1000) == 0)
> return KERNEL_TS_LEVEL_5;
> --
> 2.7.4
>
> _______________________________________________
> CRIU mailing list
> CRIU at openvz.org
> https://lists.openvz.org/mailman/listinfo/criu
More information about the CRIU
mailing list