Messages in this thread |  | | Subject | Re: [RFC PATCH 01/13] fs/userfaultfd: fix wrong error code on WP & !VM_MAYWRITE | From | Mike Kravetz <> | Date | Tue, 1 Dec 2020 13:22:32 -0800 |
| |
On 11/28/20 4:45 PM, Nadav Amit wrote: > From: Nadav Amit <namit@vmware.com> > > It is possible to get an EINVAL error instead of EPERM if the following > test vm_flags have VM_UFFD_WP but do not have VM_MAYWRITE, as "ret" is > overwritten since commit cab350afcbc9 ("userfaultfd: hugetlbfs: allow > registration of ranges containing huge pages"). > > Fix it. > > Cc: Mike Kravetz <mike.kravetz@oracle.com> > Cc: Jens Axboe <axboe@kernel.dk> > Cc: Andrea Arcangeli <aarcange@redhat.com> > Cc: Peter Xu <peterx@redhat.com> > Cc: Alexander Viro <viro@zeniv.linux.org.uk> > Cc: io-uring@vger.kernel.org > Cc: linux-fsdevel@vger.kernel.org > Cc: linux-kernel@vger.kernel.org > Cc: linux-mm@kvack.org > Fixes: cab350afcbc9 ("userfaultfd: hugetlbfs: allow registration of ranges containing huge pages") > Signed-off-by: Nadav Amit <namit@vmware.com> > --- > fs/userfaultfd.c | 1 + > 1 file changed, 1 insertion(+) > > diff --git a/fs/userfaultfd.c b/fs/userfaultfd.c > index 000b457ad087..c8ed4320370e 100644 > --- a/fs/userfaultfd.c > +++ b/fs/userfaultfd.c > @@ -1364,6 +1364,7 @@ static int userfaultfd_register(struct userfaultfd_ctx *ctx, > if (end & (vma_hpagesize - 1)) > goto out_unlock; > } > + ret = -EPERM; > if ((vm_flags & VM_UFFD_WP) && !(cur->vm_flags & VM_MAYWRITE)) > goto out_unlock; >
Thanks! We should return EPERM in that case.
However, the check for VM_UFFD_WP && !VM_MAYWRITE went in after commit cab350afcbc9. I think it is more accurate to say that the issue was introduced with commit 63b2d4174c4a ("Introduce the new uffd-wp APIs for userspace."). The convention in userfaultfd_register() is that the return code is set before testing condition which could cause return. Therefore, when 63b2d4174c4a added the VM_UFFD_WP && !VM_MAYWRITE check, it should have also added the 'ret = -EPERM;' statement.
With changes to commit message and Fixes tag,
Reviewed-by: Mike Kravetz <mike.kravetz@oracle.com> -- Mike Kravetz
|  |