[CRIU] error in VDSO remap

Tycho Andersen tycho.andersen at canonical.com
Thu Jul 16 09:15:55 PDT 2015


On Thu, Jul 16, 2015 at 11:11:51AM +0300, Cyrill Gorcunov wrote:
> On Wed, Jul 15, 2015 at 04:28:46PM +0300, Cyrill Gorcunov wrote:
> > On Wed, Jul 15, 2015 at 06:48:53AM -0600, Tycho Andersen wrote:
> > > Hy Cyrill,
> > > 
> > > On Thu, Jun 04, 2015 at 08:09:00PM +0300, Cyrill Gorcunov wrote:
> > > > On Thu, Jun 04, 2015 at 10:59:28AM -0600, Tycho Andersen wrote:
> > > > > Hi Cyrill,
> > > > > > 
> > > > > > Could you please give the patch a shot?
> > > > > 
> > > > > No luck, now I'm getting:
> > > > > 
> > > > > http://files.tycho.ws/tmp/vdso-crash-after-patch.tar.gz
> > > > 
> > > > Thank for testing! Will ping if I get some idea.
> > > 
> > > I'm still hitting this, any ideas?
> > 
> > Nope yet. Gonna take a look, thanks for reminder (alsmost forgot about it).
> 
> Could you please run the patch attached and once fail happen -- send me
> both (images and logs) please.

Thanks, Cyrill. I've tried a bunch this morning to reproduce this and
I can't. I'm sure I'm just getting unlucky, but when I can reproduce
it I'll reply to this :)

Tycho

> From 0f97e02996f5919f6bac485b2eff5774eb5f0e00 Mon Sep 17 00:00:00 2001
> From: Cyrill Gorcunov <gorcunov at openvz.org>
> Date: Thu, 16 Jul 2015 11:09:31 +0300
> Subject: [PATCH] vdso: debug -- show memory map on remap failure
> 
> Signed-off-by: Cyrill Gorcunov <gorcunov at openvz.org>
> ---
>  arch/x86/vdso-pie.c | 27 +++++++++++++++++++++++++--
>  1 file changed, 25 insertions(+), 2 deletions(-)
> 
> diff --git a/arch/x86/vdso-pie.c b/arch/x86/vdso-pie.c
> index 5330531c7623..2d878fabff0b 100644
> --- a/arch/x86/vdso-pie.c
> +++ b/arch/x86/vdso-pie.c
> @@ -248,6 +248,29 @@ err_oob:
>  	return -EFAULT;
>  }
>  
> +static void vdso_debug_show_self_maps(void)
> +{
> +	int fd = sys_open("/proc/self/maps", O_RDONLY, 0);
> +	if (fd >= 0) {
> +		char buf[128];
> +		long len, i, pid = sys_getpid();
> +
> +		do {
> +			len = sys_read(fd, buf, sizeof(buf));
> +			if (len > 0) {
> +				for (i = 0; i < len; i++) {
> +					if (buf[i] != '\n')
> +						continue;
> +					buf[i] = '\0';
> +					sys_lseek(fd, -(len - i - 1), SEEK_CUR);
> +					break;
> +				}
> +				pr_debug("cm: %i: %s\n", (int)pid, buf);
> +			}
> +		} while (len > 0);
> +	}
> +}
> +
>  static int vdso_remap(char *who, unsigned long from, unsigned long to, size_t size)
>  {
>  	unsigned long addr;
> @@ -256,8 +279,8 @@ static int vdso_remap(char *who, unsigned long from, unsigned long to, size_t si
>  
>  	addr = sys_mremap(from, size, size, MREMAP_MAYMOVE | MREMAP_FIXED, to);
>  	if (addr != to) {
> -		pr_err("Unable to remap %lx -> %lx %lx\n",
> -		       from, to, addr);
> +		pr_err("Unable to remap %lx -> %lx %lx\n", from, to, addr);
> +		vdso_debug_show_self_maps();
>  		return -1;
>  	}
>  
> -- 
> 2.4.3
> 



More information about the CRIU mailing list