On Mon, Feb 01, 2021 at 01:29:02PM +0000, Marc Zyngier wrote: > Hi Greg, > > On 2021-02-01 12:41, gregkh@xxxxxxxxxxxxxxxxxxx wrote: > > The patch below does not apply to the 5.4-stable tree. > > If someone wants it applied there, or to any other stable or longterm > > tree, then please email the backport, including the original git commit > > id to <stable@xxxxxxxxxxxxxxx>. > > > > thanks, > > > > greg k-h > > > > ------------------ original commit in Linus's tree ------------------ > > > > From 139bc8a6146d92822c866cf2fd410159c56b3648 Mon Sep 17 00:00:00 2001 > > From: Marc Zyngier <maz@xxxxxxxxxx> > > Date: Thu, 21 Jan 2021 12:08:15 +0000 > > Subject: [PATCH] KVM: Forbid the use of tagged userspace addresses for > > memslots > > > > The use of a tagged address could be pretty confusing for the > > whole memslot infrastructure as well as the MMU notifiers. > > > > Forbid it altogether, as it never quite worked the first place. > > > > Cc: stable@xxxxxxxxxxxxxxx > > Reported-by: Rick Edgecombe <rick.p.edgecombe@xxxxxxxxx> > > Reviewed-by: Catalin Marinas <catalin.marinas@xxxxxxx> > > Signed-off-by: Marc Zyngier <maz@xxxxxxxxxx> > > > > diff --git a/Documentation/virt/kvm/api.rst > > b/Documentation/virt/kvm/api.rst > > index 4e5316ed10e9..c347b7083abf 100644 > > --- a/Documentation/virt/kvm/api.rst > > +++ b/Documentation/virt/kvm/api.rst > > @@ -1269,6 +1269,9 @@ field userspace_addr, which must point at user > > addressable memory for > > the entire memory slot size. Any object may back this memory, > > including > > anonymous memory, ordinary files, and hugetlbfs. > > > > +On architectures that support a form of address tagging, userspace_addr > > must > > +be an untagged address. > > + > > It is recommended that the lower 21 bits of guest_phys_addr and > > userspace_addr > > be identical. This allows large pages in the guest to be backed by > > large > > pages in the host. > > diff --git a/virt/kvm/kvm_main.c b/virt/kvm/kvm_main.c > > index 2541a17ff1c4..a9abaf5f8e53 100644 > > --- a/virt/kvm/kvm_main.c > > +++ b/virt/kvm/kvm_main.c > > @@ -1290,6 +1290,7 @@ int __kvm_set_memory_region(struct kvm *kvm, > > return -EINVAL; > > /* We can read the guest memory with __xxx_user() later on. */ > > if ((mem->userspace_addr & (PAGE_SIZE - 1)) || > > + (mem->userspace_addr != untagged_addr(mem->userspace_addr)) || > > !access_ok((void __user *)(unsigned long)mem->userspace_addr, > > mem->memory_size)) > > return -EINVAL; > > I'll post a revised patch for 5.4. No need to go beyond that as that's > the point where we allowed tagged addresses at the syscall boundary. Great, thanks, I didn't know how far back to take it :)