@@ -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 */
/*
@@ -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);
@@ -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)
{
@@ -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)
@@ -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,
@@ -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,
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@amd.com> --- 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(-)