All of lore.kernel.org
 help / color / mirror / Atom feed
From: sashiko-bot@kernel.org
To: "Fred Griffoul" <griffoul@gmail.com>,
	"Ackerley Tng" <ackerleytng@google.com>,
	"Paolo Bonzini" <pbonzini@redhat.com>,
	"Sean Christopherson" <seanjc@google.com>,
	"Jason Gunthorpe" <jgg@ziepe.ca>,
	"Kevin Tian" <kevin.tian@intel.com>
Cc: "Alex Williamson" <alex@shazbot.org>,
	"Alexander Graf" <graf@amazon.de>,
	"Alexander Viro" <viro@zeniv.linux.org.uk>,
	"Alexey Kardashevskiy" <aik@amd.com>,
	"Andrew Morton" <akpm@linux-foundation.org>,
	"Aneesh Kumar K . V" <aneesh.kumar@kernel.org>,
	"Ashish Kalra" <ashish.kalra@amd.com>,
	"Baolin Wang" <baolin.wang@linux.alibaba.com>,
	"Baolu Lu" <baolu.lu@linux.intel.com>,
	"Bill Wendling" <morbo@google.com>,
	"Borislav Petkov" <bp@alien8.de>,
	"Catalin Marinas" <catalin.marinas@arm.com>,
	"Christian Brauner" <brauner@kernel.org>,
	"Christian König" <christian.koenig@amd.com>,
	"Connor Williamson" <connordw@amazon.com>,
	"Dave Hansen" <dave.hansen@linux.intel.com>,
	"Dave Jiang" <dave.jiang@intel.com>,
	"David Hildenbrand" <david@kernel.org>,
	"David Rientjes" <rientjes@google.com>,
	"David Woodhouse" <dwmw2@infradead.org>,
	"Erdem Aktas" <erdemaktas@google.com>,
	"Frank van der Linden" <fvdl@google.com>,
	"Gregory Price" <gourry@gourry.net>,
	"H . Peter Anvin" <hpa@zytor.com>,
	"Hugh Dickins" <hughd@google.com>,
	"Ingo Molnar" <mingo@redhat.com>,
	"Jacob Pan" <jacob.pan@linux.microsoft.com>,
	"James Houghton" <jthoughton@google.com>,
	"Jan Kara" <jack@suse.cz>, "Jianxiong Gao" <jxgao@google.com>,
	"Joerg Roedel" <joro@8bytes.org>,
	"Joey Gouly" <joey.gouly@arm.com>,
	"John Starks" <John.Starks@microsoft.com>,
	"Jonathan Corbet" <corbet@lwn.net>,
	"Justin Stitt" <justinstitt@google.com>,
	"Lorenzo Stoakes" <ljs@kernel.org>,
	"Marc Zyngier" <maz@kernel.org>,
	"Michael Roth" <michael.roth@amd.com>,
	"Mike Rapoport" <rppt@kernel.org>,
	"Nathan Chancellor" <nathan@kernel.org>,
	"Nick Desaulniers" <ndesaulniers@google.com>,
	"Nicolin Chen" <nicolinc@nvidia.com>,
	"Oliver Upton" <oupton@kernel.org>,
	"Pratyush Yadav" <pratyush@kernel.org>,
	"Randy Dunlap" <rdunlap@infradead.org>,
	"Robin Murphy" <robin.murphy@arm.com>,
	"Samiullah Khawaja" <skhawaja@google.com>,
	"Shuah Khan" <shuah@kernel.org>,
	"Steffen Eiden" <seiden@linux.ibm.com>,
	"Steven Price" <steven.price@arm.com>,
	"Suzuki K Poulose" <suzuki.poulose@arm.com>,
	"Tarun Sahu" <tarunsahu@google.com>,
	"Thomas Gleixner" <tglx@kernel.org>,
	"Tom Lendacky" <thomas.lendacky@amd.com>,
	"Tycho Andersen" <tycho@kernel.org>,
	"Vishal Annapurve" <vannapurve@google.com>,
	"Vlastimil Babka" <vbabka@kernel.org>,
	"Will Deacon" <will@kernel.org>,
	"Xu Yilun" <yilun.xu@linux.intel.com>,
	"Yan Zhao" <yan.y.zhao@intel.com>,
	"Zenghui Yu" <yuzenghui@huawei.com>,
	x86@kernel.org, "Shuah Khan" <skhan@linuxfoundation.org>,
	"Fuad Tabba" <fuad.tabba@linux.dev>,
	kvm@vger.kernel.org, linux-mm@kvack.org
Subject: Re: [RFC PATCH 02/14] KVM: guest_memfd: Support read-only frames from PFN mode providers
Date: Wed, 28 Oct 2026 15:48:33 +0000	[thread overview]
Message-ID: <sashiko-outbox-188084@kernel.org> (raw)
In-Reply-To: <20261027154649.91571-3-griffoul@gmail.com>

Thank you for your contribution! Sashiko AI review found 4 potential issue(s) to consider:
- [High] KVM: guest_memfd: triggerable WARN_ON_ONCE(!writable) in kvm_gmem_get_pfn()
- [High] KVM: arm64: kvm_translate_vncr() rejects read-only frames on guest reads
- [High] KVM: guest_memfd: premature unlock in kvm_gmem_pfn_mkwrite() allows RO bypass
- [High] KVM: guest_memfd: Add block range before kvm_mmu_unmap_gfn_range()
--

commit 421ea1b76fdc664724f686d68f71491b37e2d2b4
Author: Fred Griffoul <fgriffo@amazon.co.uk>

KVM: guest_memfd: Support read-only frames from PFN mode providers

This commit adds an attributes output parameter to the PFN-mode provider
get_pfn() callback and defines GUEST_MEMFD_PFN_READONLY so providers can
lend read-only frames to guest_memfd. KVM maps such frames read-only in
guest and host page tables, exits to userspace on guest writes, raises
SIGBUS on host writes, and disallows using them to back private or
populated pages.

> diff --git a/arch/arm64/kvm/nested.c b/arch/arm64/kvm/nested.c
> index f1c414f1c3faf..ec3bcdc230cf9 100644
> --- a/arch/arm64/kvm/nested.c
> +++ b/arch/arm64/kvm/nested.c
> @@ -1615,12 +1615,19 @@ static int kvm_translate_vncr(struct kvm_vcpu *vcpu, bool *is_gmem)
>  			return -EFAULT;
>  		}
>  	} else {
> -		ret = kvm_gmem_get_pfn(vcpu->kvm, memslot, gfn, &pfn, NULL);
> +		ret = kvm_gmem_get_pfn(vcpu->kvm, memslot, gfn, &pfn, NULL,
> +				       &writable);
>  		if (ret) {
>  			kvm_prepare_memory_fault_exit(vcpu, vt->wr.pa, PAGE_SIZE,
>  					      write_fault, false, false);
>  			return ret;
>  		}
> +		/* The CPU writes the VNCR page: a read-only frame cannot back it. */
> +		if (!writable) {
> +			kvm_prepare_memory_fault_exit(vcpu, vt->wr.pa, PAGE_SIZE,
> +					      true, false, false);
> +			return -EFAULT;
> +		}
>  
>  		writable = !(memslot->flags & KVM_MEM_READONLY);
>  	}

[Severity: High]
Does kvm_translate_vncr() need to reject read-only frames even when the
guest is only reading from the VNCR page?

Under FEAT_NV2, the CPU reads from the VNCR_EL2 page when the guest
executes an MRS of a redirected EL1 system register (write_fault is false)
and writes to it when the guest executes an MSR (write_fault is true).
The rest of the VNCR handling in kvm_handle_vncr_abort() and
kvm_map_l1_vncr() already supports read-only backing frames (such as a
KVM_MEM_READONLY memslot) by recording vt->hpa_writable = writable and
mapping the fixmap as PAGE_KERNEL_RO when vt->hpa_writable is false:

arch/arm64/kvm/nested.c:kvm_handle_vncr_abort() {
	...
	case 0:
		perm = kvm_is_write_fault(vcpu) ? vt->wr.pw && vt->hpa_writable : vt->wr.pr;
		if (!perm)
			handle_vncr_perm(vcpu);
		break;
}

arch/arm64/kvm/nested.c:kvm_map_l1_vncr() {
	...
	if (vt->hpa_writable && vt->wr.pw && vt->wr.pr)
		prot = PAGE_KERNEL;
	else if (vt->wr.pr)
		prot = PAGE_KERNEL_RO;
	else
		prot = PAGE_NONE;
}

By checking !writable unconditionally in kvm_translate_vncr() and
exiting to userspace with write_fault hardcoded to true, a guest MRS read
of a VNCR-redirected register backed by a GUEST_MEMFD_PFN_READONLY frame
fails with KVM_EXIT_MEMORY_FAULT instead of mapping the VNCR page
read-only. In addition, if the guest's own EL2 Stage-1 translation lacks
permission (!vt->wr.pr or !vt->wr.pw), exiting here bypasses
handle_vncr_perm() and exits to host userspace instead of injecting a
Stage-1 permission fault into the guest.

Should kvm_translate_vncr() instead fold writable into
writable = writable && !(memslot->flags & KVM_MEM_READONLY), or only exit
when write_fault && !writable after verifying guest Stage-1 permissions?

[ ... ]

> diff --git a/virt/kvm/guest_memfd.c b/virt/kvm/guest_memfd.c
> index be26bd16d4207..1554a17906da8 100644
> --- a/virt/kvm/guest_memfd.c
> +++ b/virt/kvm/guest_memfd.c

[ ... ]

> @@ -721,13 +728,71 @@ static bool kvm_gmem_supports_mmap(struct inode *inode)

[ ... ]

> +/*
> + * A write to a read-only PTE, e.g. after mprotect(): allow it unless the frame
> + * is read only.  The core upgrades the PTE under its lock only if it did not
> + * change, and a provider that makes the frame read only revokes it first.
> + */
> +static vm_fault_t kvm_gmem_pfn_mkwrite(struct vm_fault *vmf)
> +{
> +	struct inode *inode = file_inode(vmf->vma->vm_file);
> +	vm_fault_t ret = 0;
> +	kvm_pfn_t pfn;
> +	u32 attrs;
> +	int r;
> +
> +	filemap_invalidate_lock_shared(inode->i_mapping);
> +	r = gmem_provider_get_pfn(GMEM_I(inode), vmf->pgoff, &pfn, NULL, &attrs);
> +	if (r)
> +		ret = vmf_error(r);
> +	else if (attrs & GUEST_MEMFD_PFN_READONLY)
> +		ret = VM_FAULT_SIGBUS;
> +	filemap_invalidate_unlock_shared(inode->i_mapping);
> +	return ret;
> +}

[Severity: High]
Can releasing filemap_invalidate_lock_shared() before returning from
kvm_gmem_pfn_mkwrite() allow a read-only frame to be upgraded to a
writable PTE after kvm_gmem_revoke()?

In mm/memory.c, wp_pfn_shared() drops the page table lock before calling
vma->vm_ops->pfn_mkwrite(vmf), and then calls finish_mkwrite_fault(),
which re-locks the PTE and upgrades it to writable if
pte_same(ptep_get(vmf->pte), vmf->orig_pte) holds:

mm/memory.c:wp_pfn_shared() {
	if (vma->vm_ops && vma->vm_ops->pfn_mkwrite) {
		...
		pte_unmap_unlock(vmf->pte, vmf->ptl);
		...
		ret = vma->vm_ops->pfn_mkwrite(vmf);
		if (ret & (VM_FAULT_ERROR | VM_FAULT_NOPAGE))
			return ret;
		return finish_mkwrite_fault(vmf, NULL);
	}
}

If a VMA with VM_WRITE | VM_SHARED has a present read-only special PTE
mapping PFN P (for example after mprotect(PROT_READ) followed by
mprotect(PROT_READ | PROT_WRITE), or faulted in while P was read-only and
later made writable), consider what happens when thread A writes to that
address:

1. Thread A enters wp_pfn_shared() -> kvm_gmem_pfn_mkwrite(), acquires
   filemap_invalidate_lock_shared(), sees attrs == 0 for PFN P, and drops
   filemap_invalidate_lock_shared().
2. Before thread A reaches finish_mkwrite_fault(), the provider marks PFN P
   as GUEST_MEMFD_PFN_READONLY and calls kvm_gmem_revoke(), which takes
   filemap_invalidate_lock() exclusively, zaps the PTE via
   unmap_mapping_range(), and drops filemap_invalidate_lock().
3. Thread B triggers a read fault on the same address.
   kvm_gmem_fault_user_mapping() -> kvm_gmem_pfn_fault() sees
   GUEST_MEMFD_PFN_READONLY and calls vmf_insert_pfn_prot() with
   kvm_gmem_pfn_prot(vma, GUEST_MEMFD_PFN_READONLY), installing a
   read-only special PTE for PFN P that is bit-for-bit identical to
   thread A's vmf->orig_pte.
4. Thread A enters finish_mkwrite_fault(), sees
   pte_same(ptep_get(vmf->pte), vmf->orig_pte) is true, and calls
   wp_page_reuse(), making the PTE writable even though PFN P is now
   GUEST_MEMFD_PFN_READONLY and revocation already completed.

Also, kvm_gmem_pfn_mkwrite() does not check kvm_gmem_is_shared_mem() the
way kvm_gmem_fault_user_mapping() does.

[ ... ]

> @@ -1588,14 +1660,22 @@ static int kvm_gmem_pfn_map_order(struct inode *inode, pgoff_t index,
>  	return order;
>  }
>  
> +/*
> + * @writable, if not NULL, is set to whether the guest may write the page.  It
> + * may be NULL only for private pages, which are always writable.
> + */
>  int kvm_gmem_get_pfn(struct kvm *kvm, struct kvm_memory_slot *slot,
> -		     gfn_t gfn, kvm_pfn_t *pfn, int *max_order)
> +		     gfn_t gfn, kvm_pfn_t *pfn, int *max_order,
> +		     bool *writable)
>  {
>  	pgoff_t index = kvm_gmem_get_index(slot, gfn);
>  	struct folio *folio;
>  	int r = 0, __order;
> +	u32 attrs = 0;
>  
>  	max_order = max_order ?: &__order;
> +	if (writable)
> +		*writable = true;
>  
>  	CLASS(gmem_get_file, file)(slot);
>  	if (!file)
> @@ -1603,15 +1683,28 @@ int kvm_gmem_get_pfn(struct kvm *kvm, struct kvm_memory_slot *slot,
>  
>  	filemap_invalidate_lock_shared(file_inode(file)->i_mapping);
>  
> -	folio = __kvm_gmem_get_pfn(file, slot, index, pfn, max_order);
> +	folio = __kvm_gmem_get_pfn(file, slot, index, pfn, max_order, &attrs);
>  	if (IS_ERR(folio)) {
>  		r = PTR_ERR(folio);
>  		goto out;
>  	}
>  
> -	if (kvm_gmem_is_pfn_mode(GMEM_I(file_inode(file))))
> +	if (kvm_gmem_is_pfn_mode(GMEM_I(file_inode(file)))) {
> +		/*
> +		 * A read-only frame is not the guest's alone, so it never
> +		 * backs a private page: a private fault on it is a hole.
> +		 */
> +		if (attrs & GUEST_MEMFD_PFN_READONLY) {
> +			if (kvm_gmem_is_private_mem(file_inode(file), index) ||
> +			    WARN_ON_ONCE(!writable)) {
> +				r = -EFAULT;
> +				goto out;
> +			}
> +			*writable = false;
> +		}

[Severity: High]
Can a guest or host userspace trigger this WARN_ON_ONCE(!writable)?

In arch/x86/kvm/svm/sev.c, both __sev_snp_reload_vmsa() and
sev_handle_rmp_fault() pass writable = NULL to kvm_gmem_get_pfn():

arch/x86/kvm/svm/sev.c:__sev_snp_reload_vmsa() {
	...
	if (kvm_gmem_get_pfn(vcpu->kvm, slot, gfn, &pfn, NULL, NULL))
		return;
}

arch/x86/kvm/svm/sev.c:sev_handle_rmp_fault() {
	...
	if (!kvm_is_private_gfn(kvm, gfn)) {
		...
		return;
	}
	...
	ret = kvm_gmem_get_pfn(kvm, slot, gfn, &pfn, &order, NULL);
}

In __sev_snp_reload_vmsa(), there is no check that the GFN is marked
private before calling kvm_gmem_get_pfn(). An SEV-SNP guest can supply an
arbitrary GPA via SVM_VMGEXIT_AP_CREATE or SVM_VMGEXIT_AP_CREATE_ON_INIT
in sev_snp_ap_creation(), or host userspace can convert an existing VMSA
GPA from private to shared via KVM_SET_MEMORY_ATTRIBUTES2 (which triggers
sev_gmem_invalidate_range() and requests KVM_REQ_VMSA_PAGE_RELOAD). Similarly,
in sev_handle_rmp_fault(), kvm_is_private_gfn() is checked before
filemap_invalidate_lock_shared() is acquired in kvm_gmem_get_pfn(), so a
concurrent private-to-shared attribute conversion can complete in between.

If the GFN is shared (so kvm_gmem_is_private_mem() returns false) and is
backed by a GUEST_MEMFD_PFN_READONLY frame, kvm_gmem_get_pfn() will
evaluate WARN_ON_ONCE(!writable) and warn in the host kernel.

>  		*max_order = kvm_gmem_pfn_map_order(file_inode(file), index, gfn,
>  						    *pfn, *max_order);
> +	}

[Severity: High]
When a provider changes GUEST_MEMFD_PFN_READONLY on a sub-range of a huge
PFN-mode block and calls kvm_gmem_revoke(), is the invalidation order in
__kvm_gmem_invalidate_start() sufficient to prevent a concurrent fault on
another GFN in the same block from installing a stale writable 2M/1G page?

In __kvm_gmem_invalidate_start(), kvm_mmu_unmap_gfn_range() is called
before kvm_mmu_invalidate_range_add() widens the invalidation range to the
PUD_ORDER-aligned block:

virt/kvm/guest_memfd.c:__kvm_gmem_invalidate_start() {
	...
		flush |= kvm_mmu_unmap_gfn_range(kvm, &gfn_range);

		kvm_mmu_invalidate_range_add(kvm,
					     round_down(gfn_range.start, blk),
					     round_up(gfn_range.end, blk));
}

Inside kvm_mmu_unmap_gfn_range(), only the unaligned [gfn_range.start,
gfn_range.end) sub-range is passed to kvm_mmu_invalidate_range_add() before
kvm_unmap_gfn_range() runs. Because gfn_range.may_block is true,
kvm_unmap_gfn_range() can yield kvm->mmu_lock while walking rmaps or roots
before __kvm_gmem_invalidate_start() adds the rounded-out block range.

If a vCPU faults on GFN B in the same 2M/1G block, finishes
kvm_gmem_get_pfn() (observing writable = true and *max_order >= PMD_ORDER)
just before kvm_gmem_revoke() takes filemap_invalidate_lock(), and then
acquires kvm->mmu_lock while kvm_unmap_gfn_range() has yielded it on GFN A,
mmu_invalidate_retry_gfn() will not see GFN B in
[mmu_invalidate_range_start, mmu_invalidate_range_end) and
mmu_invalidate_seq has not yet been incremented. Couldn't that vCPU install
a writable 2M/1G mapping covering GFN A after kvm_unmap_gfn_range()
already zapped it?

-- 
Sashiko AI review · https://sashiko.dev/#/patchset/20261027154649.91571-1-griffoul@gmail.com?part=2


  reply	other threads:[~2026-10-28 15:48 UTC|newest]

Thread overview: 143+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-10-22 23:27 [PATCH RFC v2 00/50] guest_memfd alternative providers Ackerley Tng
2026-10-22 23:27 ` Ackerley Tng via B4 Relay
2026-10-22 23:27 ` [PATCH RFC v2 01/50] KVM: guest_memfd: Split folio allocation and insertion in kvm_gmem_get_folio Ackerley Tng
2026-10-22 23:27   ` Ackerley Tng via B4 Relay
2026-10-22 23:27 ` [PATCH RFC v2 02/50] KVM: guest_memfd: Route folio allocation through native provider operations Ackerley Tng
2026-10-22 23:27   ` Ackerley Tng via B4 Relay
2026-10-22 23:27 ` [PATCH RFC v2 03/50] mm: shmem: Implement guest_memfd provider operations for tmpfs Ackerley Tng
2026-10-22 23:27   ` Ackerley Tng via B4 Relay
2026-10-23 23:31   ` sashiko-bot
2026-10-22 23:27 ` [PATCH RFC v2 04/50] KVM: guest_memfd: Support provider folio invalidation Ackerley Tng
2026-10-22 23:27   ` Ackerley Tng via B4 Relay
2026-10-23 23:31   ` sashiko-bot
2026-10-22 23:27 ` [PATCH RFC v2 05/50] KVM: guest_memfd: Support using resource provider Ackerley Tng
2026-10-22 23:27   ` Ackerley Tng via B4 Relay
2026-10-23 23:31   ` sashiko-bot
2026-10-22 23:27 ` [PATCH RFC v2 06/50] KVM: selftests: Add helper to create guest_memfd with a resource file Ackerley Tng
2026-10-22 23:27   ` Ackerley Tng via B4 Relay
2026-10-23 23:31   ` sashiko-bot
2026-10-22 23:27 ` [PATCH RFC v2 07/50] KVM: selftests: Test negative validation of resource_fd argument Ackerley Tng
2026-10-22 23:27   ` Ackerley Tng via B4 Relay
2026-10-22 23:27 ` [PATCH RFC v2 08/50] KVM: selftests: Test rejection of unsupported filesystem for resource_fd Ackerley Tng
2026-10-22 23:27   ` Ackerley Tng via B4 Relay
2026-10-22 23:27 ` [PATCH RFC v2 09/50] KVM: selftests: Test rejection of memfd " Ackerley Tng
2026-10-22 23:27   ` Ackerley Tng via B4 Relay
2026-10-22 23:27 ` [PATCH RFC v2 10/50] KVM: selftests: Test rejection of swap tmpfs mounts Ackerley Tng
2026-10-22 23:27   ` Ackerley Tng via B4 Relay
2026-10-23 23:31   ` sashiko-bot
2026-10-22 23:27 ` [PATCH RFC v2 11/50] KVM: selftests: Test rejection of hugepage " Ackerley Tng
2026-10-22 23:27   ` Ackerley Tng via B4 Relay
2026-10-23 23:32   ` sashiko-bot
2026-10-22 23:27 ` [PATCH RFC v2 12/50] KVM: selftests: Test rejection of regular file in tmpfs mount Ackerley Tng
2026-10-22 23:27   ` Ackerley Tng via B4 Relay
2026-10-22 23:27 ` [PATCH RFC v2 13/50] KVM: selftests: Test guest_memfd with tmpfs resource pool Ackerley Tng
2026-10-22 23:27   ` Ackerley Tng via B4 Relay
2026-10-22 23:27 ` [PATCH RFC v2 14/50] KVM: selftests: Test guest_memfd resource pool sharing across instances Ackerley Tng
2026-10-22 23:27   ` Ackerley Tng via B4 Relay
2026-10-22 23:27 ` [PATCH RFC v2 15/50] KVM: selftests: Test memory allocation against shared tmpfs resource pool Ackerley Tng
2026-10-22 23:27   ` Ackerley Tng via B4 Relay
2026-10-22 23:27 ` [PATCH RFC v2 16/50] KVM: selftests: Test that shared tmpfs resource pool size limit is respected Ackerley Tng
2026-10-22 23:27   ` Ackerley Tng via B4 Relay
2026-10-22 23:27 ` [PATCH RFC v2 17/50] KVM: selftests: Test guest execution with tmpfs-backed guest_memfd Ackerley Tng
2026-10-22 23:27   ` Ackerley Tng via B4 Relay
2026-10-23 23:32   ` sashiko-bot
2026-10-22 23:27 ` [PATCH RFC v2 18/50] KVM: selftests: Document testing TODOs Ackerley Tng
2026-10-22 23:27   ` Ackerley Tng via B4 Relay
2026-10-22 23:27 ` [PATCH RFC v2 19/50] KVM: selftests: Test guest_memfd conversions with tmpfs backing Ackerley Tng
2026-10-22 23:27   ` Ackerley Tng via B4 Relay
2026-10-22 23:27 ` [PATCH RFC v2 20/50] samples/kvm: Add a memory provider sample Ackerley Tng
2026-10-22 23:27   ` Ackerley Tng via B4 Relay
2026-10-22 23:27 ` [PATCH RFC v2 21/50] samples/kvm: Remove donate, reclaim, and move operations from sample provider Ackerley Tng
2026-10-22 23:27   ` Ackerley Tng via B4 Relay
2026-10-22 23:27 ` [PATCH RFC v2 22/50] samples/kvm: Remove readonly support " Ackerley Tng
2026-10-22 23:27   ` Ackerley Tng via B4 Relay
2026-10-22 23:27 ` [PATCH RFC v2 23/50] samples/kvm: Remove child ownership tracking " Ackerley Tng
2026-10-22 23:27   ` Ackerley Tng via B4 Relay
2026-10-22 23:27 ` [PATCH RFC v2 24/50] samples/kvm: Remove MPS_SETUP support " Ackerley Tng
2026-10-22 23:27   ` Ackerley Tng via B4 Relay
2026-10-22 23:27 ` [PATCH RFC v2 25/50] samples/kvm: Remove MMAP_CAPABLE flag " Ackerley Tng
2026-10-22 23:27   ` Ackerley Tng via B4 Relay
2026-10-22 23:27 ` [PATCH RFC v2 26/50] samples/kvm: Remove fixed address and length module parameters Ackerley Tng
2026-10-22 23:27   ` Ackerley Tng via B4 Relay
2026-10-22 23:27 ` [PATCH RFC v2 27/50] samples/kvm: Remove mem_provider_ops from sample provider Ackerley Tng
2026-10-22 23:27   ` Ackerley Tng via B4 Relay
2026-10-22 23:28 ` [PATCH RFC v2 28/50] samples/kvm: Make provider files independent of a root pool Ackerley Tng
2026-10-22 23:28   ` Ackerley Tng via B4 Relay
2026-10-22 23:28 ` [PATCH RFC v2 29/50] samples/kvm: Move set_present ioctl from device to provider file Ackerley Tng
2026-10-22 23:28   ` Ackerley Tng via B4 Relay
2026-10-22 23:28 ` [PATCH RFC v2 30/50] KVM: selftests: Add basic test for sample memory provider Ackerley Tng
2026-10-22 23:28   ` Ackerley Tng via B4 Relay
2026-10-23 23:32   ` sashiko-bot
2026-10-22 23:28 ` [PATCH RFC v2 31/50] KVM: guest_memfd: Support getting PFNs for stage 2 from providers Ackerley Tng
2026-10-22 23:28   ` Ackerley Tng via B4 Relay
2026-10-23 17:23   ` Fred Griffoul
2026-10-29 13:49     ` Ackerley Tng
2026-10-23 17:42   ` Fred Griffoul
2026-10-22 23:28 ` [PATCH RFC v2 32/50] KVM: guest_memfd: Refactor error handling in kvm_gmem_fault_user_mapping Ackerley Tng
2026-10-22 23:28   ` Ackerley Tng via B4 Relay
2026-10-22 23:28 ` [PATCH RFC v2 33/50] KVM: guest_memfd: Support mmap and user fault handling in PFN mode Ackerley Tng
2026-10-22 23:28   ` Ackerley Tng via B4 Relay
2026-10-22 23:28 ` [PATCH RFC v2 34/50] KVM: guest_memfd: Skip checking outstanding references " Ackerley Tng
2026-10-22 23:28   ` Ackerley Tng via B4 Relay
2026-10-23 17:29   ` Fred Griffoul
2026-10-22 23:28 ` [PATCH RFC v2 35/50] KVM: guest_memfd: Support converting to shared " Ackerley Tng
2026-10-22 23:28   ` Ackerley Tng via B4 Relay
2026-10-22 23:28 ` [PATCH RFC v2 36/50] KVM: guest_memfd: Support preallocating memory via fallocate " Ackerley Tng
2026-10-22 23:28   ` Ackerley Tng via B4 Relay
2026-10-22 23:28 ` [PATCH RFC v2 37/50] KVM: guest_memfd: Clamp hole punch range to inode size Ackerley Tng
2026-10-22 23:28   ` Ackerley Tng via B4 Relay
2026-10-22 23:28 ` [PATCH RFC v2 38/50] KVM: guest_memfd: Support reclaim during hole punch in PFN mode Ackerley Tng
2026-10-22 23:28   ` Ackerley Tng via B4 Relay
2026-10-22 23:28 ` [PATCH RFC v2 39/50] KVM: guest_memfd: Support arch reclaim on inode destruction " Ackerley Tng
2026-10-22 23:28   ` Ackerley Tng via B4 Relay
2026-10-22 23:28 ` [PATCH RFC v2 40/50] KVM: guest_memfd: Support put_pfn_range provider op " Ackerley Tng
2026-10-22 23:28   ` Ackerley Tng via B4 Relay
2026-10-22 23:28 ` [PATCH RFC v2 41/50] KVM: guest_memfd: Add TODO for memory failure handling " Ackerley Tng
2026-10-22 23:28   ` Ackerley Tng via B4 Relay
2026-10-22 23:28 ` [PATCH RFC v2 42/50] KVM: guest_memfd: Allow attaching PFN-backed providers Ackerley Tng
2026-10-22 23:28   ` Ackerley Tng via B4 Relay
2026-10-22 23:28 ` [PATCH RFC v2 43/50] KVM: guest_memfd: Export kvm_gmem_revoke for provider-driven revocation Ackerley Tng
2026-10-22 23:28   ` Ackerley Tng via B4 Relay
2026-10-22 23:28 ` [PATCH RFC v2 44/50] KVM: selftests: Test flag dependency of PFN_MODE on USE_RESOURCE Ackerley Tng
2026-10-22 23:28   ` Ackerley Tng via B4 Relay
2026-10-22 23:28 ` [PATCH RFC v2 45/50] samples/kvm: Implement attach and release provider ops in sample provider Ackerley Tng
2026-10-22 23:28   ` Ackerley Tng via B4 Relay
2026-10-23 23:32   ` sashiko-bot
2026-10-22 23:28 ` [PATCH RFC v2 46/50] samples/kvm: Implement get_pfn provider operation Ackerley Tng
2026-10-22 23:28   ` Ackerley Tng via B4 Relay
2026-10-22 23:28 ` [PATCH RFC v2 47/50] samples/kvm: Implement put_pfn_range " Ackerley Tng
2026-10-22 23:28   ` Ackerley Tng via B4 Relay
2026-10-22 23:28 ` [PATCH RFC v2 48/50] samples/kvm: Support dynamic revocation via kvm_gmem_revoke Ackerley Tng
2026-10-22 23:28   ` Ackerley Tng via B4 Relay
2026-10-22 23:28 ` [PATCH RFC v2 49/50] samples/kvm: Implement lookup_pfn_range provider operation Ackerley Tng
2026-10-22 23:28   ` Ackerley Tng via B4 Relay
2026-10-22 23:28 ` [PATCH RFC v2 50/50] KVM: selftests: Test guest_memfd conversions with sample memory provider backing Ackerley Tng
2026-10-22 23:28   ` Ackerley Tng via B4 Relay
2026-10-23 23:32   ` sashiko-bot
2026-10-27 15:46 ` [RFC PATCH 00/14] guest_memfd: Export guest_memfd files to iommufd Fred Griffoul
2026-10-27 15:46   ` [RFC PATCH 01/14] KVM: guest_memfd: Clamp the order of PFN mode blocks to what KVM can map Fred Griffoul
2026-10-28 15:48     ` sashiko-bot
2026-10-29 13:25     ` Ackerley Tng
2026-10-27 15:46   ` [RFC PATCH 02/14] KVM: guest_memfd: Support read-only frames from PFN mode providers Fred Griffoul
2026-10-28 15:48     ` sashiko-bot [this message]
2026-10-27 15:46   ` [RFC PATCH 03/14] KVM: guest_memfd: Allow other subsystems to map guest_memfd files Fred Griffoul
2026-10-27 15:46   ` [RFC PATCH 04/14] KVM: guest_memfd: Keep truncated folios until the exports are updated Fred Griffoul
2026-10-27 15:46   ` [RFC PATCH 05/14] KVM: guest_memfd: Export PFN mode files Fred Griffoul
2026-10-28 15:48     ` sashiko-bot
2026-10-27 15:46   ` [RFC PATCH 06/14] KVM: guest_memfd: Report the size of holes in export lookups Fred Griffoul
2026-10-27 15:46   ` [RFC PATCH 07/14] KVM: guest_memfd: Update exports when pages are allocated Fred Griffoul
2026-10-28 15:48     ` sashiko-bot
2026-10-27 15:46   ` [RFC PATCH 08/14] iommufd: Track the domains of revocable pages in struct iopt_pages Fred Griffoul
2026-10-27 15:46   ` [RFC PATCH 09/14] iommufd: Map guest_memfd files Fred Griffoul
2026-10-28 15:48     ` sashiko-bot
2026-10-27 15:46   ` [RFC PATCH 10/14] iommufd/selftest: Add mock-domain IOVA queries Fred Griffoul
2026-10-27 15:46   ` [RFC PATCH 11/14] KVM: guest_memfd: Add kvm_gmem_restore() for PFN mode providers Fred Griffoul
2026-10-29 12:52     ` Ackerley Tng
2026-10-29 14:27       ` Frederic Griffoul
2026-10-27 15:46   ` [RFC PATCH 12/14] samples/kvm: Add read-only pages and large blocks to the sample provider Fred Griffoul
2026-10-27 15:46   ` [RFC PATCH 13/14] samples/kvm: Back absent pages on demand in " Fred Griffoul
2026-10-28 15:48     ` sashiko-bot
2026-10-29 13:03     ` Ackerley Tng
2026-10-27 15:46   ` [RFC PATCH 14/14] KVM: selftests: Test guest_memfd mapped by iommufd Fred Griffoul
2026-10-28 15:48     ` sashiko-bot
2026-10-29  5:52 ` [PATCH RFC v2 00/50] guest_memfd alternative providers Aneesh Kumar K.V

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=sashiko-outbox-188084@kernel.org \
    --to=sashiko-bot@kernel.org \
    --cc=John.Starks@microsoft.com \
    --cc=ackerleytng@google.com \
    --cc=aik@amd.com \
    --cc=akpm@linux-foundation.org \
    --cc=alex@shazbot.org \
    --cc=aneesh.kumar@kernel.org \
    --cc=ashish.kalra@amd.com \
    --cc=baolin.wang@linux.alibaba.com \
    --cc=baolu.lu@linux.intel.com \
    --cc=bp@alien8.de \
    --cc=brauner@kernel.org \
    --cc=catalin.marinas@arm.com \
    --cc=christian.koenig@amd.com \
    --cc=connordw@amazon.com \
    --cc=corbet@lwn.net \
    --cc=dave.hansen@linux.intel.com \
    --cc=dave.jiang@intel.com \
    --cc=david@kernel.org \
    --cc=dwmw2@infradead.org \
    --cc=erdemaktas@google.com \
    --cc=fuad.tabba@linux.dev \
    --cc=fvdl@google.com \
    --cc=gourry@gourry.net \
    --cc=graf@amazon.de \
    --cc=griffoul@gmail.com \
    --cc=hpa@zytor.com \
    --cc=hughd@google.com \
    --cc=jack@suse.cz \
    --cc=jacob.pan@linux.microsoft.com \
    --cc=jgg@ziepe.ca \
    --cc=joey.gouly@arm.com \
    --cc=joro@8bytes.org \
    --cc=jthoughton@google.com \
    --cc=justinstitt@google.com \
    --cc=jxgao@google.com \
    --cc=kevin.tian@intel.com \
    --cc=kvm@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    --cc=ljs@kernel.org \
    --cc=maz@kernel.org \
    --cc=michael.roth@amd.com \
    --cc=mingo@redhat.com \
    --cc=morbo@google.com \
    --cc=nathan@kernel.org \
    --cc=ndesaulniers@google.com \
    --cc=nicolinc@nvidia.com \
    --cc=oupton@kernel.org \
    --cc=pbonzini@redhat.com \
    --cc=pratyush@kernel.org \
    --cc=rdunlap@infradead.org \
    --cc=rientjes@google.com \
    --cc=robin.murphy@arm.com \
    --cc=rppt@kernel.org \
    --cc=sashiko-reviews@lists.linux.dev \
    --cc=seanjc@google.com \
    --cc=seiden@linux.ibm.com \
    --cc=shuah@kernel.org \
    --cc=skhan@linuxfoundation.org \
    --cc=skhawaja@google.com \
    --cc=steven.price@arm.com \
    --cc=suzuki.poulose@arm.com \
    --cc=tarunsahu@google.com \
    --cc=tglx@kernel.org \
    --cc=thomas.lendacky@amd.com \
    --cc=tycho@kernel.org \
    --cc=vannapurve@google.com \
    --cc=vbabka@kernel.org \
    --cc=viro@zeniv.linux.org.uk \
    --cc=will@kernel.org \
    --cc=x86@kernel.org \
    --cc=yan.y.zhao@intel.com \
    --cc=yilun.xu@linux.intel.com \
    --cc=yuzenghui@huawei.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.