kvm.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Sriram Nambakam <snambakam@linux.microsoft.com>
To: kvm@vger.kernel.org
Cc: linux-kernel@vger.kernel.org
Subject: [RFC PATCH v1 33/42] drivers/virt: rename VBS park loop to secure_monitor
Date: Wed,  5 Aug 2026 04:03:15 -0700	[thread overview]
Message-ID: <20260805110324.25067-34-snambakam@linux.microsoft.com> (raw)
In-Reply-To: <20260805110324.25067-1-snambakam@linux.microsoft.com>

Replace the secure-plane park loop (drivers/virt/vbs_park.c, CONFIG_VBS_PARK)
with drivers/virt/secure_monitor.c (CONFIG_VBS_SECURE_MONITOR), activated by
the "secure_monitor" kernel command-line option.  Behaviour is unchanged: a
late_initcall spawns the "vbs-secmon" kthread which hands control back to the
normal plane via KVM_HC_VBS_VTL_RETURN and acknowledges VTL calls as no-ops;
real per-call handlers are plumbed in incrementally.

Also drop the unused security/vbs/secure_monitor.c, which was never wired into
the running secure-plane path (it keyed off "vbs_secure_plane" under
CONFIG_VBS_KVM_PLANES but was never activated).
---
 drivers/virt/Kconfig                          |  16 +-
 drivers/virt/Makefile                         |   2 +-
 drivers/virt/{vbs_park.c => secure_monitor.c} |  77 ++---
 security/vbs/Makefile                         |   1 -
 security/vbs/secure_monitor.c                 | 266 ------------------
 5 files changed, 52 insertions(+), 310 deletions(-)
 rename drivers/virt/{vbs_park.c => secure_monitor.c} (50%)
 delete mode 100644 security/vbs/secure_monitor.c

diff --git a/drivers/virt/Kconfig b/drivers/virt/Kconfig
index 88e40eaba1c2..5d964f124afe 100644
--- a/drivers/virt/Kconfig
+++ b/drivers/virt/Kconfig
@@ -13,20 +13,20 @@ menuconfig VIRT_DRIVERS
 
 if VIRT_DRIVERS
 
-config VBS_PARK
-	bool "KVM VM-planes secure-plane park loop"
+config VBS_SECURE_MONITOR
+	bool "KVM VM-planes secure-plane monitor"
 	depends on X86 && KVM_GUEST
 	help
-	  Minimal in-kernel handler for the secure plane (plane >0) of a KVM
-	  VM-planes guest.  When enabled and the "vbs_park" kernel command-line
+	  In-kernel monitor for the secure plane (plane >0) of a KVM VM-planes
+	  guest.  When enabled and the "secure_monitor" kernel command-line
 	  option is present, a kernel thread hands control back to the normal
 	  plane via the KVM_HC_VBS_VTL_RETURN hypercall and then services VTL
 	  calls from a shared calling area.
 
-	  This is independent of the full VBS/HEKI stack (CONFIG_VBS): it
-	  implements only the park/dispatch handshake so that any secure kernel
-	  can act as plane 1.  Calls are acknowledged as no-ops.  Say N unless
-	  this kernel is used as a VM-planes secure plane.
+	  This is independent of the full VBS/HEKI stack (CONFIG_VBS) so that
+	  any secure kernel can act as plane 1.  Per-call handlers are plumbed
+	  in incrementally; until then calls are acknowledged as no-ops.  Say N
+	  unless this kernel is used as a VM-planes secure plane.
 
 config VMGENID
 	tristate "Virtual Machine Generation ID driver"
diff --git a/drivers/virt/Makefile b/drivers/virt/Makefile
index fa91899a356d..22d1121ba5bd 100644
--- a/drivers/virt/Makefile
+++ b/drivers/virt/Makefile
@@ -5,7 +5,7 @@
 
 obj-$(CONFIG_FSL_HV_MANAGER)	+= fsl_hypervisor.o
 obj-$(CONFIG_VMGENID)		+= vmgenid.o
-obj-$(CONFIG_VBS_PARK)		+= vbs_park.o
+obj-$(CONFIG_VBS_SECURE_MONITOR)	+= secure_monitor.o
 obj-y				+= vboxguest/
 
 obj-$(CONFIG_NITRO_ENCLAVES)	+= nitro_enclaves/
diff --git a/drivers/virt/vbs_park.c b/drivers/virt/secure_monitor.c
similarity index 50%
rename from drivers/virt/vbs_park.c
rename to drivers/virt/secure_monitor.c
index fabb6beeea7b..2d181c32c439 100644
--- a/drivers/virt/vbs_park.c
+++ b/drivers/virt/secure_monitor.c
@@ -1,31 +1,41 @@
 // SPDX-License-Identifier: GPL-2.0-only
 /*
- * vbs_park - minimal KVM VM-planes secure-plane park loop
+ * secure_monitor - KVM VM-planes secure-plane monitor
  *
- * This provides only the secure-plane (plane >0) side of the VM-planes
- * park/dispatch handshake so that an otherwise ordinary kernel can act as
- * plane 1.  It is deliberately independent of the full VBS/HEKI stack
- * (CONFIG_VBS): it implements no security policy.  Its single job is to hand
- * control back to the normal plane (plane 0) via the KVM_HC_VBS_VTL_RETURN
- * hypercall and then service VTL calls from the shared calling area.
+ * This is the secure-plane (plane >0) side of the VM-planes park/dispatch
+ * handshake.  It lets an otherwise ordinary kernel act as the secure plane
+ * (conventionally plane 1 / VTL1 / VMPL0, though the index is not hard-coded)
+ * without pulling in the full VBS/HEKI stack (CONFIG_VBS).  Its single job is
+ * to hand control back to the normal plane (plane 0) via the
+ * KVM_HC_VBS_VTL_RETURN hypercall and then service VTL calls from the shared
+ * calling area.
  *
  * Control flow (all within plane 0's single KVM_RUN; see
  * arch/x86/kvm/x86.c __kvm_emulate_hypercall):
  *
- *   plane 0                        KVM                       plane 1 (here)
- *   -------                        ---                       --------------
+ *   normal plane                   KVM                       secure plane
+ *   ------------                   ---                       ------------
  *   fill calling area
  *   HC_VBS_VTL_CALL(ca_gpa) ─────▶ switch_plane ───────────▶ resume in
- *                                  (RAX := ca_gpa)            vtl_return()
- *                                                            handle call_id
+ *                                  (RAX := ca_gpa)            secmon_vtl_return()
+ *                                                            dispatch(call_id)
  *                                                            write ca->status
  *   resume after VTL_CALL ◀─────── switch_plane ◀─────────── HC_VBS_VTL_RETURN
  *
- * Activated by the "vbs_park" kernel command-line option; without it this
- * kernel boots normally and never parks.
+ * Because all planes of a VM share the same memslots (struct kvm_plane has no
+ * memslots of its own; they live in struct kvm), the secure plane sees the
+ * same guest-physical address space as the normal plane and can read the
+ * calling area and the GPAs referenced by each request directly.
+ *
+ * For now every VTL call is acknowledged as a no-op so the normal plane can
+ * make progress; the real per-call handlers (self-protection, HEKI memory
+ * protection, kernel sealing, …) are plumbed in incrementally.
+ *
+ * Activated by the "secure_monitor" kernel command-line option; without it
+ * this kernel boots normally and never parks.
  */
 
-#define pr_fmt(fmt) "vbs-park: " fmt
+#define pr_fmt(fmt) "vbs-secmon: " fmt
 
 #include <linux/kernel.h>
 #include <linux/init.h>
@@ -44,7 +54,7 @@
  *
  *   [ call_pending | call_id | status | arg_size | resp_size | buffer ]
  */
-struct vtl_ca {
+struct vbs_kvm_ca {
 	__u8	call_pending;	/* 1 while call is in flight		*/
 	__u8	rsvd[3];
 	__u32	call_id;	/* request id (set by caller)		*/
@@ -54,15 +64,15 @@ struct vtl_ca {
 	__u8	buffer[];	/* request data in, response data out	*/
 } __packed;
 
-/* Set from the "vbs_park" kernel command-line option. */
-static bool vbs_park_active __ro_after_init;
+/* Set from the "secure_monitor" kernel command-line option. */
+static bool secmon_active __ro_after_init;
 
-static int __init vbs_park_setup(char *str)
+static int __init secmon_setup(char *str)
 {
-	vbs_park_active = true;
+	secmon_active = true;
 	return 1;
 }
-__setup("vbs_park", vbs_park_setup);
+__setup("secure_monitor", secmon_setup);
 
 /*
  * Park the secure plane and hand control back to the normal plane.  On the
@@ -70,23 +80,23 @@ __setup("vbs_park", vbs_park_setup);
  * hypercall return value (RAX).  @status is carried for tracing only; the
  * real result is already in the calling area.
  */
-static u64 vtl_return(long status)
+static u64 secmon_vtl_return(long status)
 {
 	return kvm_hypercall1(KVM_HC_VBS_VTL_RETURN, (unsigned long)status);
 }
 
-static int vbs_park_fn(void *unused)
+static int secmon_monitor_fn(void *unused)
 {
 	long status = 0;
 
-	pr_info("secure-plane park loop started\n");
+	pr_info("secure monitor started\n");
 
 	for (;;) {
-		struct vtl_ca *ca;
+		struct vbs_kvm_ca *ca;
 		u64 ca_gpa;
 
 		/* Park; resume with the next request's calling-area GPA. */
-		ca_gpa = vtl_return(status);
+		ca_gpa = secmon_vtl_return(status);
 		if (!ca_gpa) {
 			status = -EINVAL;
 			continue;
@@ -101,10 +111,9 @@ static int vbs_park_fn(void *unused)
 		}
 
 		/*
-		 * No security policy lives here: acknowledge the call as a
-		 * no-op so the normal plane can make progress.  Replace this
-		 * with real handlers (or move plane 1 to a dedicated SVSM) to
-		 * enforce actual VBS semantics.
+		 * No handlers are plumbed in yet: acknowledge the call as a
+		 * no-op so the normal plane can make progress.  Real per-call
+		 * dispatch is added incrementally.
 		 */
 		pr_info_ratelimited("VTL call id=0x%x arg_size=%u (no-op)\n",
 				    ca->call_id, ca->arg_size);
@@ -118,19 +127,19 @@ static int vbs_park_fn(void *unused)
 	return 0;
 }
 
-static int __init vbs_park_init(void)
+static int __init secmon_init(void)
 {
 	struct task_struct *t;
 
-	if (!vbs_park_active)
+	if (!secmon_active)
 		return 0;
 
-	t = kthread_run(vbs_park_fn, NULL, "vbs-park");
+	t = kthread_run(secmon_monitor_fn, NULL, "vbs-secmon");
 	if (IS_ERR(t)) {
-		pr_err("failed to start park loop: %ld\n", PTR_ERR(t));
+		pr_err("failed to start secure monitor: %ld\n", PTR_ERR(t));
 		return PTR_ERR(t);
 	}
 
 	return 0;
 }
-late_initcall(vbs_park_init);
+late_initcall(secmon_init);
diff --git a/security/vbs/Makefile b/security/vbs/Makefile
index f24f31727a65..01e831e28ac7 100644
--- a/security/vbs/Makefile
+++ b/security/vbs/Makefile
@@ -7,7 +7,6 @@ vbs-y := probe.o core.o
 
 vbs-$(CONFIG_VBS_HEKI)		+= heki.o
 obj-$(CONFIG_VBS_KVM_PLANES)	+= kvm_planes.o
-obj-$(CONFIG_VBS_KVM_PLANES)	+= secure_monitor.o
 obj-$(CONFIG_VBS_SEV_SNP)	+= sev_snp.o
 obj-$(CONFIG_VBS_TDX)		+= tdx.o
 obj-$(CONFIG_VBS_HV_VSM)	+= hv_vsm.o
diff --git a/security/vbs/secure_monitor.c b/security/vbs/secure_monitor.c
deleted file mode 100644
index c1221ad5019b..000000000000
--- a/security/vbs/secure_monitor.c
+++ /dev/null
@@ -1,266 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0-only
-/*
- * VBS secure-plane monitor — in-guest VTL dispatcher
- *
- * This is the secure-plane counterpart of the normal-plane kvm_planes
- * backend.  The SAME kernel image boots as both the normal plane and the
- * secure plane; when booted as the secure plane (selected via the
- * "vbs_secure_plane" kernel command-line option) this monitor takes over
- * and services VTL calls issued by the normal plane.
- *
- * "Secure plane" is the highest-privilege plane of the VM (conventionally
- * plane 1 / VTL1 / VMPL0, but a VM may have up to KVM_MAX_PLANES planes and
- * the index is not hard-coded here).  "Normal plane" is the requesting,
- * lower-privilege plane (conventionally plane 0).
- *
- * Control flow (all within the normal plane's single KVM_RUN, see
- * arch/x86/kvm/x86.c ____kvm_emulate_hypercall):
- *
- *   normal plane                   KVM                       secure plane
- *   ------------                   ---                       ------------
- *   fill calling area
- *   HC_VBS_VTL_CALL(ca_gpa) ─────▶ switch_plane ───────────▶ resume in
- *                                  (RAX := ca_gpa)            secmon_vtl_return()
- *                                                            dispatch(call_id)
- *                                                            write ca->status
- *   resume after VTL_CALL ◀─────── switch_plane ◀─────────── HC_VBS_VTL_RETURN(status)
- *   read ca->status
- *
- * Because all planes of a VM share the same memslots (struct kvm_plane has
- * no memslots of its own; they live in struct kvm), the secure plane sees
- * the same guest-physical address space as the normal plane and can read
- * the calling area and the GPAs referenced by each request directly.
- */
-
-#define pr_fmt(fmt) "vbs-secmon: " fmt
-
-#include <linux/kernel.h>
-#include <linux/init.h>
-#include <linux/kthread.h>
-#include <linux/io.h>
-#include <linux/mm.h>
-#include <linux/types.h>
-#include <linux/errno.h>
-#include <linux/vbs.h>
-#include <linux/kvm_para.h>
-#include <asm/kvm_para.h>
-
-#include "heki.h"
-
-/*
- * Shared-memory calling area — must match struct vbs_kvm_ca in kvm_planes.c
- * (this is the normal-plane <-> secure-plane wire ABI).
- *
- *   [ call_pending | call_id | status | arg_size | resp_size | buffer ]
- */
-struct vbs_kvm_ca {
-	__u8	call_pending;	/* 1 while call is in flight		*/
-	__u8	rsvd[3];
-	__u32	call_id;	/* enum vbs_call_id (set by caller)	*/
-	__s32	status;		/* return code (set by responder)	*/
-	__u32	arg_size;	/* request payload size			*/
-	__u32	resp_size;	/* response payload size		*/
-	__u8	buffer[];	/* request data in, response data out	*/
-} __packed;
-
-/* Set from the "vbs_secure_plane" kernel command-line option. */
-static bool secmon_active __ro_after_init;
-
-static int __init secmon_setup(char *str)
-{
-	secmon_active = true;
-	return 1;
-}
-__setup("vbs_secure_plane", secmon_setup);
-
-/*
- * Park the secure plane and hand control back to the normal plane.  On the
- * next VTL call, KVM resumes us here with the calling-area GPA in the
- * hypercall return value (RAX).  @status is carried for tracing only; the
- * real result is already in the calling area.
- */
-static u64 secmon_vtl_return(long status)
-{
-	return kvm_hypercall1(KVM_HC_VBS_VTL_RETURN, (unsigned long)status);
-}
-
-/*
- * Apply EPT permissions on a normal-plane GPA range from the secure plane.
- *
- * The secure plane cannot issue the host KVM_SET_MEMORY_ATTRIBUTES ioctl,
- * so it asks KVM to do it via the KVM_HC_VBS_SET_MEM_ATTRS hypercall, which
- * KVM honours only for a higher-privilege plane.  @perms carries the access
- * bits the normal plane should retain (VBS_MEM_*); KVM translates a cleared
- * write/exec bit into NO_WRITE / NO_EXEC memory attributes.
- */
-static int secmon_apply_attrs(u64 gpa, u64 size, u32 perms)
-{
-	long ret;
-
-	pr_debug("apply_attrs gpa=0x%llx size=0x%llx perms=%c%c%c\n",
-		 gpa, size,
-		 (perms & VBS_MEM_READ)  ? 'r' : '-',
-		 (perms & VBS_MEM_WRITE) ? 'w' : '-',
-		 (perms & VBS_MEM_EXEC)  ? 'x' : '-');
-
-	ret = kvm_hypercall3(KVM_HC_VBS_SET_MEM_ATTRS, gpa, size, perms);
-	if (ret)
-		return (int)ret;
-
-	return 0;
-}
-
-/* ── per-call handlers ────────────────────────────────────────────────── */
-
-static int secmon_do_protect_memory(const void *arg, u32 arg_size)
-{
-	const struct vbs_protect_memory_req *r = arg;
-
-	if (arg_size < sizeof(*r))
-		return -EINVAL;
-
-	return secmon_apply_attrs(r->gpa, r->size, r->perms);
-}
-
-static int secmon_do_seal_kernel(const void *arg, u32 arg_size)
-{
-	const struct vbs_seal_kernel_req *r = arg;
-	int ret;
-
-	if (arg_size < sizeof(*r))
-		return -EINVAL;
-
-	/* Kernel text: read + execute, no write. */
-	ret = secmon_apply_attrs(r->text_gpa, r->text_size,
-				 VBS_MEM_READ | VBS_MEM_EXEC);
-	if (ret)
-		return ret;
-
-	/* Kernel rodata: read only, no write, no execute. */
-	return secmon_apply_attrs(r->rodata_gpa, r->rodata_size,
-				  VBS_MEM_READ);
-}
-
-static int secmon_do_set_module_perms(const void *arg, u32 arg_size)
-{
-	const struct vbs_set_module_perms_req *hdr = arg;
-	const struct vbs_module_section *sec;
-	u32 i, n;
-
-	if (arg_size < sizeof(*hdr))
-		return -EINVAL;
-
-	n = hdr->nr_sections;
-	if (arg_size < sizeof(*hdr) + n * sizeof(*sec))
-		return -EINVAL;
-
-	sec = (const struct vbs_module_section *)(hdr + 1);
-	for (i = 0; i < n; i++) {
-		int ret = secmon_apply_attrs(sec[i].gpa, sec[i].size,
-					     sec[i].perms);
-		if (ret)
-			return ret;
-	}
-
-	return 0;
-}
-
-static long secmon_dispatch(u32 call_id, const void *arg, u32 arg_size,
-			    u32 *resp_size)
-{
-	*resp_size = 0;
-
-	switch (call_id) {
-	case VBS_CALL_INIT:
-	case VBS_CALL_SHUTDOWN:
-		return 0;
-
-	case VBS_CALL_PROTECT_MEMORY:
-		return secmon_do_protect_memory(arg, arg_size);
-	case VBS_CALL_SEAL_KERNEL:
-		return secmon_do_seal_kernel(arg, arg_size);
-
-	case VBS_CALL_SET_MODULE_PERMS:
-		return secmon_do_set_module_perms(arg, arg_size);
-
-	/*
-	 * Module/kexec validation and key management are acknowledged for
-	 * now (mirroring the previous userspace dispatcher); real signature
-	 * verification runs here in a later stage.
-	 */
-	case VBS_CALL_VALIDATE_MODULE:
-	case VBS_CALL_UNLOAD_MODULE:
-	case VBS_CALL_ADD_KEY:
-	case VBS_CALL_REVOKE_KEY:
-	case VBS_CALL_SEND_CERTS:
-	case VBS_CALL_KEXEC_VALIDATE:
-	case VBS_CALL_KEXEC_INVALIDATE:
-		return 0;
-
-	default:
-		pr_warn_ratelimited("unknown call_id 0x%x\n", call_id);
-		return -ENOSYS;
-	}
-}
-
-/* ── monitor loop ─────────────────────────────────────────────────────── */
-
-static int secmon_monitor_fn(void *unused)
-{
-	long status = 0;
-
-	pr_info("secure monitor started\n");
-
-	for (;;) {
-		struct vbs_kvm_ca *ca;
-		u64 ca_gpa;
-		u32 call_id, arg_size, resp_size = 0;
-
-		/* Park; resume with the next request's calling-area GPA. */
-		ca_gpa = secmon_vtl_return(status);
-		if (!ca_gpa) {
-			status = -EINVAL;
-			continue;
-		}
-
-		ca = memremap(ca_gpa, PAGE_SIZE, MEMREMAP_WB);
-		if (!ca) {
-			pr_err_ratelimited("failed to map calling area 0x%llx\n",
-					   ca_gpa);
-			status = -EFAULT;
-			continue;
-		}
-
-		call_id  = ca->call_id;
-		arg_size = ca->arg_size;
-		if (arg_size > PAGE_SIZE - sizeof(*ca))
-			arg_size = PAGE_SIZE - sizeof(*ca);
-
-		status = secmon_dispatch(call_id, ca->buffer, arg_size,
-					 &resp_size);
-
-		ca->status    = (s32)status;
-		ca->resp_size = resp_size;
-
-		memunmap(ca);
-	}
-
-	return 0;
-}
-
-static int __init secmon_init(void)
-{
-	struct task_struct *t;
-
-	if (!secmon_active)
-		return 0;
-
-	t = kthread_run(secmon_monitor_fn, NULL, "vbs-secmon");
-	if (IS_ERR(t)) {
-		pr_err("failed to start secure monitor: %ld\n", PTR_ERR(t));
-		return PTR_ERR(t);
-	}
-
-	return 0;
-}
-late_initcall(secmon_init);
-- 
2.55.0


  parent reply	other threads:[~2026-08-05 11:04 UTC|newest]

Thread overview: 43+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-08-05 11:02 [RFC PATCH v1 00/42] VBS/VSM-on-KVM: VBS integration for KVM VM planes Sriram Nambakam
2026-08-05 11:02 ` [RFC PATCH v1 01/42] Fix merge issue - Remove duplicate definition for kvm_arch_has_irq_bypass Sriram Nambakam
2026-08-05 11:02 ` [RFC PATCH v1 02/42] Fix compilation Sriram Nambakam
2026-08-05 11:02 ` [RFC PATCH v1 03/42] Fix compile error Sriram Nambakam
2026-08-05 11:02 ` [RFC PATCH v1 04/42] Fix compile errors Sriram Nambakam
2026-08-05 11:02 ` [RFC PATCH v1 05/42] Initial support for VM Planes - Add kernel config for CONFIG_VM_PLANES - Parse vm plane config from initrd for plane configuration - Make hypercalls to allocate memory for the vm planes Sriram Nambakam
2026-08-05 11:02 ` [RFC PATCH v1 06/42] Use vcpu count from the plane configuration Sriram Nambakam
2026-08-05 11:02 ` [RFC PATCH v1 07/42] skip processing plane configuration for plane 0 - plane 0 is the boot plane Sriram Nambakam
2026-08-05 11:02 ` [RFC PATCH v1 08/42] Add plane config param to specify kernel image format Sriram Nambakam
2026-08-05 11:02 ` [RFC PATCH v1 09/42] Activate the VM Planes through the Hypervisor - Using KVM as the VMM Sriram Nambakam
2026-08-05 11:02 ` [RFC PATCH v1 10/42] allow the command line to be specified for kernels in other planes Sriram Nambakam
2026-08-05 11:02 ` [RFC PATCH v1 11/42] Various changes to support VM Planes Sriram Nambakam
2026-08-05 11:02 ` [RFC PATCH v1 12/42] Add a Virtualization Based Security (VBS) framework. - Add backends for AMD SEV-SNP, Intel TDX, Arm CCA and KVM Planes. - Support VTL on Hyper-V in addition to Planes on KVM Sriram Nambakam
2026-08-05 11:02 ` [RFC PATCH v1 13/42] Add a inter-plane communication mechanism through KVM. - model this to use a single page similar to SEV-SNP Sriram Nambakam
2026-08-05 11:02 ` [RFC PATCH v1 14/42] KVM: Add per-plane memory attribute support for cross-plane EPT protection Sriram Nambakam
2026-08-05 11:02 ` [RFC PATCH v1 15/42] KVM: x86: Add KVM_HC_VBS_VTL_CALL hypercall for VBS inter-plane calls Sriram Nambakam
2026-08-05 11:02 ` [RFC PATCH v1 16/42] vbs: Add HEKI kernel sealing and fix KVM plane memory attribute guards Sriram Nambakam
2026-08-05 11:02 ` [RFC PATCH v1 17/42] vbs: Add module authentication via VBS/HEKI Sriram Nambakam
2026-08-05 11:03 ` [RFC PATCH v1 18/42] vbs: Add kexec validation and make module auth non-fatal Sriram Nambakam
2026-08-05 11:03 ` [RFC PATCH v1 19/42] Merge branch 'master' into vm-planes Sriram Nambakam
2026-08-05 11:03 ` [RFC PATCH v1 20/42] kvm: x86: fix merged plane API/stat build regressions Sriram Nambakam
2026-08-05 11:03 ` [RFC PATCH v1 21/42] KVM: x86: exit VM planes and VBS hypercalls to userspace Sriram Nambakam
2026-08-05 11:03 ` [RFC PATCH v1 22/42] kexec: block legacy kexec_load when VBS is active Sriram Nambakam
2026-08-05 11:03 ` [RFC PATCH v1 23/42] kvm: x86: fix merged plane API/stat build regressions Sriram Nambakam
2026-08-05 11:03 ` [RFC PATCH v1 24/42] KVM: planes: expose memory-attribute setting to in-kernel callers Sriram Nambakam
2026-08-05 11:03 ` [RFC PATCH v1 25/42] vm_planes: drop unused per-plane vcpu_count Sriram Nambakam
2026-08-05 11:03 ` [RFC PATCH v1 26/42] drivers/virt: add VBS secure-plane park loop Sriram Nambakam
2026-08-05 11:03 ` [RFC PATCH v1 27/42] KVM: planes: add arch-neutral in-kernel plane switch helper Sriram Nambakam
2026-08-05 11:03 ` [RFC PATCH v1 28/42] KVM: x86: add VBS VTL call/return and cross-plane set-mem-attrs hypercalls Sriram Nambakam
2026-08-05 11:03 ` [RFC PATCH v1 29/42] init/vm_planes: set up planes from rootfs_initcall and load ELF payloads Sriram Nambakam
2026-08-05 11:03 ` [RFC PATCH v1 30/42] security/vbs: run backend probe and HEKI seal at rootfs_initcall Sriram Nambakam
2026-08-05 11:03 ` [RFC PATCH v1 31/42] security/vbs: pin the VTL call hypercall to CPU0 Sriram Nambakam
2026-08-05 11:03 ` [RFC PATCH v1 32/42] security/vbs: add secure-plane monitor backend Sriram Nambakam
2026-08-05 11:03 ` Sriram Nambakam [this message]
2026-08-05 11:03 ` [RFC PATCH v1 34/42] x86/realmode: skip the sub-1M trampoline for the VBS secure plane Sriram Nambakam
2026-08-05 11:03 ` [RFC PATCH v1 35/42] KVM: x86: deny normal-plane access to secure-plane memory Sriram Nambakam
2026-08-05 11:03 ` [RFC PATCH v1 36/42] KVM: plane: handle KVM_CHECK_EXTENSION on the plane fd Sriram Nambakam
2026-08-05 11:03 ` [RFC PATCH v1 37/42] KVM: selftests: run plane tests with a split IRQ chip Sriram Nambakam
2026-08-05 11:03 ` [RFC PATCH v1 38/42] kvm: x86: drop obsolete kvm_cache_regs.h Sriram Nambakam
2026-08-05 11:03 ` [RFC PATCH v1 39/42] kvm: arch: finalize plane hooks and kvm_arch_vcpu_create signature Sriram Nambakam
2026-08-05 11:03 ` [RFC PATCH v1 40/42] kvm: x86: use kvm_vcpu scheduling-state accessors and struct stat fields Sriram Nambakam
2026-08-05 11:03 ` [RFC PATCH v1 41/42] kvm: x86: finalize per-plane APIC state and CPUID placement Sriram Nambakam
2026-08-05 11:03 ` [RFC PATCH v1 42/42] kvm: planes: reconcile core plane state, UAPI and hypercall exit Sriram Nambakam

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=20260805110324.25067-34-snambakam@linux.microsoft.com \
    --to=snambakam@linux.microsoft.com \
    --cc=kvm@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    /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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).