mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-07 03:15:31 +09:00
UPSTREAM: KVM: arm64: Set the MTE tag bit before releasing the page
Setting a page flag without holding a reference to the page is living dangerously. In the tag-writing path, we drop the reference to the page by calling kvm_release_pfn_dirty(), and only then set the PG_mte_tagged bit. It would be safer to do it the other way round. Fixes:f0376edb1d("KVM: arm64: Add ioctl to fetch/store tags in a guest") Cc: Catalin Marinas <catalin.marinas@arm.com> Reviewed-by: Steven Price <steven.price@arm.com> Signed-off-by: Marc Zyngier <maz@kernel.org> Link: https://lore.kernel.org/r/87k0mjidwb.wl-maz@kernel.org (cherry picked from commit98db7259fa) Signed-off-by: Will Deacon <willdeacon@google.com> Bug: 192636784 Change-Id: Iea5ad082147127c19a580c98629ac60c696092f8
This commit is contained in:
committed by
Will Deacon
parent
71c05826d6
commit
663bbfa2a4
@@ -1058,6 +1058,14 @@ long kvm_vm_ioctl_mte_copy_tags(struct kvm *kvm,
|
||||
} else {
|
||||
num_tags = mte_copy_tags_from_user(maddr, tags,
|
||||
MTE_GRANULES_PER_PAGE);
|
||||
|
||||
/*
|
||||
* Set the flag after checking the write
|
||||
* completed fully
|
||||
*/
|
||||
if (num_tags == MTE_GRANULES_PER_PAGE)
|
||||
set_bit(PG_mte_tagged, &page->flags);
|
||||
|
||||
kvm_release_pfn_dirty(pfn);
|
||||
}
|
||||
|
||||
@@ -1066,10 +1074,6 @@ long kvm_vm_ioctl_mte_copy_tags(struct kvm *kvm,
|
||||
goto out;
|
||||
}
|
||||
|
||||
/* Set the flag after checking the write completed fully */
|
||||
if (write)
|
||||
set_bit(PG_mte_tagged, &page->flags);
|
||||
|
||||
gfn++;
|
||||
tags += num_tags;
|
||||
length -= PAGE_SIZE;
|
||||
|
||||
Reference in New Issue
Block a user