Re: [PATCH v2 21/26] userfaultfd: wp: add the writeprotect API to userfaultfd ioctl

From: Peter Xu
Date: Mon Feb 25 2019 - 03:31:27 EST


On Thu, Feb 21, 2019 at 01:28:25PM -0500, Jerome Glisse wrote:
> On Tue, Feb 12, 2019 at 10:56:27AM +0800, Peter Xu wrote:
> > From: Andrea Arcangeli <aarcange@xxxxxxxxxx>
> >
> > v1: From: Shaohua Li <shli@xxxxxx>
> >
> > v2: cleanups, remove a branch.
> >
> > [peterx writes up the commit message, as below...]
> >
> > This patch introduces the new uffd-wp APIs for userspace.
> >
> > Firstly, we'll allow to do UFFDIO_REGISTER with write protection
> > tracking using the new UFFDIO_REGISTER_MODE_WP flag. Note that this
> > flag can co-exist with the existing UFFDIO_REGISTER_MODE_MISSING, in
> > which case the userspace program can not only resolve missing page
> > faults, and at the same time tracking page data changes along the way.
> >
> > Secondly, we introduced the new UFFDIO_WRITEPROTECT API to do page
> > level write protection tracking. Note that we will need to register
> > the memory region with UFFDIO_REGISTER_MODE_WP before that.
> >
> > Signed-off-by: Andrea Arcangeli <aarcange@xxxxxxxxxx>
> > [peterx: remove useless block, write commit message, check against
> > VM_MAYWRITE rather than VM_WRITE when register]
> > Signed-off-by: Peter Xu <peterx@xxxxxxxxxx>
>
> I am not an expert with userfaultfd code but it looks good to me so:
>
> Also see my question down below, just a minor one.
>
> Reviewed-by: JÃrÃme Glisse <jglisse@xxxxxxxxxx>
>
> > ---
> > fs/userfaultfd.c | 82 +++++++++++++++++++++++++-------
> > include/uapi/linux/userfaultfd.h | 11 +++++
> > 2 files changed, 77 insertions(+), 16 deletions(-)
> >
>
> [...]
>
> > diff --git a/include/uapi/linux/userfaultfd.h b/include/uapi/linux/userfaultfd.h
> > index 297cb044c03f..1b977a7a4435 100644
> > --- a/include/uapi/linux/userfaultfd.h
> > +++ b/include/uapi/linux/userfaultfd.h
> > @@ -52,6 +52,7 @@
> > #define _UFFDIO_WAKE (0x02)
> > #define _UFFDIO_COPY (0x03)
> > #define _UFFDIO_ZEROPAGE (0x04)
> > +#define _UFFDIO_WRITEPROTECT (0x06)
> > #define _UFFDIO_API (0x3F)
>
> What did happen to ioctl 0x05 ? :)

It simply because it was 0x06 in Andrea's tree. :-)

https://git.kernel.org/pub/scm/linux/kernel/git/andrea/aa.git/commit/?h=userfault&id=ad0c3bec9897d8c8617ecaeb3110d3bdf884b15c

Andrea introduced _UFFDIO_REMAP first in his original work which took
0x05 (hmm... not really the "very" original, but the one after
Shaohua's work) then _UFFDIO_WRITEPROTECT which took 0x06. I'm afraid
there's already userspace programs that have linked with that tree and
the numbers (I believe LLNL and umap is one of them, people may not
start to use it very seriesly but still they can be distributed and
start doing some real work...). I'm using the same number here
considering that it might be good to simply even don't break any of
the experimental programs if it's easy to achieve (for either existing
uffd-wp but also the new remap interface users if there is), after all
these numbers are really adhoc for us. If anyone doesn't like this I
can for sure switch to 0x05 again if that looks cuter.

Thanks,

--
Peter Xu