[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[PATCH v2] xen/sched: validate RTDS putinfo period and budget


  • To: "xen-devel@xxxxxxxxxxxxxxxxxxxx" <xen-devel@xxxxxxxxxxxxxxxxxxxx>
  • From: Oleksii Moisieiev <Oleksii_Moisieiev@xxxxxxxx>
  • Date: Wed, 25 Mar 2026 15:24:33 +0000
  • Accept-language: en-US
  • Arc-authentication-results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=epam.com; dmarc=pass action=none header.from=epam.com; dkim=pass header.d=epam.com; arc=none
  • Arc-message-signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=Gl5DzkLvkUsbuZvmclALmkdH0Fa/jxNkKUyFXrbC4EU=; b=pw8Bj2ruSfFd+mu718ta6Q4G3tT90E360ulqP1kePEiHvYmmRZjUyEkDdb3fHf0ZzBA2KMEW33uGSVyTb0A/9HmquJgkjDJ5bRTmVNXEXpiHAKF3n5VCs2PgmXgNKrQ/muVsWa31j+sU4QZCU6Gr2T4UvJPF4vY4PxwWfp8I5DPwNyGkyKM7DuT4BOKt4+heJ7EYi+XTUZhEWf3CeOOnoiNKprVJobVgnFUe69+tAuhSRDxAfvgWy0lVTAG9swOmmthzKY9PZEEJSZWQMq3wwvsTXVsnlDLQQ4yFRhO5kLG5mAX0shZNMGoIq3sUjEQWnU3jwDgk2ZRWHoBU5S37mA==
  • Arc-seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=efz0eJqv2/gpDxgljYecXGTKyotVSX6asoogrk3GsazDpnnVc0ItMiygJkXq/LpZrOkfk9bO03L0br+zunFfWkLRWXsErSq4Y8GIsv3z0E5JKcAHCQ8NfGjrme4C0Qgdf7/43uBPcS362W/sjAMqKQBJfPmre53WXVYZagQKS/odz1GFGb76CG+qzgPN4ZCsiOV6zaB5rAMRZWIuccIH9ej/ao1PhbT02cGCzijHMxK4LZbMLN/XZmSjRXrz/ZoFTfVULeQAJqEkgZnrmL3jr5LE7a26c3f60wBveqiKxoBJWY5hUSWvHbyEkNcyQE+ynw8d3swz/IwFto26sTMXwA==
  • Authentication-results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=epam.com header.i="@epam.com" header.h="From:Date:Subject:Message-ID:Content-Type:MIME-Version:x-ms-exchange-senderadcheck"
  • Authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=epam.com;
  • Cc: Dario Faggioli <dfaggioli@xxxxxxxx>, George Dunlap <gwd@xxxxxxxxxxxxxx>, Juergen Gross <jgross@xxxxxxxx>, Meng Xu <mengxu@xxxxxxxxxxxxx>, Oleksii Moisieiev <Oleksii_Moisieiev@xxxxxxxx>
  • Delivery-date: Wed, 25 Mar 2026 15:24:51 +0000
  • List-id: Xen developer discussion <xen-devel.lists.xenproject.org>
  • Thread-index: AQHcvGt7K20iwhRjJ0mqKQswQ8Pmwg==
  • Thread-topic: [PATCH v2] xen/sched: validate RTDS putinfo period and budget

The RTDS domain-wide XEN_DOMCTL_SCHEDOP_putinfo path only checks for
zero values before applying period and budget to all vCPUs in the
domain.

This is weaker than the per-vCPU XEN_DOMCTL_SCHEDOP_putvcpuinfo path,
which already rejects values below the minimum, above the maximum, and
cases where budget exceeds period.

Use the same validation rules for putinfo as for putvcpuinfo, so
invalid domain-wide updates are rejected with -EINVAL instead of being
applied inconsistently.

Signed-off-by: Oleksii Moisieiev <oleksii_moisieiev@xxxxxxxx>
---

Changes in v2:
- introduce rt_validate_params helper function to check period and budget

 xen/common/sched/rt.c | 37 ++++++++++++++++++++++++-------------
 1 file changed, 24 insertions(+), 13 deletions(-)

diff --git a/xen/common/sched/rt.c b/xen/common/sched/rt.c
index 7b1f64a779..645b091de7 100644
--- a/xen/common/sched/rt.c
+++ b/xen/common/sched/rt.c
@@ -1362,6 +1362,20 @@ out:
     unit_schedule_unlock_irq(lock, unit);
 }
 
+static int
+rt_validate_params(uint32_t period_us, uint32_t budget_us,
+                   s_time_t *period, s_time_t *budget)
+{
+    *period = MICROSECS(period_us);
+    *budget = MICROSECS(budget_us);
+
+    if ( *period > RTDS_MAX_PERIOD || *budget < RTDS_MIN_BUDGET ||
+         *budget > *period || *period < RTDS_MIN_PERIOD )
+        return -EINVAL;
+
+    return 0;
+}
+
 /*
  * set/get each unit info of each domain
  */
@@ -1388,17 +1402,17 @@ rt_dom_cntl(
         op->u.rtds.budget = RTDS_DEFAULT_BUDGET / MICROSECS(1);
         break;
     case XEN_DOMCTL_SCHEDOP_putinfo:
-        if ( op->u.rtds.period == 0 || op->u.rtds.budget == 0 )
-        {
-            rc = -EINVAL;
+        rc = rt_validate_params(op->u.rtds.period, op->u.rtds.budget,
+                                &period, &budget);
+        if ( rc )
             break;
-        }
+
         spin_lock_irqsave(&prv->lock, flags);
         for_each_sched_unit ( d, unit )
         {
             svc = rt_unit(unit);
-            svc->period = MICROSECS(op->u.rtds.period); /* transfer to nanosec 
*/
-            svc->budget = MICROSECS(op->u.rtds.budget);
+            svc->period = period;
+            svc->budget = budget;
         }
         spin_unlock_irqrestore(&prv->lock, flags);
         break;
@@ -1440,14 +1454,11 @@ rt_dom_cntl(
             }
             else
             {
-                period = MICROSECS(local_sched.u.rtds.period);
-                budget = MICROSECS(local_sched.u.rtds.budget);
-                if ( period > RTDS_MAX_PERIOD || budget < RTDS_MIN_BUDGET ||
-                     budget > period || period < RTDS_MIN_PERIOD )
-                {
-                    rc = -EINVAL;
+                rc = rt_validate_params(local_sched.u.rtds.period,
+                                        local_sched.u.rtds.budget,
+                                        &period, &budget);
+                if ( rc )
                     break;
-                }
 
                 spin_lock_irqsave(&prv->lock, flags);
                 svc = rt_unit(d->vcpu[local_sched.vcpuid]->sched_unit);
-- 
2.43.0

base-commit: a7bf8ff218ca05eb3674fdfd2817f6cff471e96a
branch: amoi_rtds_SCHEDOP_putinfov2


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.