mirror of
https://github.com/xen-project/xen.git
synced 2026-10-28 02:01:24 +01:00
XSM: make Argo hooks well-formed ones
For whatever reason they didn't have an xsm_default_t first argument (to cope with XSM=n mode), making it impossible to (easily) cover them in xsm/hooks.h. Signed-off-by: Jan Beulich <jbeulich@suse.com> Reviewed-by: Jason Andryuk <jason.andryuk@amd.com> Acked-by: Daniel P. Smith <dpsmith@apertussolutions.com>
This commit is contained in:
1 parent
8eb26a701b
commit
72aa7d65b6
6 files changed
+32
-64
No files matched your search
+11
-10
@@ -1341,7 +1341,7 @@ fill_ring_data(const struct domain *currd,
|
||||
* Don't supply information about rings that a guest is not
|
||||
* allowed to send to.
|
||||
*/
|
||||
ret = xsm_argo_send(currd, dst_d);
|
||||
ret = xsm_argo_send(XSM_HOOK, currd, dst_d);
|
||||
if ( ret )
|
||||
goto out;
|
||||
|
||||
@@ -1666,8 +1666,9 @@ register_ring(struct domain *currd,
|
||||
|
||||
if ( reg.partner_id == XEN_ARGO_DOMID_ANY )
|
||||
{
|
||||
ret = opt_argo_mac_permissive ? xsm_argo_register_any_source(currd) :
|
||||
-EPERM;
|
||||
ret = opt_argo_mac_permissive
|
||||
? xsm_argo_register_any_source(XSM_HOOK, currd)
|
||||
: -EPERM;
|
||||
if ( ret )
|
||||
return ret;
|
||||
}
|
||||
@@ -1680,7 +1681,7 @@ register_ring(struct domain *currd,
|
||||
return -ESRCH;
|
||||
}
|
||||
|
||||
ret = xsm_argo_register_single_source(currd, dst_d);
|
||||
ret = xsm_argo_register_single_source(XSM_HOOK, currd, dst_d);
|
||||
if ( ret )
|
||||
goto out;
|
||||
|
||||
@@ -2002,7 +2003,7 @@ sendv(struct domain *src_d, xen_argo_addr_t *src_addr,
|
||||
if ( !dst_d )
|
||||
return -ESRCH;
|
||||
|
||||
ret = xsm_argo_send(src_d, dst_d);
|
||||
ret = xsm_argo_send(XSM_HOOK, src_d, dst_d);
|
||||
if ( ret )
|
||||
{
|
||||
gprintk(XENLOG_ERR, "argo: XSM REJECTED %i -> %i\n",
|
||||
@@ -2100,7 +2101,7 @@ do_argo_op(unsigned int cmd, XEN_GUEST_HANDLE_PARAM(void) arg1,
|
||||
if ( unlikely(!opt_argo) )
|
||||
return -EOPNOTSUPP;
|
||||
|
||||
rc = xsm_argo_enable(currd);
|
||||
rc = xsm_argo_enable(XSM_HOOK, currd);
|
||||
if ( rc )
|
||||
return rc;
|
||||
|
||||
@@ -2242,7 +2243,7 @@ compat_argo_op(unsigned int cmd, XEN_GUEST_HANDLE_PARAM(void) arg1,
|
||||
if ( unlikely(!opt_argo) )
|
||||
return -EOPNOTSUPP;
|
||||
|
||||
rc = xsm_argo_enable(currd);
|
||||
rc = xsm_argo_enable(XSM_HOOK, currd);
|
||||
if ( rc )
|
||||
return rc;
|
||||
|
||||
@@ -2307,7 +2308,7 @@ argo_init(struct domain *d)
|
||||
{
|
||||
struct argo_domain *argo;
|
||||
|
||||
if ( !opt_argo || xsm_argo_enable(d) )
|
||||
if ( !opt_argo || xsm_argo_enable(XSM_HOOK, d) )
|
||||
{
|
||||
argo_dprintk("argo disabled, domid: %u\n", d->domain_id);
|
||||
return 0;
|
||||
@@ -2365,8 +2366,8 @@ argo_soft_reset(struct domain *d)
|
||||
wildcard_rings_pending_remove(d);
|
||||
|
||||
/*
|
||||
* Since neither opt_argo or xsm_argo_enable(d) can change at runtime,
|
||||
* if d->argo is true then both opt_argo and xsm_argo_enable(d) must be
|
||||
* Since neither opt_argo nor xsm_argo_enable() can change at runtime,
|
||||
* if d->argo is true then both opt_argo and xsm_argo_enable() must be
|
||||
* true, and we can assume that init is allowed to proceed again here.
|
||||
*/
|
||||
argo_domain_init(d->argo);
|
||||
|
||||
+13
-8
@@ -749,27 +749,32 @@ static XSM_INLINE int xsm_dm_op(XSM_DEFAULT_ARG struct domain *d)
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_ARGO
|
||||
static XSM_INLINE int xsm_argo_enable(const struct domain *d)
|
||||
|
||||
static XSM_INLINE int xsm_argo_enable(XSM_DEFAULT_ARG const struct domain *d)
|
||||
{
|
||||
return 0;
|
||||
XSM_ASSERT_ACTION(XSM_HOOK);
|
||||
return xsm_default_action(action, d, NULL);
|
||||
}
|
||||
|
||||
static XSM_INLINE int xsm_argo_register_single_source(
|
||||
const struct domain *d, const struct domain *t)
|
||||
XSM_DEFAULT_ARG const struct domain *d, const struct domain *t)
|
||||
{
|
||||
return 0;
|
||||
XSM_ASSERT_ACTION(XSM_HOOK);
|
||||
return xsm_default_action(action, d, t);
|
||||
}
|
||||
|
||||
static XSM_INLINE int xsm_argo_register_any_source(
|
||||
const struct domain *d)
|
||||
XSM_DEFAULT_ARG const struct domain *d)
|
||||
{
|
||||
return 0;
|
||||
XSM_ASSERT_ACTION(XSM_HOOK);
|
||||
return xsm_default_action(action, d, NULL);
|
||||
}
|
||||
|
||||
static XSM_INLINE int xsm_argo_send(
|
||||
const struct domain *d, const struct domain *t)
|
||||
XSM_DEFAULT_ARG const struct domain *d, const struct domain *t)
|
||||
{
|
||||
return 0;
|
||||
XSM_ASSERT_ACTION(XSM_HOOK);
|
||||
return xsm_default_action(action, d, t);
|
||||
}
|
||||
|
||||
#endif /* CONFIG_ARGO */
|
||||
|
||||
@@ -159,6 +159,14 @@ XSM_HOOK(int, do_xsm_op, XEN_GUEST_HANDLE_PARAM(void))
|
||||
XSM_HOOK(int, do_compat_op, XEN_GUEST_HANDLE_PARAM(void))
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_ARGO
|
||||
XSM_HOOK(int, argo_enable, const struct domain *)
|
||||
XSM_HOOK(int, argo_register_single_source, const struct domain *,
|
||||
const struct domain *)
|
||||
XSM_HOOK(int, argo_register_any_source, const struct domain *)
|
||||
XSM_HOOK(int, argo_send, const struct domain *, const struct domain *)
|
||||
#endif
|
||||
|
||||
#undef XSM_HOOK0
|
||||
#undef XSM_HOOK1
|
||||
#undef XSM_HOOK2
|
||||
|
||||
@@ -85,14 +85,6 @@ struct xsm_ops {
|
||||
char *(*show_security_evtchn)(struct domain *d, const struct evtchn *chn);
|
||||
|
||||
char *(*show_irq_sid)(int irq);
|
||||
|
||||
#ifdef CONFIG_ARGO
|
||||
int (*argo_enable)(const struct domain *d);
|
||||
int (*argo_register_single_source)(const struct domain *d,
|
||||
const struct domain *t);
|
||||
int (*argo_register_any_source)(const struct domain *d);
|
||||
int (*argo_send)(const struct domain *d, const struct domain *t);
|
||||
#endif
|
||||
};
|
||||
|
||||
#ifdef CONFIG_XSM
|
||||
@@ -196,30 +188,6 @@ static inline char *xsm_show_irq_sid(int irq)
|
||||
return alternative_call(xsm_ops.show_irq_sid, irq);
|
||||
}
|
||||
|
||||
#ifdef CONFIG_ARGO
|
||||
static inline int xsm_argo_enable(const struct domain *d)
|
||||
{
|
||||
return alternative_call(xsm_ops.argo_enable, d);
|
||||
}
|
||||
|
||||
static inline int xsm_argo_register_single_source(
|
||||
const struct domain *d, const struct domain *t)
|
||||
{
|
||||
return alternative_call(xsm_ops.argo_register_single_source, d, t);
|
||||
}
|
||||
|
||||
static inline int xsm_argo_register_any_source(const struct domain *d)
|
||||
{
|
||||
return alternative_call(xsm_ops.argo_register_any_source, d);
|
||||
}
|
||||
|
||||
static inline int xsm_argo_send(const struct domain *d, const struct domain *t)
|
||||
{
|
||||
return alternative_call(xsm_ops.argo_send, d, t);
|
||||
}
|
||||
|
||||
#endif /* CONFIG_ARGO */
|
||||
|
||||
#endif /* XSM_NO_WRAPPERS */
|
||||
|
||||
#ifdef CONFIG_MULTIBOOT
|
||||
|
||||
@@ -35,13 +35,6 @@ static const struct xsm_ops __initconst_cf_clobber dummy_ops = {
|
||||
.show_security_evtchn = xsm_show_security_evtchn,
|
||||
|
||||
.show_irq_sid = xsm_show_irq_sid,
|
||||
|
||||
#ifdef CONFIG_ARGO
|
||||
.argo_enable = xsm_argo_enable,
|
||||
.argo_register_single_source = xsm_argo_register_single_source,
|
||||
.argo_register_any_source = xsm_argo_register_any_source,
|
||||
.argo_send = xsm_argo_send,
|
||||
#endif
|
||||
};
|
||||
|
||||
void __init xsm_fixup_ops(struct xsm_ops *ops)
|
||||
|
||||
@@ -1969,13 +1969,6 @@ static const struct xsm_ops __initconst_cf_clobber flask_ops = {
|
||||
.show_security_evtchn = flask_show_security_evtchn,
|
||||
|
||||
.show_irq_sid = flask_show_irq_sid,
|
||||
|
||||
#ifdef CONFIG_ARGO
|
||||
.argo_enable = flask_argo_enable,
|
||||
.argo_register_single_source = flask_argo_register_single_source,
|
||||
.argo_register_any_source = flask_argo_register_any_source,
|
||||
.argo_send = flask_argo_send,
|
||||
#endif
|
||||
};
|
||||
|
||||
const struct xsm_ops *__init flask_init(
|
||||
|
||||