From nobody Fri Jul 24 04:48:31 2026 Received: from mail-pf1-f197.google.com (mail-pf1-f197.google.com [209.85.210.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 991D12DCF46 for ; Fri, 24 Jul 2026 00:48:02 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.197 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784854083; cv=none; b=dC+/xCZ0jl7Qqi9xNA2zLOZeXekxLvnz1mO5c0iarwYuYlApJMJwcsYyy3Ex/oV0xTxIVjbhtzp4ktqzeARszFPC2lsWXx99dnXR7cwG4v4FSVz6R/HM8/3HDY3XOCaynt6I1qtKzbiOvNOAcAoXHdCMerz7uX6vRdj6l0Nxjbc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784854083; c=relaxed/simple; bh=il0oC+ts1tFRkD6YLSl9Y8nYr9O6K2V6l/fww+pWdNA=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=UabXzUzQqd4dWOoakdWtpUbYyWkAV8Tb4cZCGuuLsppRVovDel+TclZ7qDzh4lmARwhVmkPu7/USreWep8v24z0LvLDM7LBfrjTklDSbLfl/Mu1p/mYWozF09jlwS1d1nMDV/OcMohl6Y+65mveaQx6hDgiH40k/nZI1hvaxrfo= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--seanjc.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=uynIzGl5; arc=none smtp.client-ip=209.85.210.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--seanjc.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="uynIzGl5" Received: by mail-pf1-f197.google.com with SMTP id d2e1a72fcca58-84842381150so2216610b3a.3 for ; Thu, 23 Jul 2026 17:48:02 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1784854082; x=1785458882; darn=vger.kernel.org; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:reply-to:from:to:cc:subject:date:message-id :reply-to:content-type; bh=+KAdYpKsVpQWTrdyWSZ+uQBEtcV06POwwOgp0O+/BnM=; b=uynIzGl53i4xGrzDeLweT0FOeb34ayBBUZTC/wJFVTXKMNJz9utWElZotZwK0u6THg M6DhcOyn/fN5RaOUgl2vc3+e0YBP++OPvvYLHpqbA5Qd/PMb7ZcvCXTEpw8NeErCWdOS bW4SMO/OGL0ZMLffRgY+Eo4dp1H0vFKszDMUSfphtulV+Vw1O/R0mgxZrtcHpFtOgqpj DFTsR1MxkC8Q64Ixcvtz2f4HMqHiscatxydPO9zqUYA5/lqG9twsob0zJO5iv0rbKYRk ADzUpurfX0NJC50vyyZL3Yz7JacBVPHZiCLAT7zz8hnWqhduOzqnxGAE88Fs4lsd0Dgv 9/3A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1784854082; x=1785458882; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:reply-to:x-gm-message-state:from:to:cc:subject :date:message-id:reply-to:content-type; bh=+KAdYpKsVpQWTrdyWSZ+uQBEtcV06POwwOgp0O+/BnM=; b=UVN1LQnhpSh1XLhgiVoqhN7kcmYuumz5ANNNfubk/WbBotrAEzwrhzb7h9lJI5bfzh MVPu5sb5/VuWOgt5ZwXn9Wqn6rvSyoAhgyz828pixpdRgI/X9AxRIdOOaOlgk3it73s4 /Mw6vMMX2xeOcaL2SnfetWFIIZGutltJRcg8WV2vACqzhmDa6RVZ1v/hGEBCFg6rM8q8 SUwS40pWhoCZMi5icRNmNgGe4EijuFoYpOsFu3+zVw6v7tyX381PbDgSh7rKR3L4Q2xa HZmswoRGoZkjpemTNGS3imaJ+Ir6M8OGXE8tCM4WR5qam4XBWnC1SFQlyXowYcgRQt3k dPFw== X-Forwarded-Encrypted: i=1; AHgh+Roa3Bx64oSeVen/esO7djNhcIOOpBQ5JhkzsadWPLLvT2vH05QLoCmC4t4vuRl43IjgZrW2udPFXDTPRSQ=@vger.kernel.org X-Gm-Message-State: AOJu0Ywvu0R+QrMDFozgyXmgIO1DKbNwKWXugubqTYybJ5BbT3gBqPjt H24vJEnQY2TSY8lGCtVjJwfXELIpiptgWR/2gMmh3CrD36uONjXB0i0+ia+xyyW5UCkgQxLUP9X y1mZPFA== X-Received: from pfbjw39.prod.google.com ([2002:a05:6a00:92a7:b0:847:aa6c:47fc]) (user=seanjc job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6a00:300f:b0:848:2cb2:cd97 with SMTP id d2e1a72fcca58-84e2bba4c21mr6791782b3a.52.1784854081825; Thu, 23 Jul 2026 17:48:01 -0700 (PDT) Reply-To: Sean Christopherson Date: Thu, 23 Jul 2026 17:47:52 -0700 In-Reply-To: <20260724004757.131420-1-seanjc@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20260724004757.131420-1-seanjc@google.com> X-Mailer: git-send-email 2.55.0.229.g6434b31f56-goog Message-ID: <20260724004757.131420-2-seanjc@google.com> Subject: [PATCH 1/6] KVM: nVMX: Ensure KVM_REQ_GET_NESTED_STATE_PAGES is cleared on VM-Exit From: Sean Christopherson To: Madhavan Srinivasan , Sean Christopherson , Paolo Bonzini Cc: Nicholas Piggin , linuxppc-dev@lists.ozlabs.org, kvm@vger.kernel.org, linux-kernel@vger.kernel.org, Yosry Ahmed Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Always check and clear KVM_REQ_GET_NESTED_STATE_PAGES when emulating a nested VM-Exit to ensure the request is cleared, even when KVM was built with CONFIG_KVM_HYPERV=3Dn, as KVM subtly relies on the "check" to clear the flag and thus avoid double-mapping the vmcs12 pages, e.g. if KVM manages to bail from VM-Enter without processing the request, and then emulates VMLAUNCH or VMRESUME. Fixes: b4f69df0f65e ("KVM: x86: Make Hyper-V emulation optional") Cc: stable@vger.kernel.org Reported-by: Yosry Ahmed Signed-off-by: Sean Christopherson --- arch/x86/kvm/vmx/nested.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/arch/x86/kvm/vmx/nested.c b/arch/x86/kvm/vmx/nested.c index b5460de4b1a7..f2518d67e7de 100644 --- a/arch/x86/kvm/vmx/nested.c +++ b/arch/x86/kvm/vmx/nested.c @@ -5066,8 +5066,9 @@ void __nested_vmx_vmexit(struct kvm_vcpu *vcpu, u32 v= m_exit_reason, /* trying to cancel vmlaunch/vmresume is a bug */ kvm_warn_on_nested_run_pending(vcpu); =20 -#ifdef CONFIG_KVM_HYPERV + /* Note, "checking" the request also clears the request. */ if (kvm_check_request(KVM_REQ_GET_NESTED_STATE_PAGES, vcpu)) { +#ifdef CONFIG_KVM_HYPERV /* * KVM_REQ_GET_NESTED_STATE_PAGES is also used to map * Enlightened VMCS after migration and we still need to @@ -5075,8 +5076,8 @@ void __nested_vmx_vmexit(struct kvm_vcpu *vcpu, u32 v= m_exit_reason, * the first L2 run. */ (void)nested_get_evmcs_page(vcpu); - } #endif + } =20 /* Service pending TLB flush requests for L2 before switching to L1. */ kvm_service_local_tlb_flush_requests(vcpu); --=20 2.55.0.229.g6434b31f56-goog From nobody Fri Jul 24 04:48:31 2026 Received: from mail-pg1-f200.google.com (mail-pg1-f200.google.com [209.85.215.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 CE8232EEE8C for ; Fri, 24 Jul 2026 00:48:03 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.215.200 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784854085; cv=none; b=AuPUyAom3Czd1kNNsjTRj9Rb8kgHBBoUhWxEbMfrpIAjFei0tA4DOTsj5fXktXWp5z7IYODJ7tpV9jiiyrSRXAiwWdUEpN0DZO4iH4YigfaUHULga1HkN8SzVa1Ubae5Z24Vq9MxrrAe0bovLrvje9T0STTibKM3TY1uom1ks/Y= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784854085; c=relaxed/simple; bh=FUCfYbsz9ZyIbrv4tJzgA6QFVNOzaEU/1cTSyaAlIJw=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=kYgwHmifXS8egElO9O69Lh4gGssLLGmj3Sn+pPxJzHnLZ/4zZhL4mFcwzJcjuKzv9R4/+8kmQ/yXGZDhGpb/M7KvrdrVgpjNmrTAsCxvwYqgELKbMDrqgpSBK8eKiHfN2gDfJdjNqDLBo6z4Lmu8i+VrrAwIsFAHJ/SOjj0zK2U= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--seanjc.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=N0w3arNu; arc=none smtp.client-ip=209.85.215.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--seanjc.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="N0w3arNu" Received: by mail-pg1-f200.google.com with SMTP id 41be03b00d2f7-caf5fa127d4so2358538a12.0 for ; Thu, 23 Jul 2026 17:48:03 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1784854083; x=1785458883; darn=vger.kernel.org; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:reply-to:from:to:cc:subject:date:message-id :reply-to:content-type; bh=5hCTXU5J5OKjCYOs510ZpnLddxhpdmEInNm/3mj3vgs=; b=N0w3arNu1g1YWrBJHPqgEwHOMELtvrMZl5B3pLAig3HOwGp5StaGi/q/SQafwEHuQe f4xoHnUPsYqbEo3rFZx/N1KP+wFUYWLz+lGNjnW1b23m/DkiZsSoooFr6k22jRBUP9iV l7wPz/N3pGMsZ9hDVDjG2SbaiL2GA0q6ZbZ8YBGUXO2vmlTDld+kch1PuU+X3nbXYOHA U/KipJCw1PEsDT/SsvVNkLzDUCUzMVa5TWvqioq9OnNbxXnj0IaKwB8wdmUtpUNNGkWu tJMLYLLsJrRXc6NYdq0tHdH0kxSjLvjATwRwEEwBJqfseW+9dM8V0kSaeHwkys2ktMCW TFiQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1784854083; x=1785458883; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:reply-to:x-gm-message-state:from:to:cc:subject :date:message-id:reply-to:content-type; bh=5hCTXU5J5OKjCYOs510ZpnLddxhpdmEInNm/3mj3vgs=; b=Yud6zbQoYCqylQsYAfvd1b6pgPAhMBByIDodRyhIDdUZdRsH6NuyTUs5Y67UQWghEg CjrB1Jmnr6PXCJ+U/f7jmXXMWTAa3OEafgJfaXJ4qQWa9yS71rOej1MyWDNh7s5Q0U8H Oo9I2G8FYxODQLoNmmwZ+K3bILjgc2/vV9y23qfppARIh3oeAsjWVfuuS+bBlU5ve6PV f+0AF0B6srCm0HTVrMc05u7iXOksBVBttNwv/4XtvstQNDt71lVm1wI6GU9hBFGhRh/0 TUpoh6CGfYVO+HCxiqQxzP3dsDYt2L5bMus4sLhYcAHQhqjbc973/3G0rBtr6+S2MLxP 8bHQ== X-Forwarded-Encrypted: i=1; AHgh+RpQS1vP9b7KnG4uNR3RKE0+6FXQCKAOETRF0EnrfQOHpjGjZSrlOqRr4HGCtGHz+8R/XYZKnHQVpt30Ydg=@vger.kernel.org X-Gm-Message-State: AOJu0YywK6ZDdh9updGe/p1bq62QGy7y8Yg3ZH5pk0sBJ1Mct4hgICoD mu/ah/y2GDew+gSzKBZ26t68nlj80Xl2zDCRm/0JBa624vQg5xDjshlRvQ+WTxFg1yMVZzaEFds qoP7udQ== X-Received: from pgbct6.prod.google.com ([2002:a05:6a02:2106:b0:cb5:f989:9b3e]) (user=seanjc job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6a21:6494:b0:3b7:aefe:4367 with SMTP id adf61e73a8af0-3c44b051466mr6208250637.33.1784854082942; Thu, 23 Jul 2026 17:48:02 -0700 (PDT) Reply-To: Sean Christopherson Date: Thu, 23 Jul 2026 17:47:53 -0700 In-Reply-To: <20260724004757.131420-1-seanjc@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20260724004757.131420-1-seanjc@google.com> X-Mailer: git-send-email 2.55.0.229.g6434b31f56-goog Message-ID: <20260724004757.131420-3-seanjc@google.com> Subject: [PATCH 2/6] KVM: nSVM: Add CLASS()es for automagically handling local kvm_vcpu_map() usage From: Sean Christopherson To: Madhavan Srinivasan , Sean Christopherson , Paolo Bonzini Cc: Nicholas Piggin , linuxppc-dev@lists.ozlabs.org, kvm@vger.kernel.org, linux-kernel@vger.kernel.org, Yosry Ahmed Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Add CLASS() definitions for locally mapping a PFN using kvm_vcpu_map() given a vCPU+gfn pair. In addition to eliminating the need to manually do unmap(), e.g. in error paths, this will allow hardening KVM against double-mapping without having to manually ensure every on-stack declaration is zero-initialized. Use "map local" as the primary terminology as the basic concept is more or less the same as kmap_local(): ensure the current context has a kernel mapping to the underlying memory. Immediately convert the relatively straightforward nested SVM flows, and defer converting the more involved SMM flows to a separate change. No functional change intended. Cc: Yosry Ahmed Signed-off-by: Sean Christopherson --- arch/x86/kvm/svm/nested.c | 18 +++++++----------- arch/x86/kvm/svm/svm.c | 8 +++----- include/linux/kvm_host.h | 19 +++++++++++++++++++ 3 files changed, 29 insertions(+), 16 deletions(-) diff --git a/arch/x86/kvm/svm/nested.c b/arch/x86/kvm/svm/nested.c index 5e3e280cd483..73f37b050d0a 100644 --- a/arch/x86/kvm/svm/nested.c +++ b/arch/x86/kvm/svm/nested.c @@ -1086,14 +1086,14 @@ int enter_svm_guest_mode(struct kvm_vcpu *vcpu, u64= vmcb12_gpa, bool from_vmrun) static int nested_svm_copy_vmcb12_to_cache(struct kvm_vcpu *vcpu, u64 vmcb= 12_gpa) { struct vcpu_svm *svm =3D to_svm(vcpu); - struct kvm_host_map map; struct vmcb *vmcb12; int r =3D 0; =20 - if (kvm_vcpu_map(vcpu, gpa_to_gfn(vmcb12_gpa), &map)) + CLASS(kvm_vcpu_map_local, m)(vcpu, gpa_to_gfn(vmcb12_gpa)); + if (m.ret) return -EFAULT; =20 - vmcb12 =3D map.hva; + vmcb12 =3D m.map.hva; nested_copy_vmcb_control_to_cache(svm, &vmcb12->control); nested_copy_vmcb_save_to_cache(svm, &vmcb12->save); =20 @@ -1107,7 +1107,6 @@ static int nested_svm_copy_vmcb12_to_cache(struct kvm= _vcpu *vcpu, u64 vmcb12_gpa r =3D -EINVAL; } =20 - kvm_vcpu_unmap(vcpu, &map); return r; } =20 @@ -1251,15 +1250,13 @@ static int nested_svm_vmexit_update_vmcb12(struct k= vm_vcpu *vcpu) { struct vcpu_svm *svm =3D to_svm(vcpu); struct vmcb *vmcb02 =3D svm->nested.vmcb02.ptr; - struct kvm_host_map map; struct vmcb *vmcb12; - int rc; =20 - rc =3D kvm_vcpu_map(vcpu, gpa_to_gfn(svm->nested.vmcb12_gpa), &map); - if (rc) - return rc; + CLASS(kvm_vcpu_map_local, m)(vcpu, gpa_to_gfn(svm->nested.vmcb12_gpa)); + if (m.ret) + return m.ret; =20 - vmcb12 =3D map.hva; + vmcb12 =3D m.map.hva; =20 vmcb12->save.es =3D vmcb02->save.es; vmcb12->save.cs =3D vmcb02->save.cs; @@ -1314,7 +1311,6 @@ static int nested_svm_vmexit_update_vmcb12(struct kvm= _vcpu *vcpu) vmcb12->control.exit_int_info_err, KVM_ISA_SVM); =20 - kvm_vcpu_unmap(vcpu, &map); return 0; } =20 diff --git a/arch/x86/kvm/svm/svm.c b/arch/x86/kvm/svm/svm.c index 91286d46d13a..bf10483c0e8a 100644 --- a/arch/x86/kvm/svm/svm.c +++ b/arch/x86/kvm/svm/svm.c @@ -2216,7 +2216,6 @@ static int vmload_vmsave_interception(struct kvm_vcpu= *vcpu, bool vmload) u64 vmcb12_gpa =3D kvm_rax_read(vcpu); struct vcpu_svm *svm =3D to_svm(vcpu); struct vmcb *vmcb12; - struct kvm_host_map map; int ret; =20 if (nested_svm_check_permissions(vcpu)) @@ -2227,10 +2226,11 @@ static int vmload_vmsave_interception(struct kvm_vc= pu *vcpu, bool vmload) return 1; } =20 - if (kvm_vcpu_map(vcpu, gpa_to_gfn(vmcb12_gpa), &map)) + CLASS(kvm_vcpu_map_local, m)(vcpu, gpa_to_gfn(vmcb12_gpa)); + if (m.ret) return kvm_handle_memory_failure(vcpu, X86EMUL_IO_NEEDED, NULL); =20 - vmcb12 =3D map.hva; + vmcb12 =3D m.map.hva; =20 ret =3D kvm_skip_emulated_instruction(vcpu); =20 @@ -2243,8 +2243,6 @@ static int vmload_vmsave_interception(struct kvm_vcpu= *vcpu, bool vmload) svm_copy_vmloadsave_state(vmcb12, svm->vmcb01.ptr); } =20 - kvm_vcpu_unmap(vcpu, &map); - return ret; } =20 diff --git a/include/linux/kvm_host.h b/include/linux/kvm_host.h index 9db6eb4023c4..c54dbfdbc346 100644 --- a/include/linux/kvm_host.h +++ b/include/linux/kvm_host.h @@ -1420,6 +1420,25 @@ static inline void kvm_vcpu_map_mark_dirty(struct kv= m_vcpu *vcpu, kvm_vcpu_mark_page_dirty(vcpu, map->gfn); } =20 +typedef struct { + struct kvm_vcpu *vcpu; + struct kvm_host_map map; + int ret; +} kvm_vcpu_local_map_t; + +#define DEFINE_VCPU_MAP_CLASS(ro) \ +DEFINE_CLASS(kvm_vcpu_map_local##ro, kvm_vcpu_local_map_t, \ + if (!_T.ret) kvm_vcpu_unmap(_T.vcpu, &_T.map), \ + ({ \ + kvm_vcpu_local_map_t m =3D { .vcpu =3D vcpu }; \ + \ + m.ret =3D kvm_vcpu_map##ro(vcpu, gfn, &m.map); \ + \ + m; \ + }), struct kvm_vcpu *vcpu, gfn_t gfn); +DEFINE_VCPU_MAP_CLASS(); +DEFINE_VCPU_MAP_CLASS(_readonly); + unsigned long kvm_vcpu_gfn_to_hva(struct kvm_vcpu *vcpu, gfn_t gfn); unsigned long kvm_vcpu_gfn_to_hva_prot(struct kvm_vcpu *vcpu, gfn_t gfn, b= ool *writable); int kvm_vcpu_read_guest_page(struct kvm_vcpu *vcpu, gfn_t gfn, void *data,= int offset, --=20 2.55.0.229.g6434b31f56-goog From nobody Fri Jul 24 04:48:31 2026 Received: from mail-pg1-f197.google.com (mail-pg1-f197.google.com [209.85.215.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 EAE552F619D for ; Fri, 24 Jul 2026 00:48:04 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.215.197 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784854087; cv=none; b=dRlqj12qEoXWhvLcQ7R8I1YzfOLzyqNXLTGNgHsd2a491HYybbGho5u0nxSIXbCe91ERtUEm3xANNIfgPKDWrtP0RJaQhP8OyqCOEASHb1L5nPGb7A3q6ZsIwfWrYuye3X6C/wKhtN5m/pW02s14r9zaNRdUkMHEDnlkPAjKRVU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784854087; c=relaxed/simple; bh=KqdXVd09tHO6MxPI+hf6b4RatXWpu869ZuWrzl3QiuA=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=VsRDfuAL1TV26ZLmsW/up8V3LOtYuMVS52j6LUOhPVKSvldWt9fQz5Axbf7zSGxMjqxLnaqmg0Ew6nm11KYD5NGFF65mYbYp/U6W+n+sQI0iNsSqultvqVpSMnKwFKWNjJAjAs7KoNZ2xEP035yfCJY/vZ7xTHSoyUxTfVtYJYE= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--seanjc.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=CmhCXFIS; arc=none smtp.client-ip=209.85.215.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--seanjc.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="CmhCXFIS" Received: by mail-pg1-f197.google.com with SMTP id 41be03b00d2f7-cb6cf425e86so1720533a12.1 for ; Thu, 23 Jul 2026 17:48:04 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1784854084; x=1785458884; darn=vger.kernel.org; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:reply-to:from:to:cc:subject:date:message-id :reply-to:content-type; bh=Alx5+6ajemwcdZLjQENBxyMOBgE6MWN8o6tlzzoEhF8=; b=CmhCXFISOwLqQb+eLKbL4dVrWuacYFUD9c9M08yIarR9xCGt5SBT2tdXdFrr/kbGeo 0p1JLXOAPLnkquWXuZDckECrXf1SBbxn3L/8b5YXatyMWlpciN0pR2b2nJNErlZf48WQ Cn4sZRjrenIWPZsGSa3vcktxV0/+lgocOjTPgomKmjUkWSouhKly4mtU8O4jrJAi1mv3 cAYKEq38Q/veQAP7KchS7Ay/d+nWBIsvsrksJu89gwgTMsmk49lVNg5LMeN6mr1lgmGm VLDpRzgr0YE1uY5cpLR9toYpL708Z2F5GvSkwtXQICafKjLbQiXE/Ru+Q/Z/bG/TLb5/ 66Kg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1784854084; x=1785458884; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:reply-to:x-gm-message-state:from:to:cc:subject :date:message-id:reply-to:content-type; bh=Alx5+6ajemwcdZLjQENBxyMOBgE6MWN8o6tlzzoEhF8=; b=pMGRjZAf/WM3NAxkDJscXdYufuBOvsRlcrc5NkrINAfwEzu4dtKH/OzQCq+sd3rObh fW07QkMasgY9nJEuisfQuZvO2Y5xSLE5EA0ks0K5Cse7jYcxzOlmlvr9D3Rf5hM/t3Zg 3K83HG7PcbaChpuDxZEbQYgerXyOCIygR6MygB/vTr+AYEc7vbxS/Ny9vr60cO7nWwhj qj8fIIbBKT65rNdU5o7iUyu03njHf0J+0bc0PWCRkd0ScMXwA9TFNKByi10L5YZXdQUL +lcjdCfcxIPBAa+K4XFVxkuR+5IUD+HG4luvzIRa4iZg1Hes5VuV1kDSUUAkNjnVuLyJ MEJg== X-Forwarded-Encrypted: i=1; AHgh+Rpotq8QfAFH6eRDvavKE4azy2mBaJWePtWfQlademfLl8ALmM/CuwqdyHD1e6ONhaEttK7B8MEu4/kADJI=@vger.kernel.org X-Gm-Message-State: AOJu0YzuTmWb8wYABTOl/3uVD38dBJwXZQR3ACeiNudg497/IxQyPxN4 e4xFv4DhjvHK1hDPZwVCGkwDHMJOeUihMhJO94By52Quo17keD3wUuhkj4kTowyegcultrYgWNv ubLachQ== X-Received: from pgbee3.prod.google.com ([2002:a05:6a02:4583:b0:c99:d21a:f6b1]) (user=seanjc job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6a20:e292:b0:3c3:b226:f165 with SMTP id adf61e73a8af0-3c44b18d6cbmr6214167637.35.1784854084080; Thu, 23 Jul 2026 17:48:04 -0700 (PDT) Reply-To: Sean Christopherson Date: Thu, 23 Jul 2026 17:47:54 -0700 In-Reply-To: <20260724004757.131420-1-seanjc@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20260724004757.131420-1-seanjc@google.com> X-Mailer: git-send-email 2.55.0.229.g6434b31f56-goog Message-ID: <20260724004757.131420-4-seanjc@google.com> Subject: [PATCH 3/6] KVM: nSVM: Use CLASS(kvm_vcpu_map_local) for SMM VMCB mappings From: Sean Christopherson To: Madhavan Srinivasan , Sean Christopherson , Paolo Bonzini Cc: Nicholas Piggin , linuxppc-dev@lists.ozlabs.org, kvm@vger.kernel.org, linux-kernel@vger.kernel.org, Yosry Ahmed Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Convert the kvm_vcpu_map() usage in the enter/leave SMM flows to the new CLASS(kvm_vcpu_map_local) implementations, to eliminate the need to manually do unmap() in error paths, and more importantly to eliminate more of the open-coded on-stack "struct kvm_host_map" declarations. No functional change intended. Signed-off-by: Sean Christopherson --- arch/x86/kvm/svm/svm.c | 38 ++++++++++++++------------------------ 1 file changed, 14 insertions(+), 24 deletions(-) diff --git a/arch/x86/kvm/svm/svm.c b/arch/x86/kvm/svm/svm.c index bf10483c0e8a..7a417e717fd9 100644 --- a/arch/x86/kvm/svm/svm.c +++ b/arch/x86/kvm/svm/svm.c @@ -4987,7 +4987,6 @@ static int svm_smi_allowed(struct kvm_vcpu *vcpu, boo= l for_injection) static int svm_enter_smm(struct kvm_vcpu *vcpu, union kvm_smram *smram) { struct vcpu_svm *svm =3D to_svm(vcpu); - struct kvm_host_map map_save; =20 if (!is_guest_mode(vcpu)) return 0; @@ -5021,24 +5020,20 @@ static int svm_enter_smm(struct kvm_vcpu *vcpu, uni= on kvm_smram *smram) * that, see svm_prepare_switch_to_guest()) which must be * preserved. */ - if (kvm_vcpu_map(vcpu, gpa_to_gfn(svm->nested.hsave_msr), &map_save)) + CLASS(kvm_vcpu_map_local, m_save)(vcpu, gpa_to_gfn(svm->nested.hsave_msr)= ); + if (m_save.ret) return 1; =20 BUILD_BUG_ON(offsetof(struct vmcb, save) !=3D 0x400); =20 - svm_copy_vmrun_state(map_save.hva + 0x400, - &svm->vmcb01.ptr->save); - - kvm_vcpu_unmap(vcpu, &map_save); + svm_copy_vmrun_state(m_save.map.hva + 0x400, &svm->vmcb01.ptr->save); return 0; } =20 static int svm_leave_smm(struct kvm_vcpu *vcpu, const union kvm_smram *smr= am) { struct vcpu_svm *svm =3D to_svm(vcpu); - struct kvm_host_map map, map_save; struct vmcb *vmcb12; - int ret; =20 const struct kvm_smram_state_64 *smram64 =3D &smram->smram64; =20 @@ -5055,22 +5050,23 @@ static int svm_leave_smm(struct kvm_vcpu *vcpu, con= st union kvm_smram *smram) if (!(smram64->efer & EFER_SVME)) return 1; =20 - if (kvm_vcpu_map(vcpu, gpa_to_gfn(smram64->svm_guest_vmcb_gpa), &map)) + CLASS(kvm_vcpu_map_local, m)(vcpu, gpa_to_gfn(smram64->svm_guest_vmcb_gpa= )); + if (m.ret) return 1; =20 - ret =3D 1; - if (kvm_vcpu_map(vcpu, gpa_to_gfn(svm->nested.hsave_msr), &map_save)) - goto unmap_map; + CLASS(kvm_vcpu_map_local, m_save)(vcpu, gpa_to_gfn(svm->nested.hsave_msr)= ); + if (m_save.ret) + return 1; =20 if (svm_allocate_nested(svm)) - goto unmap_save; + return 1; =20 /* * Restore L1 host state from L1 HSAVE area as VMCB01 was * used during SMM (see svm_enter_smm()) */ =20 - svm_copy_vmrun_state(&svm->vmcb01.ptr->save, map_save.hva + 0x400); + svm_copy_vmrun_state(&svm->vmcb01.ptr->save, m_save.map.hva + 0x400); =20 /* * Enter the nested guest now @@ -5078,24 +5074,18 @@ static int svm_leave_smm(struct kvm_vcpu *vcpu, con= st union kvm_smram *smram) =20 vmcb_mark_all_dirty(svm->vmcb01.ptr); =20 - vmcb12 =3D map.hva; + vmcb12 =3D m.map.hva; nested_copy_vmcb_control_to_cache(svm, &vmcb12->control); nested_copy_vmcb_save_to_cache(svm, &vmcb12->save); =20 if (nested_svm_check_cached_vmcb12(vcpu) < 0) - goto unmap_save; + return 1; =20 if (enter_svm_guest_mode(vcpu, smram64->svm_guest_vmcb_gpa, false) !=3D 0) - goto unmap_save; + return 1; =20 - ret =3D 0; vcpu->arch.nested_run_pending =3D KVM_NESTED_RUN_PENDING; - -unmap_save: - kvm_vcpu_unmap(vcpu, &map_save); -unmap_map: - kvm_vcpu_unmap(vcpu, &map); - return ret; + return 0; } =20 static void svm_enable_smi_window(struct kvm_vcpu *vcpu) --=20 2.55.0.229.g6434b31f56-goog From nobody Fri Jul 24 04:48:31 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 3203B2F90C5 for ; Fri, 24 Jul 2026 00:48:07 +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=1784854092; cv=none; b=ORBJ0X7MENtjC0ChYN5jovyqh5Wjqr0YkVZXPdylLwKPVWJtos6shbggoGgdb86rWizyZT/gVVsN1PS50y9sUacPtIBOpbPJKxsf/xN47gRxLh3m6McX/qrEL4QiHVS7W02fKP6APCruMiarMpOuGngh+IapxM7kdquMYIUTNDA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784854092; c=relaxed/simple; bh=x0PAa8IBJmXHm1gQYK0iTZo+wCn5WvFspcJap6yJ2jY=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=J84e2Y3RB8KLNCX7QzEowcEdXZCmKIgnDmTydhBzdL0lnR3eFcTs6Kj9R5CsQcF6PbEtWanJ5+MFLr0eDXbJfi/wrfiwc4YT+TxcEr55SuG9EYUPTcGXa3ggOYXFCxo51wTYneqgnrHxGz3iO98mSPTn6aLiSQAPH6tpwF0r704= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--seanjc.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=dst0a8mm; 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--seanjc.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="dst0a8mm" Received: by mail-pl1-f197.google.com with SMTP id d9443c01a7336-2cc88e22f92so30267135ad.1 for ; Thu, 23 Jul 2026 17:48:07 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1784854086; x=1785458886; darn=vger.kernel.org; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:reply-to:from:to:cc:subject:date:message-id :reply-to:content-type; bh=tr4QID59hK65Du0CDEGLYDncOCtn06VQ/PfFkprj5Bw=; b=dst0a8mmSA5j7pW6nRmRzGP4+pr21JTNYAhFyJvfr4Qq0vM8Fe1SVrD4oeozvWt29Z gMYo+J8kD1XMYEYMBRqPlpdBU+L7S5bpQt4KazkLalIoTAZA9p9Kp3m36u5//kExbR3V 4QvB72S8dFqjSXJF3F5HdRA1Bm3Fum+XUOI/0OHa/FbzrsYyfsKk0mKbh25+rNXp8Azs wt79GDPE6CAfJoxCrtiRllN9+Lpai7XogPkwwYSQKktYoIJHUtDgu8fqL+KhQQW2SZDw xOcTOt5z1Xk6DqsMdi2l9NIVGnp4War8//pKiN0qYpVwTOv9hbaZBW0ShEC2BydE67/N J80Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1784854086; x=1785458886; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:reply-to:x-gm-message-state:from:to:cc:subject :date:message-id:reply-to:content-type; bh=tr4QID59hK65Du0CDEGLYDncOCtn06VQ/PfFkprj5Bw=; b=Ke1uurqFWS/8wXao9R7hnkgysloccGNFZlbW6YUK71jhyNcthv01+nkWJk7+2mpW2o ZhhTHuHDgrklD5twHqo3LHyLTuYxcv2p8JMlyJGkOpymcWxbwkjGXsbTVPVWR7KE2X7Q lFcQRjaX3wlY7mjN6WgWIMVL4sLH5kCSmhTPbpe4LABBmbGJ98gFJ2yHaPlo4XuipVql ENZqtj/YGhKQcs5PtGBDOninJnm8GcuzILPGXqvcwrrXZyTEiYSGCgLaf0/AELiyo4Ke HcrWm4HIFiN8c3NBipr8FAH5T7wyMKM9nZStyDhvElODjFMTbJAVgRw0Ees9H/suBx/M 8ILw== X-Forwarded-Encrypted: i=1; AHgh+RrgEY2rIHbwv1GCKyYjVDfr2Q1iVmxTX7XcnIeAK6EWIGjdt8pzZcrfZdBPAezCXKFsrjXFuk4nw2z5r3I=@vger.kernel.org X-Gm-Message-State: AOJu0YxLKRnNhTFQjjJ3wTucFz2BOUMn8EnvwYFdogF7gtSv7zsGJWdK PnUy4eSQhH6lIy6v//1TX9ga6k9qt7sN1Qzs3WA95ioMmy0eCkMu38+MEaCwmTJoa+UnMuiSP/A nqJ6xcA== X-Received: from plbli8.prod.google.com ([2002:a17:903:2948:b0:2ce:9c01:be21]) (user=seanjc job=prod-delivery.src-stubby-dispatcher) by 2002:a17:902:d54c:b0:2ce:7563:70a5 with SMTP id d9443c01a7336-2cfa71b8455mr70685705ad.6.1784854086369; Thu, 23 Jul 2026 17:48:06 -0700 (PDT) Reply-To: Sean Christopherson Date: Thu, 23 Jul 2026 17:47:55 -0700 In-Reply-To: <20260724004757.131420-1-seanjc@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20260724004757.131420-1-seanjc@google.com> X-Mailer: git-send-email 2.55.0.229.g6434b31f56-goog Message-ID: <20260724004757.131420-5-seanjc@google.com> Subject: [PATCH 4/6] KVM: nVMX: Use CLASS(kvm_vcpu_map_local_readonly) for MSR bitmap merging From: Sean Christopherson To: Madhavan Srinivasan , Sean Christopherson , Paolo Bonzini Cc: Nicholas Piggin , linuxppc-dev@lists.ozlabs.org, kvm@vger.kernel.org, linux-kernel@vger.kernel.org, Yosry Ahmed Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Convert the kvm_vcpu_map_readonly() usage in nVMX's MSR bitmap merging to the new CLASS(kvm_vcpu_map_local_readonly) implementation, to eliminate the last of the open-coded on-stack "struct kvm_host_map" declarations (in x86, PPC still has one more to convert). No functional change intended. Signed-off-by: Sean Christopherson --- arch/x86/kvm/vmx/nested.c | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/arch/x86/kvm/vmx/nested.c b/arch/x86/kvm/vmx/nested.c index f2518d67e7de..ef79769c6287 100644 --- a/arch/x86/kvm/vmx/nested.c +++ b/arch/x86/kvm/vmx/nested.c @@ -730,7 +730,6 @@ static inline bool nested_vmx_prepare_msr_bitmap(struct= kvm_vcpu *vcpu, int msr; unsigned long *msr_bitmap_l1; unsigned long *msr_bitmap_l0 =3D vmx->nested.vmcs02.msr_bitmap; - struct kvm_host_map map; =20 /* Nothing to do if the MSR bitmap is not in use. */ if (!cpu_has_vmx_msr_bitmap() || @@ -753,10 +752,11 @@ static inline bool nested_vmx_prepare_msr_bitmap(stru= ct kvm_vcpu *vcpu, return true; } =20 - if (kvm_vcpu_map_readonly(vcpu, gpa_to_gfn(vmcs12->msr_bitmap), &map)) + CLASS(kvm_vcpu_map_local_readonly, m)(vcpu, gpa_to_gfn(vmcs12->msr_bitmap= )); + if (m.ret) return false; =20 - msr_bitmap_l1 =3D (unsigned long *)map.hva; + msr_bitmap_l1 =3D (unsigned long *)m.map.hva; =20 /* * To keep the control flow simple, pay eight 8-byte writes (sixteen @@ -836,8 +836,6 @@ static inline bool nested_vmx_prepare_msr_bitmap(struct= kvm_vcpu *vcpu, =20 nested_vmx_merge_pmu_msr_bitmaps(vcpu, msr_bitmap_l1, msr_bitmap_l0); =20 - kvm_vcpu_unmap(vcpu, &map); - vmx->nested.force_msr_bitmap_recalc =3D false; =20 return true; --=20 2.55.0.229.g6434b31f56-goog From nobody Fri Jul 24 04:48:31 2026 Received: from mail-pl1-f198.google.com (mail-pl1-f198.google.com [209.85.214.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 8829B2F6188 for ; Fri, 24 Jul 2026 00:48:08 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.198 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784854097; cv=none; b=okJ14I77mzjWWpw0hgiffeY6xzDjyd0/hMkUdk6o18f1qhLJAqcovFoDyu6iK7qAP3I4qaAHM984+2sZqBy1h8V2KrgKqZuZqVaTnFCF/y6ktlEEo8zuHpp7lh4a3qoUe65bZ+h72bYvOGj1yiQgUWO95kD/EHiS5JPFENxYYPY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784854097; c=relaxed/simple; bh=qfluePufCYdT2dkLNE5ea2k26Dj9SDS77ApfPplLkUk=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=l97dYRPTwJrQKueza9Y3xQOsh4w0cSI30QTGLTwNQLGW6ZEkStAU8Bv18wKnuapYNPi++Bl6qF4txWrNRQN5YIWDigdwe1A1tMFcLv6ieG6XfMbtwMXK2e48czyjoZcYXVOilr9juofee34vWGG1XQQvhoPpQVXpBhJI7/rm6IY= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--seanjc.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=RVZ4rpq0; arc=none smtp.client-ip=209.85.214.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--seanjc.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="RVZ4rpq0" Received: by mail-pl1-f198.google.com with SMTP id d9443c01a7336-2cacd6d37edso19563715ad.0 for ; Thu, 23 Jul 2026 17:48:08 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1784854088; x=1785458888; darn=vger.kernel.org; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:reply-to:from:to:cc:subject:date:message-id :reply-to:content-type; bh=I3gB3WtQDQEpdFBx4UsnySvL5yUqMDwDBCfPJjwK10k=; b=RVZ4rpq02D/UZZuY2gcooCKtw6pZ1Luy5wNIznXcohQwvrdJSE32Svw9uhkJDeIPl3 5L1cn9heVpFxn7PXD6/xXNJje8zxAlg3R6vQp5npCIpvBvWNY3tiUNCQpHXivMIytlb9 ffe+WzF0R1UNCrZhoWkkPrguolaNvE9FJxtnDe9aARNNlIf89uYZq/Eb0KEDYfV1UN4o i3V4w9QUNQVLlRM4LFoBJiYt+fpuM2ZRPW95brh2TtvaxMkTkHxp9fedKKA9xQ5Q/F6h SqvYmOqQn+e3DIjgbLgcp9mYGbOhXPKSX+2C9HkguFK0LGVGio9gLshe77B08t4x0SHL qIOQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1784854088; x=1785458888; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:reply-to:x-gm-message-state:from:to:cc:subject :date:message-id:reply-to:content-type; bh=I3gB3WtQDQEpdFBx4UsnySvL5yUqMDwDBCfPJjwK10k=; b=VaYwuj7z4HzN9xwHrJTKYVbNTgKxT69MG/vW2ShpKRSS9tzKDIUy841F8JCfzZKucs +e4auMTV/PT7+xgljvQYN5Z12/kj/4hC1kCC7P9MYdN5Asw5SzrcWtd0SXUXTlIR3VTf 3GJZ2y/GINnOme3kc1WJeSZ3dxzX1xqdSJm3t5DcZkPt4uka7rZWMMmlMSdNPf/yR4N1 yV43ItUdHESkJnUkdezYch6vZUV4menVs5AzugxvRshByUNbH/psQvwIG2jIcy/LdENy j1Uy/PQFghJ392tAZ3f1JMtSza9Wyoi1ZKJWn3PWQG1yuBymkJwW9nQdStJWYuRin5q9 UP0A== X-Forwarded-Encrypted: i=1; AHgh+RqXs/BwfC5QJ5hGfU0nftu9eEYcsMgypQMGC0Tze3kc63pN0LN1lg8moupXmhE22NKdU1l0veYdyEvJVt4=@vger.kernel.org X-Gm-Message-State: AOJu0Ywdq0DcXTmg2mb63bOIX3k5S7S3EcMdBnCiB2i5J9Glz3Gte9uD KI5SoGsHc6A4AMQ/b6wbjo1z372r2tzj/6GZWLlLWhAFMI3g3GQr89uDw1JFCH/e1UJReyCXz5P DBPCwcA== X-Received: from pltf3.prod.google.com ([2002:a17:902:74c3:b0:2ca:b3d3:7c07]) (user=seanjc job=prod-delivery.src-stubby-dispatcher) by 2002:a17:902:db0e:b0:2ca:c84b:c4a4 with SMTP id d9443c01a7336-2cfa748cdebmr62759825ad.28.1784854087460; Thu, 23 Jul 2026 17:48:07 -0700 (PDT) Reply-To: Sean Christopherson Date: Thu, 23 Jul 2026 17:47:56 -0700 In-Reply-To: <20260724004757.131420-1-seanjc@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20260724004757.131420-1-seanjc@google.com> X-Mailer: git-send-email 2.55.0.229.g6434b31f56-goog Message-ID: <20260724004757.131420-6-seanjc@google.com> Subject: [PATCH 5/6] KVM: PPC: Use CLASS(kvm_vcpu_map_local_readonly) for patching dcbz From: Sean Christopherson To: Madhavan Srinivasan , Sean Christopherson , Paolo Bonzini Cc: Nicholas Piggin , linuxppc-dev@lists.ozlabs.org, kvm@vger.kernel.org, linux-kernel@vger.kernel.org, Yosry Ahmed Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Convert the kvm_vcpu_map() usage in PPC dcbz patching to the new CLASS(kvm_vcpu_map_local) implementation, to eliminate the very last of the the open-coded on-stack "struct kvm_host_map" declarations. This will allow adding hardening kvm_vcpu_map() against memory leaks (due to clobbering the existing mapping). No functional change intended. Signed-off-by: Sean Christopherson --- arch/powerpc/kvm/book3s_pr.c | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/arch/powerpc/kvm/book3s_pr.c b/arch/powerpc/kvm/book3s_pr.c index 2ba2dd26a7ea..da7a038e2700 100644 --- a/arch/powerpc/kvm/book3s_pr.c +++ b/arch/powerpc/kvm/book3s_pr.c @@ -639,27 +639,24 @@ static void kvmppc_set_pvr_pr(struct kvm_vcpu *vcpu, = u32 pvr) */ static void kvmppc_patch_dcbz(struct kvm_vcpu *vcpu, struct kvmppc_pte *pt= e) { - struct kvm_host_map map; u64 hpage_offset; u32 *page; int i, r; =20 - r =3D kvm_vcpu_map(vcpu, pte->raddr >> PAGE_SHIFT, &map); - if (r) + CLASS(kvm_vcpu_map_local, m)(vcpu, pte->raddr >> PAGE_SHIFT); + if (m.ret) return; =20 hpage_offset =3D pte->raddr & ~PAGE_MASK; hpage_offset &=3D ~0xFFFULL; hpage_offset /=3D 4; =20 - page =3D map.hva; + page =3D m.map.hva; =20 /* patch dcbz into reserved instruction, so we trap */ for (i=3Dhpage_offset; i < hpage_offset + (HW_PAGE_SIZE / 4); i++) if ((be32_to_cpu(page[i]) & 0xff0007ff) =3D=3D INS_DCBZ) page[i] &=3D cpu_to_be32(0xfffffff7); - - kvm_vcpu_unmap(vcpu, &map); } =20 static bool kvmppc_visible_gpa(struct kvm_vcpu *vcpu, gpa_t gpa) --=20 2.55.0.229.g6434b31f56-goog From nobody Fri Jul 24 04:48:31 2026 Received: from mail-pl1-f198.google.com (mail-pl1-f198.google.com [209.85.214.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 77C7B2DF153 for ; Fri, 24 Jul 2026 00:48:13 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.198 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784854097; cv=none; b=fHXil/k2xaxoNDCvqmD/Ojsqi8THcEInMoKd2A2I1Cy/9sksJ3wol3pq/V2YhoyasJA0jEKXkvJ/0LMp0RrO56zzUmxZYhwfmJ3WcUHSIDUnlVe12HS4WDyeSKj2k69cugH9mlb/J58pGSqzD/NeoLP/I2lKOM6Ihv2prdkkxyY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784854097; c=relaxed/simple; bh=Ax8Tp1KrZPx5xlSkcBsdWogHprGxL+uJksJ1bVSVzas=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=V9Y/dRJZMYmRYfk3rCCuCnUIgpieFvLW2Fni+KlQDIrU4v6UavBx6ta3uIMrHhUI6lNHKC1epGMzvVUNJ3PGs0m4SGG4CyxM8CyInmBpcPUySn1zclV7Ud5TWgJj6qAoUOTa0LGduNtV77a8d1lfxqSIQcyNVHjKYhj7Fd7SMQw= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--seanjc.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=ory6sm0k; arc=none smtp.client-ip=209.85.214.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--seanjc.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="ory6sm0k" Received: by mail-pl1-f198.google.com with SMTP id d9443c01a7336-2cc88e22f92so30267785ad.1 for ; Thu, 23 Jul 2026 17:48:13 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1784854089; x=1785458889; darn=vger.kernel.org; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:reply-to:from:to:cc:subject:date:message-id :reply-to:content-type; bh=iizTcAPrS3gcyVAqe3yTm9VHs8JAlHzgO7yvRefWb4w=; b=ory6sm0kvkUIlO3JoXGwEe1osEkqVF6PulzMo+lDhWQdKoSKEvuryz9va0ksth9Y+/ LzYm9Q55o26TG4RIqaaUUpvmFi8L6dZCgA1OdVr+Kt5UKoHSbydeAM7QeVz63s6fwF64 cpBo6DqSWcSoOAsuFtcGx/S6e40QC8uD/zFAdE9vqA7IqrlHhxXORS/v6W0QDgU8+94V +sw/LRetlgvOvnEZZZjMWC5yqQlzNcB4W23zC7G6GLxS+dMT+TG1C/IIjRGpdYWrTywR +tJS+a2ZL8+2oRDHGoEchD7eiGSI2lpG8kA3E2rFiuBNNAe7my7DJc3zzvFdJhC65nc4 3ysw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1784854089; x=1785458889; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:reply-to:x-gm-message-state:from:to:cc:subject :date:message-id:reply-to:content-type; bh=iizTcAPrS3gcyVAqe3yTm9VHs8JAlHzgO7yvRefWb4w=; b=l8wy1ZBz3ngxo4tTAL9RjSr1L9w33yg7xSqXiYiZ1Ort2wqMv0l1fi/gZJ60YyyXO0 qkVRQeTVXNXKLc9WlVbQgKV/9mM45J8f9N/D8mxMlIPXNCG6oyqimA79ZKsfsjeMMTer L72HBDkxH4WGySA2IEtE/egeFRaz1hiaWliFULl/kDE+5aLDQkV1necfRAlRJJF+2xQ/ FG6g4MwDatekH5Q4T7KUzJexFIL08mpsLVrPEbeWJv14a9/ChmXpbEKhfiZPjZX6IaQ0 +Dx66bf/mb5SnKyRUotmwQwXfJQWHQuDKSUm8g4Y74YwJFGwy9tCVRmqd27knWzjs/CG 75tw== X-Forwarded-Encrypted: i=1; AHgh+RouLnRqM2vJhORb7uTCgEds5xPKkoYG48KPonnv574lmaEnviDHM9Za8HcmF9WRa+GtQEjBRWofk5fxwdY=@vger.kernel.org X-Gm-Message-State: AOJu0YytLB8EIH4NzBnXhNfGL8ZbvIQeObpbX1lqeQo5DMt4f8gyNofx ptXNlBR/vAwfPrGE5rQfsqEyXNPWmbM/QOAVLKyanrkxcypkk7hkcIeN0397QKZ75de8S6Vi1+h ulSKHRQ== X-Received: from plblm14.prod.google.com ([2002:a17:903:298e:b0:2bc:838b:f23e]) (user=seanjc job=prod-delivery.src-stubby-dispatcher) by 2002:a17:902:f681:b0:2c9:cf5d:d9bc with SMTP id d9443c01a7336-2cfa74b13famr65141725ad.35.1784854088680; Thu, 23 Jul 2026 17:48:08 -0700 (PDT) Reply-To: Sean Christopherson Date: Thu, 23 Jul 2026 17:47:57 -0700 In-Reply-To: <20260724004757.131420-1-seanjc@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20260724004757.131420-1-seanjc@google.com> X-Mailer: git-send-email 2.55.0.229.g6434b31f56-goog Message-ID: <20260724004757.131420-7-seanjc@google.com> Subject: [PATCH 6/6] KVM: Harden kvm_vcpu_map() against double-mapping and thus leaking references From: Sean Christopherson To: Madhavan Srinivasan , Sean Christopherson , Paolo Bonzini Cc: Nicholas Piggin , linuxppc-dev@lists.ozlabs.org, kvm@vger.kernel.org, linux-kernel@vger.kernel.org, Yosry Ahmed Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Now that all on-stack maps use CLASS(kvm_vcpu_map_local), i.e. now that all maps are zero-allocated, explicitly put any existing mappings/references when establishing a new mapping to harden against KVM bugs leaking memory, but yell loudly as the owner of the map is still ultimately responsible for the lifecycle of the mapping. Suggested-by: Yosry Ahmed Signed-off-by: Sean Christopherson --- virt/kvm/kvm_main.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/virt/kvm/kvm_main.c b/virt/kvm/kvm_main.c index 2df8ee9ecf6c..e9e32686e41b 100644 --- a/virt/kvm/kvm_main.c +++ b/virt/kvm/kvm_main.c @@ -3118,6 +3118,9 @@ int __kvm_vcpu_map(struct kvm_vcpu *vcpu, gfn_t gfn, = struct kvm_host_map *map, .pin =3D true, }; =20 + if (WARN_ON_ONCE(map->hva)) + kvm_vcpu_unmap(vcpu, map); + map->pinned_page =3D NULL; map->page =3D NULL; map->hva =3D NULL; --=20 2.55.0.229.g6434b31f56-goog