From nobody Mon Sep 28 19:23:40 2026 Received: from mail-pl1-f197.google.com (mail-pl1-f197.google.com [209.85.214.197]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id BF2873BD64B for ; Tue, 18 Aug 2026 09:16:00 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.197 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787044562; cv=none; b=aido/1BBbqH0RIpKwoalCIE7TMrGgnfWT7FZw4Yj5WivctSheAUIWpCn78Ksz+abbSPV10REag4rHF+Gc9infCSp1J0ZdGEfARl+H3Xt8joyRzIw9OevNiDq0+3Khfk31bCIGfftgW31U5BEOKehiPTOH19KB4IKpTETr5o3tgU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787044562; c=relaxed/simple; bh=M2Ifb8ZR+HwA/H1LGAE2C/jP4eVMt+pmNz86ycTCoCc=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=PbZjbiiJx+b5m9MwSr9Mcu0w6+08+Mc49zfHScf+d+z2nzmXEezHtVgL0xq8z/QfrR3rGE4Sy8SoKv/PfpVtFIjJHEajJCjub9cczxQv4QcLenn5fbK5RUXZExQV81SMZ2DiQSEAx+ASouZjMExHRyZcuTxVpqE80utOMrbMUL8= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--ackerleytng.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=CrpuWYCm; arc=none smtp.client-ip=209.85.214.197 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--ackerleytng.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="CrpuWYCm" Received: by mail-pl1-f197.google.com with SMTP id d9443c01a7336-2d5d00fd19bso13649935ad.1 for ; Tue, 18 Aug 2026 02:16:00 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1787044560; x=1787649360; darn=vger.kernel.org; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:from:to:cc:subject:date:message-id:reply-to :content-type; bh=7jHUMARs30oMku7rrAHEp5fhgY0hNDCAk+0nqtnlfj0=; b=CrpuWYCmK5RlPeUJRDlEVJvSfgq2NDSLY13GFOKLeIOy3eWnwkSTUyPZ9XxgtaHTDp +Rk9M8MKMfRSVqVKr8QLkSXOXMd+91tHsJm/1v4R/sWoQJG+BVuvA5N7BYMLAe6mwUvz wpYniQIWi7tRGmGqlsnu5TnnuSDUpE3OTNlxds0HdnbIslgEXZe7ZX5c/PU0z+s/+qZQ WOyHXBybPwbS7Ui0zIgHyi1ns6yUPccDN9XZbEptE11WJKN129TsVDW9nInS9cbAy1nq fab1wTH9nIhbGU9sHCunFJMmjpxmVwdWvgSZQ2NEZHtj5t57qws/j9EFSqmbpKICsKxg toZA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787044560; x=1787649360; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to:content-type; bh=7jHUMARs30oMku7rrAHEp5fhgY0hNDCAk+0nqtnlfj0=; b=UQNtHShuFgSL5X9RuDteTlY2WI5d8fk1M7oXrzaGbEEtPJEQbtQky+A6vjMyKujyZU /z40lY2VevmS3/tBED9BWMoX7J48KQ/t5W/dYXSHSofJWpihUUzVxippD37VLGWbuKZ+ 6GtPn95YLC/f+zs6CYrU4PllcEmM10gvvtjwGomXZ5WYF5CVkOE/u3hgUQPf3XdrFljW 6QMztjvkv/RmO1nM7HHy21WU4foJRSDrox3T97DbdokbVZzpdRy2MtNMgBpzQfIKn5d7 qqcby/edvJ6OzLTqFfS5Yxa2wMkM6s9GRtpB9YVWh+IFb+n9IS24yafQIO07sqg2YM8I HK/w== X-Forwarded-Encrypted: i=1; AHgh+RqCAbtjaWPcFAjpia8B7BRfyHEZSUYNs0WqFfUdJjrOM69N3aPU0yigyhW+xY6cKaaGqCc6vFtbPM4JqcA=@vger.kernel.org X-Gm-Message-State: AOJu0Yyay5gCOvKfa/IQtusQ2LS8N68FRjl8iju1AGUnMyAqhD0Q+KK9 G+V30dwn56leF97oTUXjWZ9u/DPEEA+0ttlJX7SWY632AdA4pn1I8egFqVPoVLFqXy0LGuXdjt+ 1SO6UcUC9mXgcu+CjY4jA99F8kA== X-Received: from plbky6.prod.google.com ([2002:a17:902:f986:b0:2cf:75c1:ab87]) (user=ackerleytng job=prod-delivery.src-stubby-dispatcher) by 2002:a17:902:e5cd:b0:2c9:bf82:dd11 with SMTP id d9443c01a7336-2d5c4f38113mr76619975ad.7.1787044559821; Tue, 18 Aug 2026 02:15:59 -0700 (PDT) Date: Tue, 18 Aug 2026 09:15:52 +0000 In-Reply-To: <20260818-gmem-no-return-page-v2-0-5298f42d49bb@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20260818-gmem-no-return-page-v2-0-5298f42d49bb@google.com> X-Developer-Key: i=ackerleytng@google.com; a=ed25519; pk=sAZDYXdm6Iz8FHitpHeFlCMXwabodTm7p8/3/8xUxuU= X-Developer-Signature: v=1; a=ed25519-sha256; t=1787044557; l=2004; i=ackerleytng@google.com; s=20260225; h=from:subject:message-id; bh=M2Ifb8ZR+HwA/H1LGAE2C/jP4eVMt+pmNz86ycTCoCc=; b=j3bFONysasSYdfRKZGzzTAvRwhttD2/ahY+24IAmXMaUu0NHy2Fu2f+igLek2uckCdA21JPeZ SpwDdadSI28CzEHJTFEC/85MZAcMO0lcD0WYLfkAzsYZ/YxzsQNemOq X-Mailer: b4 0.16.0 Message-ID: <20260818-gmem-no-return-page-v2-1-5298f42d49bb@google.com> Subject: [PATCH v2 1/4] KVM: SEV: Treat unassigned RMP entry as benign race on PSMASH failure From: Ackerley Tng To: Sean Christopherson , Paolo Bonzini , Thomas Gleixner , Ingo Molnar , Borislav Petkov , Dave Hansen , x86@kernel.org, "H. Peter Anvin" , Ashish Kalra , Michael Roth , Brijesh Singh , Marc Zyngier , Oliver Upton , Joey Gouly , Steffen Eiden , Suzuki K Poulose , Zenghui Yu , Catalin Marinas , Will Deacon , David Hildenbrand , Fuad Tabba , Yan Zhao , "Edgecombe, Rick P" , Vishal Annapurve Cc: kvm@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, kvmarm@lists.linux.dev, Ackerley Tng Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable When handling an RMP fault, KVM attempts to split a 2MB page via PSMASH. If PSMASH fails, the only expected return value is FAIL_BADADDR, which does not distinguish the reason for the bad address. Hence, another RMP entry lookup is required to determine whether the failure was benign. Specifically, KVM re-checks the RMP entry to determine if another CPU raced and already smashed the entry into 4KB pages. A concurrent operation (such as guest_memfd truncation or hole punching) can also race and transition the page to shared, removing the page from the RMP table and causing PSMASH to fail. This can happen even if the page is still referenced by KVM, because guest_memfd reclaim transitions the RMP entry to shared when the folio is removed from the page cache. Treat an unassigned RMP entry as an expected race when re-checking after a failed PSMASH, and skip logging an error warning. Fixes: c63cf135cc99 ("KVM: SEV: Add support to handle RMP nested page fault= s") Signed-off-by: Ackerley Tng Reviewed-by: Michael Roth --- arch/x86/kvm/svm/sev.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/arch/x86/kvm/svm/sev.c b/arch/x86/kvm/svm/sev.c index fcb41dfde4c02..b2738362a928b 100644 --- a/arch/x86/kvm/svm/sev.c +++ b/arch/x86/kvm/svm/sev.c @@ -5074,10 +5074,11 @@ void sev_handle_rmp_fault(struct kvm_vcpu *vcpu, gp= a_t gpa, u64 error_code) /* * Look it up again. If it's 4K now then the PSMASH may have * raced with another process and the issue has already resolved - * itself. + * itself. If it's not assigned, then this must have raced with + * another process that made this page shared. */ if (!snp_lookup_rmpentry(pfn, &assigned, &rmp_level) && - assigned && rmp_level =3D=3D PG_LEVEL_4K) + ((assigned && rmp_level =3D=3D PG_LEVEL_4K) || !assigned)) goto out; =20 pr_warn_ratelimited("SEV: Unable to split RMP entry for GPA 0x%llx PFN 0= x%llx ret %d\n", --=20 2.55.0.699.gb54405d56f-goog From nobody Mon Sep 28 19:23:40 2026 Received: from mail-pg1-f198.google.com (mail-pg1-f198.google.com [209.85.215.198]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id D8199443E22 for ; Tue, 18 Aug 2026 09:16:02 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.215.198 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787044565; cv=none; b=A2e3P8/i6OHCa2IfFfSwILhkjLrLWE9w74M++bzkS43s+TMTB2YbVSCt4HJ3FoxOsO7rcWNQqKydt8CtZE/WnE2OzlbWBtUnV7lotPxCu2EKnI94IuKAj0nOZLhF3eMBWmmpjyYIYed6dIMW/itLq9Fv3/1oLrcNOOjVWqsLtUc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787044565; c=relaxed/simple; bh=HNfFPs+x0eHWMpwvEPTLebfzN82ZbnT/KE0+yXry6p0=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=OUXgxks9shcjR1ZHmsM+QdQ5MUPs7eBAmZH7mWL6S5v87hoAs+ubpKLBHZFsszemw+g6pAAuJ1Auxp/RW+pNm3ZWmgbzKqGg0UD8YL/HbgF4VKFr6+OAKvKP/4A7HUPxAijjiNpJe27FdozsV6C/mKzqyyZL8SxoEb1D8VzsqOo= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--ackerleytng.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=G8Dee6wD; arc=none smtp.client-ip=209.85.215.198 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--ackerleytng.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="G8Dee6wD" Received: by mail-pg1-f198.google.com with SMTP id 41be03b00d2f7-cbb92868263so3034066a12.2 for ; Tue, 18 Aug 2026 02:16:02 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1787044562; x=1787649362; darn=vger.kernel.org; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:from:to:cc:subject:date:message-id:reply-to :content-type; bh=qCv+HQzJkkz/c+dZ9BRl+4th0Zm+hBhcY2bGeDdOzyc=; b=G8Dee6wDhOe4gz/rVPud5Ay2wQrOIyKB+mRabR4YvfFECi56wHvcTXgo0o3n0AvxKf 4K6X8VT0fliof/szpssa438tS+Pizeh54/S4ywqEyVsBNf2GeXbzPUZZiWnMrZ3J3IYQ 3QmHGaCm7IJzlBZ4yxrOvwE1g5DqjIwArwoj5Mfx+62mC8Unqm8/sZVwtb8SAX7cW7WB 5mLFoMdltxYOe1lFgQA/AJMS3g6DRQWjkiVdIhIfNuUUdgryVfYxy1tCNV07/Vr9QOVe 2X4IhgU2X+BQ7EPhC/u3W4FVK8I93cDVdkV7xD+CG6ayJaJ8StMfpyNF7UpWmjSOKe1Z T0lA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787044562; x=1787649362; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to:content-type; bh=qCv+HQzJkkz/c+dZ9BRl+4th0Zm+hBhcY2bGeDdOzyc=; b=B5iymW/XRO9QwwZarvUjHADmsk4EBDaDCCojyV/5/dhViyY+DKR7oiwANJsUnh552o p87c9ud9I92TM+boDy4P1PyL/g1Y1vvc3n4e2ESe2HmdzpDv5gNQhEMEtyCLB5jiU4SI piHAdwTwC+gd4uExOo0gbgkEtT3Je2RghGloWJGb/FSuLpmk7YTvXtQn/huePCMnzped Vn+WCpYMX/7jaAIIXZrpoUI1aCPDN1o5T1p+H4wXYt/Y0g9Xeiu9TYrVuyvyCtDVEQdi X3SMY+udKDLYhhkXxc9nEBMjeRl3aXaby7hb22A9oEAcMh3xBP31DMxk9wLGIHoanYzZ GN9g== X-Forwarded-Encrypted: i=1; AHgh+RqtaTIjrtGrvUyhU2doEDlZrSfUlH1cMnnQ9y751wHsNqAIKbdM6Lm+1tF0gGeUOAI6cmAJQPQE01RFVa4=@vger.kernel.org X-Gm-Message-State: AOJu0YyxX3OAKj3REKzqUOmfgL5c93ErFDbRvhgvI8wK+dle2s8UzD6z +li+cxecWGPxCLhLvyqaDwqy5D1pLid6Dk8+EbDftXWWoJR0btU0GWEo77IbYf3qstcakkiCXBG IZpvTzeH9j40yw3u2zy/ZLVfJtw== X-Received: from pgbdq25.prod.google.com ([2002:a05:6a02:f99:b0:cbe:4e21:813e]) (user=ackerleytng job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6a21:4a81:b0:398:c0ba:9ceb with SMTP id adf61e73a8af0-3ccda4b541fmr9874686637.12.1787044561971; Tue, 18 Aug 2026 02:16:01 -0700 (PDT) Date: Tue, 18 Aug 2026 09:15:53 +0000 In-Reply-To: <20260818-gmem-no-return-page-v2-0-5298f42d49bb@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20260818-gmem-no-return-page-v2-0-5298f42d49bb@google.com> X-Developer-Key: i=ackerleytng@google.com; a=ed25519; pk=sAZDYXdm6Iz8FHitpHeFlCMXwabodTm7p8/3/8xUxuU= X-Developer-Signature: v=1; a=ed25519-sha256; t=1787044557; l=3842; i=ackerleytng@google.com; s=20260225; h=from:subject:message-id; bh=iohu3wId074IkPEPPtY6DnmeCpNG8GAOrdh78h28Ak4=; b=Wb19M1g6ZtfbPgdd8ony5ekvd8iGMoQ0KEQZ5+a5RnG18bj+rMXmaWB+Cja685bhXr2oOmDTs MA3gk+hFS+oB+rGSqrMgBySp2vT+jhO7KjHLgoEcoMFyz6MXPn7e/ST X-Mailer: b4 0.16.0 Message-ID: <20260818-gmem-no-return-page-v2-2-5298f42d49bb@google.com> Subject: [PATCH v2 2/4] KVM: SEV: Drop page refcount early during RMP fault handling From: Ackerley Tng To: Sean Christopherson , Paolo Bonzini , Thomas Gleixner , Ingo Molnar , Borislav Petkov , Dave Hansen , x86@kernel.org, "H. Peter Anvin" , Ashish Kalra , Michael Roth , Brijesh Singh , Marc Zyngier , Oliver Upton , Joey Gouly , Steffen Eiden , Suzuki K Poulose , Zenghui Yu , Catalin Marinas , Will Deacon , David Hildenbrand , Fuad Tabba , Yan Zhao , "Edgecombe, Rick P" , Vishal Annapurve Cc: kvm@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, kvmarm@lists.linux.dev, Ackerley Tng Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable From: Sean Christopherson When handling an RMP fault, KVM retrieves the PFN for a private GPA from guest_memfd. Drop the page reference immediately after retrieving the PFN instead of holding it across the entire handler so that the later patch can follow up with completely not returning refcounted pages from kvm_gmem_get_pfn(). On a first look, existing RMP table handling (psmash and checking for errors) might seem like it works fine, since truncation of the page from guest_memfd would have called rmp_make_shared() and removed the PFN from the RMP table. However, that is insufficient since a freed page may already be used in a different SNP VM. Hence, adopt the MMU invalidation protocol to guard committing anything based on the PFN. Signed-off-by: Sean Christopherson Signed-off-by: Ackerley Tng Reviewed-by: Michael Roth --- arch/x86/kvm/svm/sev.c | 39 ++++++++++++++++++++++++--------------- 1 file changed, 24 insertions(+), 15 deletions(-) diff --git a/arch/x86/kvm/svm/sev.c b/arch/x86/kvm/svm/sev.c index b2738362a928b..b34b11d7f8fad 100644 --- a/arch/x86/kvm/svm/sev.c +++ b/arch/x86/kvm/svm/sev.c @@ -5003,6 +5003,7 @@ void sev_handle_rmp_fault(struct kvm_vcpu *vcpu, gpa_= t gpa, u64 error_code) struct kvm_memory_slot *slot; struct kvm *kvm =3D vcpu->kvm; int order, rmp_level, ret; + unsigned long mmu_seq; struct page *page; bool assigned; kvm_pfn_t pfn; @@ -5030,18 +5031,22 @@ void sev_handle_rmp_fault(struct kvm_vcpu *vcpu, gp= a_t gpa, u64 error_code) return; } =20 + mmu_seq =3D kvm->mmu_invalidate_seq; + smp_rmb(); + ret =3D kvm_gmem_get_pfn(kvm, slot, gfn, &pfn, &page, &order); if (ret) { pr_warn_ratelimited("SEV: Unexpected RMP fault, no backing page for priv= ate GPA 0x%llx\n", gpa); return; } + kvm_release_page_unused(page); =20 ret =3D snp_lookup_rmpentry(pfn, &assigned, &rmp_level); if (ret || !assigned) { pr_warn_ratelimited("SEV: Unexpected RMP fault, no assigned RMP entry fo= und for GPA 0x%llx PFN 0x%llx error %d\n", gpa, pfn, ret); - goto out_no_trace; + return; } =20 /* @@ -5069,27 +5074,31 @@ void sev_handle_rmp_fault(struct kvm_vcpu *vcpu, gp= a_t gpa, u64 error_code) if (rmp_level =3D=3D PG_LEVEL_4K) goto out; =20 - ret =3D snp_rmptable_psmash(pfn); - if (ret) { - /* - * Look it up again. If it's 4K now then the PSMASH may have - * raced with another process and the issue has already resolved - * itself. If it's not assigned, then this must have raced with - * another process that made this page shared. - */ - if (!snp_lookup_rmpentry(pfn, &assigned, &rmp_level) && - ((assigned && rmp_level =3D=3D PG_LEVEL_4K) || !assigned)) + scoped_guard(read_lock, &kvm->mmu_lock) { + if (mmu_invalidate_retry_gfn(kvm, mmu_seq, gfn)) goto out; =20 - pr_warn_ratelimited("SEV: Unable to split RMP entry for GPA 0x%llx PFN 0= x%llx ret %d\n", - gpa, pfn, ret); + ret =3D snp_rmptable_psmash(pfn); + if (ret) { + /* + * Look it up again. If it's 4K now then the PSMASH may + * have raced with another process and the issue has + * already resolved itself. If it's not assigned, then + * this must have raced with another process that made + * this page shared. + */ + if (!snp_lookup_rmpentry(pfn, &assigned, &rmp_level) && + ((assigned && rmp_level =3D=3D PG_LEVEL_4K) || !assigned)) + goto out; + + pr_warn_ratelimited("SEV: Unable to split RMP entry for GPA 0x%llx PFN = 0x%llx ret %d\n", + gpa, pfn, ret); + } } =20 kvm_zap_gfn_range(kvm, gfn, gfn + PTRS_PER_PMD); out: trace_kvm_rmp_fault(vcpu, gpa, pfn, error_code, rmp_level, ret); -out_no_trace: - kvm_release_page_unused(page); } =20 static bool is_pfn_range_shared(kvm_pfn_t start, kvm_pfn_t end) --=20 2.55.0.699.gb54405d56f-goog From nobody Mon Sep 28 19:23:40 2026 Received: from mail-pl1-f200.google.com (mail-pl1-f200.google.com [209.85.214.200]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 07E6143846B for ; Tue, 18 Aug 2026 09:16:04 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.200 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787044569; cv=none; b=hMj6RJIpTkYhTpSv3totCvbin1ygk6c7kHDUuR7uxq6CRQxzoyuBEkN0xaIcw/ph468AuFUzujuoWCeiuLBX8dtDDFXE8EeaDDwnQJWYDaAnU9fTpIKL/S4yldq8Nq1sOIkQZFr/0FOT4c//ONQQ2a/B4mz5Iuqkl16Csd3ic64= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787044569; c=relaxed/simple; bh=Eu6toHOdCgS02ZJDxNjsrmINE4rufXfvVtLn/P5Q6r8=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=TD5VUGfUpKTQDCJnr/lJ61djTqfbjcUizNhenAXigG/v2FfX+MJqi++yF3qPwsr/Iq4lv35kLruiRUv/ceQp4wzfWYQDm3kbUPju6n5Mk/zOfMc4eWPiop8fZBDTS1hrZ0taautHhL+gWq2mhbQ9wOYiZW0fJXZyegVHfh5H9lc= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--ackerleytng.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=K1Y8eF4/; arc=none smtp.client-ip=209.85.214.200 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--ackerleytng.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="K1Y8eF4/" Received: by mail-pl1-f200.google.com with SMTP id d9443c01a7336-2cfc52ddc55so72285865ad.3 for ; Tue, 18 Aug 2026 02:16:04 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1787044564; x=1787649364; darn=vger.kernel.org; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:from:to:cc:subject:date:message-id:reply-to :content-type; bh=JcYyJmxeOItQm57PoOzTDELkKzo8NHBgHiqMw1DpJFo=; b=K1Y8eF4/BfUF+J4iyXE0Oa41seR4CU+oiFBMdsUfp3uNW8x8dnahtiaPROB57SDhDx pZZH4yQ27tzvSQs/Vx8fYYiIRmee9VwP/JCuYbem4dWNrPU9qGYDLx+abfEBUdynA4Oj 3sgQE9fuRufEmvaKJXUNMZ0x3dHMh7k2jvMwfcEizeMxlw9C8VC3agE3VTGm8qUGz2Wq RmhCTEsfejWir07gcIbtF736+Ym8egfzk/9pWW+dPAudrPyMYZrIJr1TQfw2/FVkEwRr cE03xxYiemG0nl/a3pbxnyV6m7M/vsNel6AAAXurWLJSqeAqol0p1zeSvD3XMUDOjRmP Drjg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787044564; x=1787649364; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to:content-type; bh=JcYyJmxeOItQm57PoOzTDELkKzo8NHBgHiqMw1DpJFo=; b=GpOchMRymiNe68mYQT2avk6tSuV65cCAUhTXW+ktUVMy0yGoV49AEmrQ8iySCVOUsg U/b53507Pfd40stZHxlXmAdUKVmXchSVFfe6oNREaA9M6VRsiYjK6MD7R4Rt9E3dkwOW FjmK/GwVA9KZFxktqqxJfAaeTZ01WF2BqhVGyl8dt/0pZbvPU+w+uIt/w3i3PnlQ3ouw 93ke8fiTwN/ydkYOEwRorCtBd2+OQLw1Vnf4ad1uRjHMQE/BXbLsKV1IPBaSOv60V1GD Ngjt4sFMEwEuK80eSglzWOR2CNtbAJG6T2VZZyWh0263BdbEHWREyZg1D3vZi2V9GPKc Q4bw== X-Forwarded-Encrypted: i=1; AHgh+RoHn2136niezfdGRJIBkhyktep0pyXcG62a8S9hyabYRxn7jeHGFza9edEXwYTEJQtgFE1SIHlmlRZzFFE=@vger.kernel.org X-Gm-Message-State: AOJu0YzIiRU3v+JoQct3GjRhg9+LgKz1DcMqqGnbRsVj6u30ftPW1i7f e69oTCelYRibugiJ6Dm39Qa1LK0mPm3wCKk8T1Kb5SloPf50dO7NzR9HNEsioTyq3m1C/Z4BHk4 BFOgM0w0ch1Cu2RUa2VPJ2mZ5Gw== X-Received: from plbz21.prod.google.com ([2002:a17:902:ee15:b0:2c7:de3c:549e]) (user=ackerleytng job=prod-delivery.src-stubby-dispatcher) by 2002:a17:903:b0b:b0:2cf:9347:f445 with SMTP id d9443c01a7336-2d3b0c7ae46mr360869955ad.10.1787044564080; Tue, 18 Aug 2026 02:16:04 -0700 (PDT) Date: Tue, 18 Aug 2026 09:15:54 +0000 In-Reply-To: <20260818-gmem-no-return-page-v2-0-5298f42d49bb@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20260818-gmem-no-return-page-v2-0-5298f42d49bb@google.com> X-Developer-Key: i=ackerleytng@google.com; a=ed25519; pk=sAZDYXdm6Iz8FHitpHeFlCMXwabodTm7p8/3/8xUxuU= X-Developer-Signature: v=1; a=ed25519-sha256; t=1787044557; l=1303; i=ackerleytng@google.com; s=20260225; h=from:subject:message-id; bh=Eu6toHOdCgS02ZJDxNjsrmINE4rufXfvVtLn/P5Q6r8=; b=4r394TRlnUkgQelNG88PQ96qVChnPFNFyot7lT1B9nuxLhLRLmkhypwFy2Q1Jy4P+LuelDJE+ 4XIVWacJ6u5CilOKJv5z0iQvoHdCGx3UqOwDFsxlX70DzaNRuHKHs6f X-Mailer: b4 0.16.0 Message-ID: <20260818-gmem-no-return-page-v2-3-5298f42d49bb@google.com> Subject: [PATCH v2 3/4] KVM: SEV: Drop page refcount early in VMSA reload From: Ackerley Tng To: Sean Christopherson , Paolo Bonzini , Thomas Gleixner , Ingo Molnar , Borislav Petkov , Dave Hansen , x86@kernel.org, "H. Peter Anvin" , Ashish Kalra , Michael Roth , Brijesh Singh , Marc Zyngier , Oliver Upton , Joey Gouly , Steffen Eiden , Suzuki K Poulose , Zenghui Yu , Catalin Marinas , Will Deacon , David Hildenbrand , Fuad Tabba , Yan Zhao , "Edgecombe, Rick P" , Vishal Annapurve Cc: kvm@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, kvmarm@lists.linux.dev, Ackerley Tng Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable When reloading the guest VMSA for an SEV-SNP vCPU, KVM retrieves the PFN from guest_memfd. Drop the page reference immediately after retrieving the PFN instead of holding it across MMU lock acquisition in preparation for a follow-up patch to stop returning page pointers from guest_memfd PFN lookups. This is safe because the page's validity and presence are governed by KVM's MMU invalidation protocol rather than the page reference. No functional change intended. Signed-off-by: Ackerley Tng Reviewed-by: Michael Roth --- arch/x86/kvm/svm/sev.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/arch/x86/kvm/svm/sev.c b/arch/x86/kvm/svm/sev.c index b34b11d7f8fad..d3d620bc04dce 100644 --- a/arch/x86/kvm/svm/sev.c +++ b/arch/x86/kvm/svm/sev.c @@ -4062,6 +4062,7 @@ static void __sev_snp_reload_vmsa(struct kvm_vcpu *vc= pu, gpa_t gpa) */ if (kvm_gmem_get_pfn(vcpu->kvm, slot, gfn, &pfn, &page, NULL)) return; + kvm_release_page_clean(page); =20 read_lock(&kvm->mmu_lock); /* @@ -4076,8 +4077,6 @@ static void __sev_snp_reload_vmsa(struct kvm_vcpu *vc= pu, gpa_t gpa) else svm->vmcb->control.vmsa_pa =3D pfn_to_hpa(pfn); read_unlock(&kvm->mmu_lock); - - kvm_release_page_clean(page); } =20 /* --=20 2.55.0.699.gb54405d56f-goog From nobody Mon Sep 28 19:23:40 2026 Received: from mail-pf1-f200.google.com (mail-pf1-f200.google.com [209.85.210.200]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id D6ED3443E21 for ; Tue, 18 Aug 2026 09:16:06 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.200 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787044575; cv=none; b=sm6jB2HIXIHVFYjXTOtWrZe92F57n0YVhy1Ut9EPhz4izDWfImrea7yL1XFvmKmMFAwM1WcI7GR472PWxmDteoOTAr/FY5+OV98+UyjKZiPzY1BzL7PceaylYtMqvrruWv2JyVcWt2SgBhIvmCPUYAgBE9Nkp+F7xotiuPt9LP8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787044575; c=relaxed/simple; bh=fpN4UcSZe0YggI4I7TSlJ6d/zlBNR8mXe8ni99KJcYw=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=hs/C8iLR5pK5xBY18cVkav6No4duIiggyJ/MdyZpN7DrtQC2tP7xZMg6GFojhyQ9SesnFpImF8+1PbWWEa4xlwT8oSDWAYGYFE7aKECuAb7MVjUIqvVDPGR0YH28UKDChHJVUQzXSeQ1RWZiVNq9mVBJfCq1YkJTAMUxW7NS/Y4= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--ackerleytng.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=htwJa9QZ; arc=none smtp.client-ip=209.85.210.200 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--ackerleytng.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="htwJa9QZ" Received: by mail-pf1-f200.google.com with SMTP id d2e1a72fcca58-8484b9fb055so10151333b3a.0 for ; Tue, 18 Aug 2026 02:16:06 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1787044566; x=1787649366; darn=vger.kernel.org; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:from:to:cc:subject:date:message-id:reply-to :content-type; bh=k8WNGrZX+hjlSdnhW34q1ZcSrRlLRd8OoKfIun9uixY=; b=htwJa9QZljtsCRRQsfpyn0EwDG2KeKAMurT4+M7bYLXA9PyL8RddC58uS0S75cWdxG ZgEMApRqk6mubehFxX0l3tn60O9JiD7NRgR8JfY0xxADo6Hs42qUcYQU7CelvBNrGhrg c8P8KAhvS3S4XeSEtCD9hzcARyXBn7juQV9Szvdk5YA6omLRewuOrXlBARS32RpPdr+B a5xQ7e4R4JkBpH4TdQLELLNuEyWiKPP1HAqMaKtj/+2SF36VISeqCrj6pWbVGrxkXk0p xuUrbJzKYw4NIcBi6r3gORAlqdEUpJQcbyLdR0LQky+/+dwxkuODfBxSSjSJ6UkDxjAP y8iw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787044566; x=1787649366; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to:content-type; bh=k8WNGrZX+hjlSdnhW34q1ZcSrRlLRd8OoKfIun9uixY=; b=eYeZTIeA6czvpOVKQql+kB3bwkyj/jskne904VAQSA1SaClm92lOd7ZlWPrpif/98O wQrC31l5lfKzyOtpMbhxgRbns3UAI+y5QdG89g8z9Rg14v0S1rUX1CkuLSDfGUDNIJAq gdK+F20HQf5+qmV+wBHZUgxF1uC7RPZ0/5HZk4kq4VSq+vxhnNGNqSmQBTNISMbXsc/L qyRejq2aEc755d0fulAC03EdksQzq+Gm0tjUbahmsW9s1ybyePBCwFVBCd8C98tK624S rvhF/5WZBo0a0erQvPTGDbZOqzhgKfteAh0u/mdYnoVj76nHF/NqeqjzYgfus31GeHjI ywZA== X-Forwarded-Encrypted: i=1; AHgh+Rr/nzfkMHLZSW9Cd1BVOkwDhGYoiKxxCm5m91Ht+4/G7M+A71sUVpqRuWH+ZhhlZvUOM953OSqU6Y49upI=@vger.kernel.org X-Gm-Message-State: AOJu0YyYe27G1p0WmSeUzu00rHpeMd5EWjRn5V2TokZPrF31OfPIb1hz zhH+pQg6uCa5K9+fXpv1G14yqFlBHkciXltSak731yGj8jCiY1ZmKLhFwmiTtIwaJk3dxJCYFBL 3E3wcun7jFD761XvGOOzIKhWpEA== X-Received: from pgar27.prod.google.com ([2002:a05:6a02:2e9b:b0:c9e:2db2:a2cf]) (user=ackerleytng job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6a21:9d84:b0:3c3:bbe6:95c7 with SMTP id adf61e73a8af0-3cc71c57b6cmr42337079637.17.1787044565764; Tue, 18 Aug 2026 02:16:05 -0700 (PDT) Date: Tue, 18 Aug 2026 09:15:55 +0000 In-Reply-To: <20260818-gmem-no-return-page-v2-0-5298f42d49bb@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20260818-gmem-no-return-page-v2-0-5298f42d49bb@google.com> X-Developer-Key: i=ackerleytng@google.com; a=ed25519; pk=sAZDYXdm6Iz8FHitpHeFlCMXwabodTm7p8/3/8xUxuU= X-Developer-Signature: v=1; a=ed25519-sha256; t=1787044557; l=7550; i=ackerleytng@google.com; s=20260225; h=from:subject:message-id; bh=RNStHwu6ieacAYEnMn7/3gq/7NJJQ1KRNJugMUE32xM=; b=SRWVS1YnkzbusdD23laTjDq6lw3cgThTG7x/5lRPjxg2aZnzn3huhMER8r42Tv3YVr+kuGE3U mZ9CzNyj2NFCq5w150/6XXA4e4tzMt53i6D8Q/4vh6tli54166j/Rqe X-Mailer: b4 0.16.0 Message-ID: <20260818-gmem-no-return-page-v2-4-5298f42d49bb@google.com> Subject: [PATCH v2 4/4] KVM: guest_memfd: Stop returning struct page from PFN lookup From: Ackerley Tng To: Sean Christopherson , Paolo Bonzini , Thomas Gleixner , Ingo Molnar , Borislav Petkov , Dave Hansen , x86@kernel.org, "H. Peter Anvin" , Ashish Kalra , Michael Roth , Brijesh Singh , Marc Zyngier , Oliver Upton , Joey Gouly , Steffen Eiden , Suzuki K Poulose , Zenghui Yu , Catalin Marinas , Will Deacon , David Hildenbrand , Fuad Tabba , Yan Zhao , "Edgecombe, Rick P" , Vishal Annapurve Cc: kvm@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, kvmarm@lists.linux.dev, Ackerley Tng Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable From: Sean Christopherson KVM currently expects guest_memfd PFN lookups to return a refcounted struct page, which callers hold across fault handling. Holding a page reference across fault handling is problematic for guest_memfd. In-place memory conversions between confidential computing shared and private states inspect folio refcounts to ensure exclusive ownership by guest_memfd. A concurrent guest page fault taking a reference on the folio causes conversions to fail due to an elevated refcount. guest_memfd already notifies KVM of page invalidations, so callers within KVM only need to respect the MMU invalidation protocol to safely rely on guest_memfd for page presence. Furthermore, removing struct page from the guest_memfd PFN lookup moves KVM closer toward supporting memory backends that are not backed by struct page. Drop the folio reference immediately before returning from the guest_memfd PFN lookup, and stop returning the struct page pointer. For ARM, initialize the local page pointer to NULL so that the shared cleanup path that releases fault-in pages safely no-ops for guest_memfd. For x86, no additional changes are required in the MMU fault path because the page fault tracking structure is zero-initialized at the start of page fault handling, ensuring the refcounted page pointer is already NULL. Reported-by: Yan Zhao Closes: https://lore.kernel.org/all/anZ4W9o5pTWIEgMY@yzhao56-desk.sh.intel.= com/ Signed-off-by: Sean Christopherson Co-developed-by: Yan Zhao Signed-off-by: Yan Zhao Co-developed-by: Ackerley Tng Signed-off-by: Ackerley Tng Reviewed-by: Michael Roth Reviewed-by: Suzuki K Poulose Tested-by: Michael Roth Tested-by: Yan Zhao --- arch/arm64/kvm/mmu.c | 4 ++-- arch/arm64/kvm/nested.c | 4 ++-- arch/x86/kvm/mmu/mmu.c | 2 +- arch/x86/kvm/svm/sev.c | 8 ++------ include/linux/kvm_host.h | 6 ++---- virt/kvm/guest_memfd.c | 9 ++------- 6 files changed, 11 insertions(+), 22 deletions(-) diff --git a/arch/arm64/kvm/mmu.c b/arch/arm64/kvm/mmu.c index 6c941aaa10c63..e5d637a5ec558 100644 --- a/arch/arm64/kvm/mmu.c +++ b/arch/arm64/kvm/mmu.c @@ -1613,7 +1613,7 @@ static int gmem_abort(const struct kvm_s2_fault_desc = *s2fd) enum kvm_pgtable_prot prot =3D KVM_PGTABLE_PROT_R; struct kvm_pgtable *pgt =3D s2fd->vcpu->arch.hw_mmu->pgt; unsigned long mmu_seq; - struct page *page; + struct page *page =3D NULL; struct kvm *kvm =3D s2fd->vcpu->kvm; void *memcache =3D NULL; kvm_pfn_t pfn; @@ -1641,7 +1641,7 @@ static int gmem_abort(const struct kvm_s2_fault_desc = *s2fd) /* Pairs with the smp_wmb() in kvm_mmu_invalidate_end(). */ smp_rmb(); =20 - ret =3D kvm_gmem_get_pfn(kvm, s2fd->memslot, gfn, &pfn, &page, NULL); + ret =3D kvm_gmem_get_pfn(kvm, s2fd->memslot, gfn, &pfn, NULL); if (ret) { kvm_prepare_memory_fault_exit(s2fd->vcpu, s2fd->fault_ipa, PAGE_SIZE, write_fault, exec_fault, false); diff --git a/arch/arm64/kvm/nested.c b/arch/arm64/kvm/nested.c index fb54f6dad995c..43523bb17621a 100644 --- a/arch/arm64/kvm/nested.c +++ b/arch/arm64/kvm/nested.c @@ -1360,7 +1360,7 @@ static int kvm_translate_vncr(struct kvm_vcpu *vcpu, = bool *is_gmem) bool write_fault, writable; unsigned long mmu_seq; struct vncr_tlb *vt; - struct page *page; + struct page *page =3D NULL; u64 va, pfn, gfn; int ret; =20 @@ -1411,7 +1411,7 @@ static int kvm_translate_vncr(struct kvm_vcpu *vcpu, = bool *is_gmem) if (is_error_noslot_pfn(pfn) || (write_fault && !writable)) return -EFAULT; } else { - ret =3D kvm_gmem_get_pfn(vcpu->kvm, memslot, gfn, &pfn, &page, NULL); + ret =3D kvm_gmem_get_pfn(vcpu->kvm, memslot, gfn, &pfn, NULL); if (ret) { kvm_prepare_memory_fault_exit(vcpu, vt->wr.pa, PAGE_SIZE, write_fault, false, false); diff --git a/arch/x86/kvm/mmu/mmu.c b/arch/x86/kvm/mmu/mmu.c index c519e8e8d646f..129d403308051 100644 --- a/arch/x86/kvm/mmu/mmu.c +++ b/arch/x86/kvm/mmu/mmu.c @@ -4604,7 +4604,7 @@ static int kvm_mmu_faultin_pfn_gmem(struct kvm_vcpu *= vcpu, } =20 r =3D kvm_gmem_get_pfn(vcpu->kvm, fault->slot, fault->gfn, &fault->pfn, - &fault->refcounted_page, &max_order); + &max_order); if (r) { kvm_mmu_prepare_memory_fault_exit(vcpu, fault); return r; diff --git a/arch/x86/kvm/svm/sev.c b/arch/x86/kvm/svm/sev.c index d3d620bc04dce..32db979daaaf0 100644 --- a/arch/x86/kvm/svm/sev.c +++ b/arch/x86/kvm/svm/sev.c @@ -4016,7 +4016,6 @@ static void __sev_snp_reload_vmsa(struct kvm_vcpu *vc= pu, gpa_t gpa) struct kvm *kvm =3D vcpu->kvm; gfn_t gfn =3D gpa_to_gfn(gpa); unsigned long mmu_seq; - struct page *page; kvm_pfn_t pfn; =20 lockdep_assert_held(&svm->sev_es.snp_vmsa_mutex); @@ -4060,9 +4059,8 @@ static void __sev_snp_reload_vmsa(struct kvm_vcpu *vc= pu, gpa_t gpa) * The new VMSA will be private memory guest memory, so retrieve the * PFN from the gmem backend. */ - if (kvm_gmem_get_pfn(vcpu->kvm, slot, gfn, &pfn, &page, NULL)) + if (kvm_gmem_get_pfn(vcpu->kvm, slot, gfn, &pfn, NULL)) return; - kvm_release_page_clean(page); =20 read_lock(&kvm->mmu_lock); /* @@ -5003,7 +5001,6 @@ void sev_handle_rmp_fault(struct kvm_vcpu *vcpu, gpa_= t gpa, u64 error_code) struct kvm *kvm =3D vcpu->kvm; int order, rmp_level, ret; unsigned long mmu_seq; - struct page *page; bool assigned; kvm_pfn_t pfn; gfn_t gfn; @@ -5033,13 +5030,12 @@ void sev_handle_rmp_fault(struct kvm_vcpu *vcpu, gp= a_t gpa, u64 error_code) mmu_seq =3D kvm->mmu_invalidate_seq; smp_rmb(); =20 - ret =3D kvm_gmem_get_pfn(kvm, slot, gfn, &pfn, &page, &order); + ret =3D kvm_gmem_get_pfn(kvm, slot, gfn, &pfn, &order); if (ret) { pr_warn_ratelimited("SEV: Unexpected RMP fault, no backing page for priv= ate GPA 0x%llx\n", gpa); return; } - kvm_release_page_unused(page); =20 ret =3D snp_lookup_rmpentry(pfn, &assigned, &rmp_level); if (ret || !assigned) { diff --git a/include/linux/kvm_host.h b/include/linux/kvm_host.h index 03bfc92864b6e..502465119ca0c 100644 --- a/include/linux/kvm_host.h +++ b/include/linux/kvm_host.h @@ -2586,13 +2586,11 @@ static inline bool kvm_mem_is_private(struct kvm *k= vm, gfn_t gfn) =20 #ifdef CONFIG_KVM_GUEST_MEMFD int kvm_gmem_get_pfn(struct kvm *kvm, struct kvm_memory_slot *slot, - gfn_t gfn, kvm_pfn_t *pfn, struct page **page, - int *max_order); + gfn_t gfn, kvm_pfn_t *pfn, int *max_order); #else static inline int kvm_gmem_get_pfn(struct kvm *kvm, struct kvm_memory_slot *slot, gfn_t gfn, - kvm_pfn_t *pfn, struct page **page, - int *max_order) + kvm_pfn_t *pfn, int *max_order) { KVM_BUG_ON(1, kvm); return -EIO; diff --git a/virt/kvm/guest_memfd.c b/virt/kvm/guest_memfd.c index b596486d184ca..589762140c3ef 100644 --- a/virt/kvm/guest_memfd.c +++ b/virt/kvm/guest_memfd.c @@ -751,8 +751,7 @@ static struct folio *__kvm_gmem_get_pfn(struct file *fi= le, } =20 int kvm_gmem_get_pfn(struct kvm *kvm, struct kvm_memory_slot *slot, - gfn_t gfn, kvm_pfn_t *pfn, struct page **page, - int *max_order) + gfn_t gfn, kvm_pfn_t *pfn, int *max_order) { pgoff_t index =3D kvm_gmem_get_index(slot, gfn); struct folio *folio; @@ -780,11 +779,7 @@ int kvm_gmem_get_pfn(struct kvm *kvm, struct kvm_memor= y_slot *slot, #endif =20 folio_unlock(folio); - - if (!r) - *page =3D folio_file_page(folio, index); - else - folio_put(folio); + folio_put(folio); =20 return r; } --=20 2.55.0.699.gb54405d56f-goog