]> git.baikalelectronics.ru Git - kernel.git/commit
userfaultfd: provide properly masked address for huge-pages
authorNadav Amit <namit@vmware.com>
Mon, 11 Jul 2022 16:59:06 +0000 (09:59 -0700)
committerakpm <akpm@linux-foundation.org>
Wed, 27 Jul 2022 01:25:01 +0000 (18:25 -0700)
commit0f860ae547139dc5cbbbff826ca1536fb8e78f8f
tree6e7a6d1a112a50d3607adcbd9787f2a08fe366ae
parentff896a9942d56799a7cce1dedc4b4f0c5fbaed11
userfaultfd: provide properly masked address for huge-pages

Commit 976564d0daca ("userfaultfd: provide unmasked address on
page-fault") was introduced to fix an old bug, in which the offset in the
address of a page-fault was masked.  Concerns were raised - although were
never backed by actual code - that some userspace code might break because
the bug has been around for quite a while.  To address these concerns a
new flag was introduced, and only when this flag is set by the user,
userfaultfd provides the exact address of the page-fault.

The commit however had a bug, and if the flag is unset, the offset was
always masked based on a base-page granularity.  Yet, for huge-pages, the
behavior prior to the commit was that the address is masked to the
huge-page granulrity.

While there are no reports on real breakage, fix this issue.  If the flag
is unset, use the address with the masking that was done before.

Link: https://lkml.kernel.org/r/20220711165906.2682-1-namit@vmware.com
Fixes: 976564d0daca ("userfaultfd: provide unmasked address on page-fault")
Signed-off-by: Nadav Amit <namit@vmware.com>
Reported-by: James Houghton <jthoughton@google.com>
Reviewed-by: Mike Rapoport <rppt@linux.ibm.com>
Reviewed-by: Peter Xu <peterx@redhat.com>
Reviewed-by: James Houghton <jthoughton@google.com>
Cc: David Hildenbrand <david@redhat.com>
Cc: Jan Kara <jack@suse.cz>
Cc: Andrea Arcangeli <aarcange@redhat.com>
Cc: <stable@vger.kernel.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
fs/userfaultfd.c