mm: expose abnormal new_pte during move_ptes
authorPu Lehui <pulehui@huawei.com>
Thu, 29 May 2025 15:56:48 +0000 (15:56 +0000)
committerAndrew Morton <akpm@linux-foundation.org>
Fri, 6 Jun 2025 04:55:41 +0000 (21:55 -0700)
When executing move_ptes, the new_pte must be NULL, otherwise it will be
overwritten by the old_pte, and cause the abnormal new_pte to be leaked.
In order to make this problem to be more explicit, let's add WARN_ON_ONCE
when new_pte is not NULL.

[akpm@linux-foundation.org: s/WARN_ON_ONCE/VM_WARN_ON_ONCE/]
Link: https://lkml.kernel.org/r/20250529155650.4017699-3-pulehui@huaweicloud.com
Suggested-by: Oleg Nesterov <oleg@redhat.com>
Signed-off-by: Pu Lehui <pulehui@huawei.com>
Reviewed-by: Lorenzo Stoakes <lorenzo.stoakes@oracle.com>
Cc: Jann Horn <jannh@google.com>
Cc: Liam Howlett <liam.howlett@oracle.com>
Cc: "Masami Hiramatsu (Google)" <mhiramat@kernel.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Vlastimil Babka <vbabka@suse.cz>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
mm/mremap.c

index 83e359754961fb4fa7d279530bb78b2c48010ce7..60f6b8d0d5f0ba6abaec8c48c4229cb60d4371b3 100644 (file)
@@ -237,6 +237,8 @@ static int move_ptes(struct pagetable_move_control *pmc,
 
        for (; old_addr < old_end; old_pte++, old_addr += PAGE_SIZE,
                                   new_pte++, new_addr += PAGE_SIZE) {
+               VM_WARN_ON_ONCE(!pte_none(*new_pte));
+
                if (pte_none(ptep_get(old_pte)))
                        continue;