mirror of
https://github.com/torvalds/linux.git
synced 2026-06-04 20:46:48 +02:00
userfaultfd: refuse to __mfill_atomic_pte() for unsupported VMAs
__mfill_atomic_pte() unconditionally dereferences ops because there is an
assumption that VMAs that can undergo mfill_* operations are vetted on
registration and must have valid vm_uffd_ops.
Add a guard against potential bugs and make sure __mfill_atomic_pte()
bails out if ops is NULL.
Link: https://lore.kernel.org/20260527184751.4147364-3-rppt@kernel.org
Fixes: ad9ac30813 ("userfaultfd: introduce vm_uffd_ops->alloc_folio()")
Signed-off-by: Mike Rapoport (Microsoft) <rppt@kernel.org>
Suggested-by: Lorenzo Stoakes <ljs@kernel.org>
Reviewed-by: Lorenzo Stoakes <ljs@kernel.org>
Reviewed-by: David CARLIER <devnexen@gmail.com>
Cc: David Hildenbrand <david@kernel.org>
Cc: Liam R. Howlett <liam@infradead.org>
Cc: Michael Bommarito <michael.bommarito@gmail.com>
Cc: Peter Xu <peterx@redhat.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
This commit is contained in:
parent
85668fda93
commit
df3ee3b3bb
|
|
@ -552,6 +552,11 @@ static int __mfill_atomic_pte(struct mfill_state *state,
|
|||
struct folio *folio;
|
||||
int ret;
|
||||
|
||||
if (!ops) {
|
||||
VM_WARN_ONCE(1, "UFFDIO_COPY for unsupported VMA");
|
||||
return -EOPNOTSUPP;
|
||||
}
|
||||
|
||||
folio = ops->alloc_folio(state->vma, state->dst_addr);
|
||||
if (!folio)
|
||||
return -ENOMEM;
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user