[PATCH 05/28] mm, swap: sanitize swap cache lookup convention

From: Barry Song
Date: Mon May 19 2025 - 00:39:10 EST


> From: Kairui Song <kasong@xxxxxxxxxxx>

> diff --git a/mm/userfaultfd.c b/mm/userfaultfd.c
> index e5a0db7f3331..5b4f01aecf35 100644
> --- a/mm/userfaultfd.c
> +++ b/mm/userfaultfd.c
> @@ -1409,6 +1409,10 @@ static int move_pages_pte(struct mm_struct *mm, pmd_t *dst_pmd, pmd_t *src_pmd,
> goto retry;
> }
> }
> + if (!folio_swap_contains(src_folio, entry)) {
> + err = -EBUSY;
> + goto out;
> + }

It seems we don't need this. In move_swap_pte(), we have been checking pte pages
are stable:

if (!is_pte_pages_stable(dst_pte, src_pte, orig_dst_pte, orig_src_pte,
dst_pmd, dst_pmdval)) {
double_pt_unlock(dst_ptl, src_ptl);
return -EAGAIN;
}

Also, -EBUSY is somehow incorrect error code.

> err = move_swap_pte(mm, dst_vma, dst_addr, src_addr, dst_pte, src_pte,
> orig_dst_pte, orig_src_pte, dst_pmd, dst_pmdval,
> dst_ptl, src_ptl, src_folio);
>

Thanks
Barry