Laurent Dufour <ldufour@xxxxxxxxxxxxxxxxxx> writes: > Le 23/04/2019 à 18:04, Dave Hansen a écrit : >> On 4/23/19 4:16 AM, Laurent Dufour wrote: ... >>> There are 2 assumptions here: >>> 1. 'start' and 'end' are page aligned (this is guaranteed by __do_munmap(). >>> 2. the VDSO is 1 page (this is guaranteed by the union vdso_data_store on powerpc) >> >> Are you sure about #2? The 'vdso64_pages' variable seems rather >> unnecessary if the VDSO is only 1 page. ;) > > Hum, not so sure now ;) > I got confused, only the header is one page. > The test is working as a best effort, and don't cover the case where > only few pages inside the VDSO are unmmapped (start > > mm->context.vdso_base). This is not what CRIU is doing and so this was > enough for CRIU support. > > Michael, do you think there is a need to manage all the possibility > here, since the only user is CRIU and unmapping the VDSO is not a so > good idea for other processes ? Couldn't we implement the semantic that if any part of the VDSO is unmapped then vdso_base is set to zero? That should be fairly easy, eg: if (start < vdso_end && end >= mm->context.vdso_base) mm->context.vdso_base = 0; We might need to add vdso_end to the mm->context, but that should be OK. That seems like it would work for CRIU and make sense in general? cheers