[PATCH v4 1/4] mm/migrate_device.c: Flush TLB while holding PTL
Peter Xu
peterx at redhat.com
Sat Sep 3 06:35:47 AEST 2022
On Fri, Sep 02, 2022 at 10:35:51AM +1000, Alistair Popple wrote:
> When clearing a PTE the TLB should be flushed whilst still holding the
> PTL to avoid a potential race with madvise/munmap/etc. For example
> consider the following sequence:
>
> CPU0 CPU1
> ---- ----
>
> migrate_vma_collect_pmd()
> pte_unmap_unlock()
> madvise(MADV_DONTNEED)
> -> zap_pte_range()
> pte_offset_map_lock()
> [ PTE not present, TLB not flushed ]
> pte_unmap_unlock()
> [ page is still accessible via stale TLB ]
> flush_tlb_range()
>
> In this case the page may still be accessed via the stale TLB entry
> after madvise returns. Fix this by flushing the TLB while holding the
> PTL.
>
> Signed-off-by: Alistair Popple <apopple at nvidia.com>
> Reported-by: Nadav Amit <nadav.amit at gmail.com>
> Reviewed-by: "Huang, Ying" <ying.huang at intel.com>
> Fixes: 8c3328f1f36a ("mm/migrate: migrate_vma() unmap page from vma while collecting pages")
> Cc: stable at vger.kernel.org
Acked-by: Peter Xu <peterx at redhat.com>
--
Peter Xu
More information about the Linuxppc-dev
mailing list