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>