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>