Function xsm_set_target() is only invoked under XEN_DOMCTL_set_target
domctl-op, and shall be wrapped with CONFIG_MGMT_HYPERCALLS. Otherwise
it will become unreachable codes when MGMT_HYPERCALLS=n, and hence violating
Misra 2.1.
Signed-off-by: Penny Zheng <Penny.Zheng@amd.com>
---
v1 -> v2:
- adapt to changes of "unify DOMCTL to MGMT_HYPERCALLS"
---
v2 -> v3
- wrap the whole inline function xsm_set_target()
- add missing wrapping in xsm/dummy.h
- address "violating Misra rule 2.1" in commit message
---
xen/include/xsm/dummy.h | 2 ++
xen/include/xsm/xsm.h | 4 +++-
xen/xsm/dummy.c | 2 +-
xen/xsm/flask/hooks.c | 4 ++--
4 files changed, 8 insertions(+), 4 deletions(-)
diff --git a/xen/include/xsm/dummy.h b/xen/include/xsm/dummy.h
index a5deb8a975..a598d74f1f 100644
--- a/xen/include/xsm/dummy.h
+++ b/xen/include/xsm/dummy.h
@@ -158,12 +158,14 @@ static XSM_INLINE int cf_check xsm_sysctl_scheduler_op(XSM_DEFAULT_ARG int cmd)
}
#endif /* CONFIG_MGMT_HYPERCALLS */
+#ifdef CONFIG_MGMT_HYPERCALLS
static XSM_INLINE int cf_check xsm_set_target(
XSM_DEFAULT_ARG struct domain *d, struct domain *e)
{
XSM_ASSERT_ACTION(XSM_HOOK);
return xsm_default_action(action, current->domain, NULL);
}
+#endif /* CONFIG_MGMT_HYPERCALLS */
static XSM_INLINE int cf_check xsm_domctl(
XSM_DEFAULT_ARG struct domain *d, unsigned int cmd, uint32_t ssidref)
diff --git a/xen/include/xsm/xsm.h b/xen/include/xsm/xsm.h
index ee43002fdb..154a4b8a92 100644
--- a/xen/include/xsm/xsm.h
+++ b/xen/include/xsm/xsm.h
@@ -59,8 +59,8 @@ struct xsm_ops {
#ifdef CONFIG_MGMT_HYPERCALLS
int (*domctl_scheduler_op)(struct domain *d, int op);
int (*sysctl_scheduler_op)(int op);
-#endif
int (*set_target)(struct domain *d, struct domain *e);
+#endif
int (*domctl)(struct domain *d, unsigned int cmd, uint32_t ssidref);
#ifdef CONFIG_MGMT_HYPERCALLS
int (*sysctl)(int cmd);
@@ -255,11 +255,13 @@ static inline int xsm_sysctl_scheduler_op(xsm_default_t def, int cmd)
}
#endif
+#ifdef CONFIG_MGMT_HYPERCALLS
static inline int xsm_set_target(
xsm_default_t def, struct domain *d, struct domain *e)
{
return alternative_call(xsm_ops.set_target, d, e);
}
+#endif /* CONFIG_MGMT_HYPERCALLS */
static inline int xsm_domctl(xsm_default_t def, struct domain *d,
unsigned int cmd, uint32_t ssidref)
diff --git a/xen/xsm/dummy.c b/xen/xsm/dummy.c
index 7cf00ce37e..9774bb3bdb 100644
--- a/xen/xsm/dummy.c
+++ b/xen/xsm/dummy.c
@@ -21,8 +21,8 @@ static const struct xsm_ops __initconst_cf_clobber dummy_ops = {
#ifdef CONFIG_MGMT_HYPERCALLS
.domctl_scheduler_op = xsm_domctl_scheduler_op,
.sysctl_scheduler_op = xsm_sysctl_scheduler_op,
-#endif
.set_target = xsm_set_target,
+#endif
.domctl = xsm_domctl,
#ifdef CONFIG_MGMT_HYPERCALLS
.sysctl = xsm_sysctl,
diff --git a/xen/xsm/flask/hooks.c b/xen/xsm/flask/hooks.c
index ca07585450..9b63c516e6 100644
--- a/xen/xsm/flask/hooks.c
+++ b/xen/xsm/flask/hooks.c
@@ -641,7 +641,6 @@ static int cf_check flask_sysctl_scheduler_op(int op)
return avc_unknown_permission("sysctl_scheduler_op", op);
}
}
-#endif /* CONFIG_MGMT_HYPERCALLS */
static int cf_check flask_set_target(struct domain *d, struct domain *t)
{
@@ -666,6 +665,7 @@ static int cf_check flask_set_target(struct domain *d, struct domain *t)
&dsec->target_sid);
return rc;
}
+#endif /* CONFIG_MGMT_HYPERCALLS */
static int cf_check flask_domctl(struct domain *d, unsigned int cmd,
uint32_t ssidref)
@@ -1888,8 +1888,8 @@ static const struct xsm_ops __initconst_cf_clobber flask_ops = {
#ifdef CONFIG_MGMT_HYPERCALLS
.domctl_scheduler_op = flask_domctl_scheduler_op,
.sysctl_scheduler_op = flask_sysctl_scheduler_op,
-#endif
.set_target = flask_set_target,
+#endif
.domctl = flask_domctl,
#ifdef CONFIG_MGMT_HYPERCALLS
.sysctl = flask_sysctl,
--
2.34.1