From: Ackerley Tng In folio mode, folios truncated on inode destruction are reclaimed via aops->free_folio (kvm_gmem_free_folio), calling kvm_arch_gmem_reclaim() to reset hardware confidential VM state (e.g. SEV-SNP RMP entries). In PFN mode, memory is not backed by page cache folios, so kvm_gmem_free_folio() is never invoked. Do the reclaim during kvm_gmem_destroy_inode() when in PFN mode across the entire file range, ensuring that any confidential architecture state on provider PFNs is reclaimed before releasing the provider. Signed-off-by: Ackerley Tng --- virt/kvm/guest_memfd.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/virt/kvm/guest_memfd.c b/virt/kvm/guest_memfd.c index 0819c3653e88a..88eae9d6d249f 100644 --- a/virt/kvm/guest_memfd.c +++ b/virt/kvm/guest_memfd.c @@ -1643,6 +1643,13 @@ static void kvm_gmem_destroy_inode(struct inode *inode) { struct gmem_inode *gi = GMEM_I(inode); + /* + * Skip if the provider was not yet set up, as iput() can reach this on + * error paths before provider_ops is initialized. + */ + if (gi->provider_ops && kvm_gmem_is_pfn_mode(gi)) + kvm_gmem_pfn_reclaim(gi, 0, i_size_read(inode) >> PAGE_SHIFT); + gmem_provider_release(gi); mpol_free_shared_policy(&gi->policy); -- 2.56.0.257.gf7497c7d27-goog