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

[PATCH v1 03/19] xen/sysctl: wrap around XEN_SYSCTL_readconsole


  • To: <xen-devel@xxxxxxxxxxxxxxxxxxxx>
  • From: Penny Zheng <Penny.Zheng@xxxxxxx>
  • Date: Wed, 12 Mar 2025 12:06:16 +0800
  • Arc-authentication-results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 165.204.84.17) smtp.rcpttodomain=lists.xenproject.org smtp.mailfrom=amd.com; dmarc=pass (p=quarantine sp=quarantine pct=100) action=none header.from=amd.com; dkim=none (message not signed); arc=none (0)
  • 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=hfJvd41dMivz5QRFtPQPjoU8VhwHzIPONjPe2MQlcts=; b=PymuyoOysdLP2dldS3Tt9E9ZMEhZ8dhxDkHxYcOmMZgBtBRHebEh5nl/FyDJjBhRf4u2MvH8Fe8J5rvesJg0aZi8g302XTd/fNAHcX5yRSBrZ1e0pn+ihRlx//fh4B83bfiE/UPyyDG2tn6INhEZyeKj5pZ9oagDKmfV7N/3RiCCAHfGhBykBnnWG5IMWeUzVdXt3HRicJ/GeLaKwb4wdwJYsHMdOFRyBrUSV8+BffE+/R2GsKA07nQuyGEq6hsI57aidyU5Q4PzHfSgAl4dgc+pI6N+SEZZ0a4KDKWS/leS4fV846p5M+D9TjS1b5+vg2gQd0CyPAU4ZHD7XqDjqQ==
  • Arc-seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=MWQmTq78xCvWDdrXeBmv6ibx0YsGReARteo1t6cC4v8UvAn6L8KFTac3ISE2tKa+lBRFcOtR14oAlvqzoCV43dsNDyBgMauJA5VCPpxR4CGEf/dFy6uRxUFkx3jJHhmCbFm6LmMAOvuRNiBcbYctWSG0Y9DT3fa9gxgWBDqimhuqYKR+dOwZEuAJEUqxN/eooZP6uL1+ZJXVfyo1q8OZ1i3j/KPmt9CYJIvxmwSt2pnGuykV4ypJq1hiJJlu96rdCEL9k2X+AF1ycA/KJyQ+S48VSxO0mWitNGLnNoW3gUiLAPFHbKaQUG2J6/YRUWZFSyP56dSqTPX6YzZ76391Ow==
  • Cc: <ray.huang@xxxxxxx>, Penny Zheng <Penny.Zheng@xxxxxxx>, Andrew Cooper <andrew.cooper3@xxxxxxxxxx>, Anthony PERARD <anthony.perard@xxxxxxxxxx>, Michal Orzel <michal.orzel@xxxxxxx>, Jan Beulich <jbeulich@xxxxxxxx>, "Julien Grall" <julien@xxxxxxx>, Roger Pau Monné <roger.pau@xxxxxxxxxx>, Stefano Stabellini <sstabellini@xxxxxxxxxx>, "Daniel P. Smith" <dpsmith@xxxxxxxxxxxxxxxxxxxx>
  • Delivery-date: Wed, 12 Mar 2025 04:07:12 +0000
  • List-id: Xen developer discussion <xen-devel.lists.xenproject.org>

The following functions is to deal with XEN_SYSCTL_readconsole sub-op, and
shall be wrapped:
- xsm_readconsole
- read_console_ring

Signed-off-by: Penny Zheng <Penny.Zheng@xxxxxxx>
---
 xen/drivers/char/console.c |  2 ++
 xen/include/xen/console.h  |  8 ++++++++
 xen/include/xsm/dummy.h    | 11 ++++++++---
 xen/include/xsm/xsm.h      | 11 ++++++++---
 xen/xsm/dummy.c            |  2 +-
 xen/xsm/flask/hooks.c      |  4 ++--
 6 files changed, 29 insertions(+), 9 deletions(-)

diff --git a/xen/drivers/char/console.c b/xen/drivers/char/console.c
index 2f028c5d44..6e4f3c4659 100644
--- a/xen/drivers/char/console.c
+++ b/xen/drivers/char/console.c
@@ -336,6 +336,7 @@ static void conring_puts(const char *str, size_t len)
         conringc = conringp - conring_size;
 }
 
+#ifdef CONFIG_SYSCTL
 long read_console_ring(struct xen_sysctl_readconsole *op)
 {
     XEN_GUEST_HANDLE_PARAM(char) str;
@@ -378,6 +379,7 @@ long read_console_ring(struct xen_sysctl_readconsole *op)
 
     return 0;
 }
+#endif /* CONFIG_SYSCTL */
 
 
 /*
diff --git a/xen/include/xen/console.h b/xen/include/xen/console.h
index 83cbc9fbda..e7d5063d82 100644
--- a/xen/include/xen/console.h
+++ b/xen/include/xen/console.h
@@ -7,12 +7,20 @@
 #ifndef __CONSOLE_H__
 #define __CONSOLE_H__
 
+#include <xen/errno.h>
 #include <xen/inttypes.h>
 #include <xen/ctype.h>
 #include <public/xen.h>
 
 struct xen_sysctl_readconsole;
+#ifdef CONFIG_SYSCTL
 long read_console_ring(struct xen_sysctl_readconsole *op);
+#else
+static inline long read_console_ring(struct xen_sysctl_readconsole *op)
+{
+    return -EOPNOTSUPP;
+}
+#endif
 
 void console_init_preirq(void);
 void console_init_ring(void);
diff --git a/xen/include/xsm/dummy.h b/xen/include/xsm/dummy.h
index afc54a0b2f..35d084aca7 100644
--- a/xen/include/xsm/dummy.h
+++ b/xen/include/xsm/dummy.h
@@ -186,18 +186,23 @@ static XSM_INLINE int cf_check xsm_sysctl(XSM_DEFAULT_ARG 
int cmd)
     XSM_ASSERT_ACTION(XSM_PRIV);
     return xsm_default_action(action, current->domain, NULL);
 }
+
+static XSM_INLINE int cf_check xsm_readconsole(XSM_DEFAULT_ARG uint32_t clear)
+{
+    XSM_ASSERT_ACTION(XSM_HOOK);
+    return xsm_default_action(action, current->domain, NULL);
+}
 #else
 static XSM_INLINE int cf_check xsm_sysctl(XSM_DEFAULT_ARG int cmd)
 {
     return -EOPNOTSUPP;
 }
-#endif
 
 static XSM_INLINE int cf_check xsm_readconsole(XSM_DEFAULT_ARG uint32_t clear)
 {
-    XSM_ASSERT_ACTION(XSM_HOOK);
-    return xsm_default_action(action, current->domain, NULL);
+    return -EOPNOTSUPP;
 }
+#endif /* CONFIG_SYSCTL */
 
 static XSM_INLINE int cf_check xsm_alloc_security_domain(struct domain *d)
 {
diff --git a/xen/include/xsm/xsm.h b/xen/include/xsm/xsm.h
index 276507b515..d322740de1 100644
--- a/xen/include/xsm/xsm.h
+++ b/xen/include/xsm/xsm.h
@@ -62,8 +62,8 @@ struct xsm_ops {
     int (*domctl)(struct domain *d, unsigned int cmd, uint32_t ssidref);
 #ifdef CONFIG_SYSCTL
     int (*sysctl)(int cmd);
-#endif
     int (*readconsole)(uint32_t clear);
+#endif
 
     int (*evtchn_unbound)(struct domain *d, struct evtchn *chn, domid_t id2);
     int (*evtchn_interdomain)(struct domain *d1, struct evtchn *chn1,
@@ -266,17 +266,22 @@ static inline int xsm_sysctl(xsm_default_t def, int cmd)
 {
     return alternative_call(xsm_ops.sysctl, cmd);
 }
+
+static inline int xsm_readconsole(xsm_default_t def, uint32_t clear)
+{
+    return alternative_call(xsm_ops.readconsole, clear);
+}
 #else
 static inline int xsm_sysctl(xsm_default_t def, int cmd)
 {
     return -EOPNOTSUPP;
 }
-#endif
 
 static inline int xsm_readconsole(xsm_default_t def, uint32_t clear)
 {
-    return alternative_call(xsm_ops.readconsole, clear);
+    return -EOPNOTSUPP;
 }
+#endif
 
 static inline int xsm_evtchn_unbound(
     xsm_default_t def, struct domain *d1, struct evtchn *chn, domid_t id2)
diff --git a/xen/xsm/dummy.c b/xen/xsm/dummy.c
index 0a5fc06bbf..4c97db0c48 100644
--- a/xen/xsm/dummy.c
+++ b/xen/xsm/dummy.c
@@ -24,8 +24,8 @@ static const struct xsm_ops __initconst_cf_clobber dummy_ops 
= {
     .domctl                        = xsm_domctl,
 #ifdef CONFIG_SYSCTL
     .sysctl                        = xsm_sysctl,
-#endif
     .readconsole                   = xsm_readconsole,
+#endif
 
     .evtchn_unbound                = xsm_evtchn_unbound,
     .evtchn_interdomain            = xsm_evtchn_interdomain,
diff --git a/xen/xsm/flask/hooks.c b/xen/xsm/flask/hooks.c
index 7c5e7f5879..7c46657d97 100644
--- a/xen/xsm/flask/hooks.c
+++ b/xen/xsm/flask/hooks.c
@@ -934,7 +934,6 @@ static int cf_check flask_sysctl(int cmd)
         return avc_unknown_permission("sysctl", cmd);
     }
 }
-#endif
 
 static int cf_check flask_readconsole(uint32_t clear)
 {
@@ -945,6 +944,7 @@ static int cf_check flask_readconsole(uint32_t clear)
 
     return domain_has_xen(current->domain, perms);
 }
+#endif /* CONFIG_SYSCTL */
 
 static inline uint32_t resource_to_perm(uint8_t access)
 {
@@ -1888,8 +1888,8 @@ static const struct xsm_ops __initconst_cf_clobber 
flask_ops = {
     .domctl = flask_domctl,
 #ifdef CONFIG_SYSCTL
     .sysctl = flask_sysctl,
-#endif
     .readconsole = flask_readconsole,
+#endif
 
     .evtchn_unbound = flask_evtchn_unbound,
     .evtchn_interdomain = flask_evtchn_interdomain,
-- 
2.34.1




 


Rackspace

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