Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 16 Oct 2020 21:08:46 +0200
From:      Paul Floyd <pjfloyd@wanadoo.fr>
To:        FreeBSD Hackers <freebsd-hackers@freebsd.org>
Subject:   Re: Extra memory mapping seen on freebsd-12 which was not seen in freebsd-11
Message-ID:  <C50BCC03-832E-4CB7-8078-0E304705E757@wanadoo.fr>
In-Reply-To: <CAB6rxaRMOpx9eotjuNuUX_Ua3UZ-0KCbFdTSdEwXptjbG1%2BGUA@mail.gmail.com>
References:  <CAB6rxaSNSoCywTy6tx6w%2B%2B-aJhQHb3FJiHoRL0vXs2CJAHe1OA@mail.gmail.com> <9CCF59F6-06F2-4352-94E5-C508E165D0C2@wanadoo.fr> <CAB6rxaRMOpx9eotjuNuUX_Ua3UZ-0KCbFdTSdEwXptjbG1%2BGUA@mail.gmail.com>

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


> On 16 Oct 2020, at 07:13, karnajit wangkhem <karnajitw@gmail.com> =
wrote:
>=20
> Thanks for the reply. It helped in my understanding.
>=20
> Below is a sample code
>=20
> #include <stdio.h>
> #include <string.h>
> #include <errno.h>
> #include <sys/mman.h>
>=20
> 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);
>  }
>=20
>  return 0;
> }
>=20
> Now, the below code under valgrind will give
> - mmap failed. err (Invalid argument)
>=20
> 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 =
to do
> the following mmap.
> - str =3D Hello World
>=20
> 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
>=20
> So, is it right for the application with or without valgrind to cross =
the
> above boundary, If that memory which the application reserved is just =
for
> normal application specific use?

Hi

Obviously threre are some restrictions for the guest application running =
under Valgrind.=20
Valgrind needs its own stack and heap, so the guest can=E2=80=99t mmap =
these regions.

Why do you need to mmap into this region?

A+
Paul




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?C50BCC03-832E-4CB7-8078-0E304705E757>