Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 17 Oct 2020 09:59:35 +0530
From:      karnajit wangkhem <karnajitw@gmail.com>
To:        Paul Floyd <pjfloyd@wanadoo.fr>
Cc:        FreeBSD Hackers <freebsd-hackers@freebsd.org>
Subject:   Re: Extra memory mapping seen on freebsd-12 which was not seen in freebsd-11
Message-ID:  <CAB6rxaSYv8Y7n5q-DrNR4x=d613k%2BibNOQ0NgnGCsyWdC0=u4g@mail.gmail.com>
In-Reply-To: <C50BCC03-832E-4CB7-8078-0E304705E757@wanadoo.fr>
References:  <CAB6rxaSNSoCywTy6tx6w%2B%2B-aJhQHb3FJiHoRL0vXs2CJAHe1OA@mail.gmail.com> <9CCF59F6-06F2-4352-94E5-C508E165D0C2@wanadoo.fr> <CAB6rxaRMOpx9eotjuNuUX_Ua3UZ-0KCbFdTSdEwXptjbG1%2BGUA@mail.gmail.com> <C50BCC03-832E-4CB7-8078-0E304705E757@wanadoo.fr>

next in thread | previous in thread | raw e-mail | index | archive | help
Hi Paul,

The mappings of these applications existed prior to the guard change, which
was fine as no mapping existed on the memory range. With migration to
stable 12, I was doubting that these mappings are no longer correct. But at
the same time, does valgrind have to own this segment, which only came post
certain freebsd releases?

Regards,
Karan

On Sat, Oct 17, 2020 at 12:39 AM Paul Floyd <pjfloyd@wanadoo.fr> wrote:

>
>
> > On 16 Oct 2020, at 07:13, karnajit wangkhem <karnajitw@gmail.com> wrote=
:
> >
> > Thanks for the reply. It helped in my understanding.
> >
> > Below is a sample code
> >
> > #include <stdio.h>
> > #include <string.h>
> > #include <errno.h>
> > #include <sys/mman.h>
> >
> > int main()
> > {
> >  char *str =3D NULL;
> >  str =3D (char *)mmap((void *)0x7fffdfffe000UL, 0x2000, PROT_READ |
> > PROT_WRITE, MAP_FIXED | MAP_ANON, -1, 0);
> >  if ((void *)str =3D=3D (void *)MAP_FAILED) {
> >    int err =3D errno;
> >    printf("mmap failed. err (%s)\n", strerror(err));
> >  } else {
> >    memcpy(str, "Hello World", 12);
> >    printf("str =3D %s\n", str);
> >  }
> >
> >  return 0;
> > }
> >
> > Now, the below code under valgrind will give
> > - mmap failed. err (Invalid argument)
> >
> > But, if we give control of this segment to the client program
> > with VG_(am_change_ownership_v_to_c), then valgrind allows the client t=
o
> do
> > the following mmap.
> > - str =3D Hello World
> >
> > And, the resultant procstat result looks like this:
> > 2382        0x7fbfff000        0x7fc001000 rwx    2    2   1   0 ----- =
df
> > 2382     0x7fffdfffe000     0x7fffe0000000 rw-    0    0   0   0 ----- =
--
> >   <<< Client mmap call
> > 2382     0x7fffe0000000     0x7ffffffdf000 ---    0    0   0   0 ----- =
--
> >     <<< 0x1000 bytes is taken away from the MAP_GUARD area
> > 2382     0x7ffffffdf000     0x7ffffffff000 rw-    1    1   1   0 ---D- =
df
> > 2382     0x7ffffffff000     0x800000000000 r-x    1    1 104   0 ----- =
ph
> >
> > So, is it right for the application with or without valgrind to cross t=
he
> > above boundary, If that memory which the application reserved is just f=
or
> > normal application specific use?
>
> Hi
>
> Obviously threre are some restrictions for the guest application running
> under Valgrind.
> Valgrind needs its own stack and heap, so the guest can=E2=80=99t mmap th=
ese
> regions.
>
> Why do you need to mmap into this region?
>
> A+
> Paul
>
> _______________________________________________
> freebsd-hackers@freebsd.org mailing list
> https://lists.freebsd.org/mailman/listinfo/freebsd-hackers
> To unsubscribe, send any mail to "freebsd-hackers-unsubscribe@freebsd.org=
"
>



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?CAB6rxaSYv8Y7n5q-DrNR4x=d613k%2BibNOQ0NgnGCsyWdC0=u4g>