Merge tag 'f2fs-for-5.16-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/jaegeu...
[linux-2.6-microblaze.git] / arch / arm64 / mm / copypage.c
index 70a71f3..b5447e5 100644 (file)
@@ -23,6 +23,15 @@ void copy_highpage(struct page *to, struct page *from)
 
        if (system_supports_mte() && test_bit(PG_mte_tagged, &from->flags)) {
                set_bit(PG_mte_tagged, &to->flags);
+               page_kasan_tag_reset(to);
+               /*
+                * We need smp_wmb() in between setting the flags and clearing the
+                * tags because if another thread reads page->flags and builds a
+                * tagged address out of it, there is an actual dependency to the
+                * memory access, but on the current thread we do not guarantee that
+                * the new page->flags are visible before the tags were updated.
+                */
+               smp_wmb();
                mte_copy_page_tags(kto, kfrom);
        }
 }