From f1f45c8c32905fbecaddf0d08691dd7bf132a38f Mon Sep 17 00:00:00 2001 From: Jan Beulich Date: Mon, 20 Jul 2026 16:44:12 +0100 Subject: [PATCH] platform-op/XSM: move resource-{,un}plug-core checks MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Integrate the checking with flask_platform_op(); there never really was a need to defer these checks, as the sub-op has always been known to the function. As a positive side effect, permissions are then checked at the same early point with and without Flask. This is CVE-2026-62427 / part of XSA-499. Signed-off-by: Jan Beulich Reviewed-by: Roger Pau Monné Reviewed-by: Andrew Cooper Acked-By: Daniel P. Smith (cherry picked from commit 4ef45cbe31427bb3cedb11be45c90b1706205ee9) --- xen/arch/x86/platform_hypercall.c | 18 +----------------- xen/xsm/flask/hooks.c | 7 ++++--- 2 files changed, 5 insertions(+), 20 deletions(-) diff --git a/xen/arch/x86/platform_hypercall.c b/xen/arch/x86/platform_hypercall.c index f2fcd8afaf..8c4076b6a5 100644 --- a/xen/arch/x86/platform_hypercall.c +++ b/xen/arch/x86/platform_hypercall.c @@ -673,10 +673,6 @@ ret_t do_platform_op( { int cpu = op->u.cpu_ol.cpuid; - ret = xsm_resource_plug_core(XSM_HOOK); - if ( ret ) - break; - if ( cpu >= nr_cpu_ids || !cpu_present(cpu) || clocksource_is_tsc() ) { @@ -699,10 +695,6 @@ ret_t do_platform_op( { int cpu = op->u.cpu_ol.cpuid; - ret = xsm_resource_unplug_core(XSM_HOOK); - if ( ret ) - break; - if ( cpu == 0 ) { ret = -EOPNOTSUPP; @@ -728,20 +720,12 @@ ret_t do_platform_op( break; case XENPF_cpu_hotadd: - ret = xsm_resource_plug_core(XSM_HOOK); - if ( ret ) - break; - ret = cpu_add(op->u.cpu_add.apic_id, op->u.cpu_add.acpi_id, op->u.cpu_add.pxm); - break; + break; case XENPF_mem_hotadd: - ret = xsm_resource_plug_core(XSM_HOOK); - if ( ret ) - break; - ret = memory_add(op->u.mem_add.spfn, op->u.mem_add.epfn, op->u.mem_add.pxm); diff --git a/xen/xsm/flask/hooks.c b/xen/xsm/flask/hooks.c index d8e2b12b14..6aebad3193 100644 --- a/xen/xsm/flask/hooks.c +++ b/xen/xsm/flask/hooks.c @@ -1554,12 +1554,13 @@ static int cf_check flask_platform_op(uint32_t op) switch ( op ) { #ifdef CONFIG_X86 - /* These operations have their own XSM hooks */ case XENPF_cpu_online: - case XENPF_cpu_offline: case XENPF_cpu_hotadd: case XENPF_mem_hotadd: - return 0; + return flask_resource_plug_core(); + + case XENPF_cpu_offline: + return flask_resource_unplug_core(); #endif case XENPF_settime32: