On Tue, Aug 25, 2020 at 04:42:32PM +1000, Alistair Popple wrote: > During memory migration a pte is temporarily replaced with a migration > swap pte. Some pte bits from the existing mapping such as the soft-dirty > and uffd write-protect bits are preserved by copying these to the > temporary migration swap pte. > > However these bits are not stored at the same location for swap and > non-swap ptes. Therefore testing these bits requires using the > appropriate helper function for the given pte type. > > Unfortunately several code locations were found where the wrong helper > function is being used to test soft_dirty and uffd_wp bits which leads > to them getting incorrectly set or cleared during page-migration. > > Fix these by using the correct tests based on pte type. > > Fixes: a5430dda8a3a ("mm/migrate: support un-addressable ZONE_DEVICE page in migration") > Fixes: 8c3328f1f36a ("mm/migrate: migrate_vma() unmap page from vma while collecting pages") > Fixes: f45ec5ff16a7 ("userfaultfd: wp: support swap and page migration") > Signed-off-by: Alistair Popple <alistair@xxxxxxxxxxxx> > Cc: stable@xxxxxxxxxxxxxxx Reviewed-by: Peter Xu <peterx@xxxxxxxxxx> -- Peter Xu