Commit 04d1c9d6 authored by Dev Jain's avatar Dev Jain Committed by Andrew Morton
Browse files

mm/mremap: honour writable bit in mremap pte batching

Currently mremap folio pte batch ignores the writable bit during figuring
out a set of similar ptes mapping the same folio.  Suppose that the first
pte of the batch is writable while the others are not - set_ptes will end
up setting the writable bit on the other ptes, which is a violation of
mremap semantics.  Therefore, use FPB_RESPECT_WRITE to check the writable
bit while determining the pte batch.

Link: https://lkml.kernel.org/r/20251028063952.90313-1-dev.jain@arm.com


Signed-off-by: default avatarDev Jain <dev.jain@arm.com>
Fixes: f822a9a8 ("mm: optimize mremap() by PTE batching")
Reported-by: default avatarDavid Hildenbrand <david@redhat.com>
Debugged-by: default avatarDavid Hildenbrand <david@redhat.com>
Acked-by: default avatarDavid Hildenbrand <david@redhat.com>
Acked-by: default avatarPedro Falcato <pfalcato@suse.de>
Reviewed-by: default avatarLorenzo Stoakes <lorenzo.stoakes@oracle.com>
Cc: Barry Song <baohua@kernel.org>
Cc: Jann Horn <jannh@google.com>
Cc: Liam Howlett <liam.howlett@oracle.com>
Cc: Vlastimil Babka <vbabka@suse.cz>
Cc: <stable@vger.kernel.org>	[6.17+]
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
parent ec4d11fc
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -187,7 +187,7 @@ static int mremap_folio_pte_batch(struct vm_area_struct *vma, unsigned long addr
	if (!folio || !folio_test_large(folio))
		return 1;

	return folio_pte_batch(folio, ptep, pte, max_nr);
	return folio_pte_batch_flags(folio, NULL, ptep, &pte, max_nr, FPB_RESPECT_WRITE);
}

static int move_ptes(struct pagetable_move_control *pmc,