On Fri, Oct 08, 2021 at 10:05:36AM +0200, David Hildenbrand wrote: > On 08.10.21 01:50, Nadav Amit wrote: > > From: Nadav Amit <namit@xxxxxxxxxx> > > > > Userfaultfd is supposed to provide the full address (i.e., unmasked) of > > the faulting access back to userspace. However, that is not the case for > > quite some time. > > > > Even running "userfaultfd_demo" from the userfaultfd man page provides > > the wrong output (and contradicts the man page). Notice that > > "UFFD_EVENT_PAGEFAULT event" shows the masked address. > > > > Address returned by mmap() = 0x7fc5e30b3000 > > > > fault_handler_thread(): > > poll() returns: nready = 1; POLLIN = 1; POLLERR = 0 > > UFFD_EVENT_PAGEFAULT event: flags = 0; address = 7fc5e30b3000 > > (uffdio_copy.copy returned 4096) > > Read address 0x7fc5e30b300f in main(): A > > Read address 0x7fc5e30b340f in main(): A > > Read address 0x7fc5e30b380f in main(): A > > Read address 0x7fc5e30b3c0f in main(): A > > > > Add a new "real_address" field to vmf to hold the unmasked address. It > > is possible to keep the unmasked address in the existing address field > > (and mask whenever necessary) instead, but this is likely to cause > > backporting problems of this patch. > > Can we be sure that no existing users will rely on this behavior that has > been the case since end of 2016 IIRC, one year after UFFD was upstreamed? I > do wonder what the official ABI nowadays is, because man pages aren't > necessarily the source of truth. > > I checked QEMU (postcopy live migration), and I think it should be fine with > this change. CRIU is Ok with this change, we anyway mask the address. -- Sincerely yours, Mike.