[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