[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