|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v6 13/15] xsm, argo: XSM control for any access to argo by a domain
On Wed, Jan 23, 2019 at 9:07 PM Christopher Clark
<christopher.w.clark@xxxxxxxxx> wrote:
>
> Will inhibit initialization of the domain's argo data structure to
> prevent receiving any messages or notifications and access to any of
> the argo hypercall operations.
>
> Signed-off-by: Christopher Clark <christopher.clark6@xxxxxxxxxxxxxx>
> Acked-by: Daniel De Graaf <dgdegra@xxxxxxxxxxxxx>
>
> v3 Daniel/Jan: add to the default xsm policy for enable
> v3 Add Daniel's Acked-by
> v3 #04 Jason/Roger: soft_reset: can assume reinit is ok if d->argo set
> v2 self: fix xsm use in soft-reset prior to introduction
> v1 #5 (#17) feedback Paul: XSM control for any access: use currd
> v1 #16 feedback Jan: apply const to function signatures
> ---
> tools/flask/policy/modules/guest_features.te | 4 ++--
> xen/common/argo.c | 10 +++++-----
> xen/include/xsm/dummy.h | 5 +++++
> xen/include/xsm/xsm.h | 6 ++++++
> xen/xsm/dummy.c | 1 +
> xen/xsm/flask/hooks.c | 7 +++++++
> xen/xsm/flask/policy/access_vectors | 3 +++
> 7 files changed, 29 insertions(+), 7 deletions(-)
>
> diff --git a/tools/flask/policy/modules/guest_features.te
> b/tools/flask/policy/modules/guest_features.te
> index ca52257..fe4835d 100644
> --- a/tools/flask/policy/modules/guest_features.te
> +++ b/tools/flask/policy/modules/guest_features.te
> @@ -5,11 +5,11 @@ allow domain_type xen_t:xen tmem_op;
> # pmu_ctrl is for)
> allow domain_type xen_t:xen2 pmu_use;
>
> -# Allow all domains:
> +# Allow all domains to enable the Argo interdomain communication hypercall;
> # to register single-sender (unicast) rings to partner with any domain;
> # to register any-sender (wildcard) rings that can be sent to by any domain;
> # and send messages to rings.
> -allow domain_type xen_t:argo { register_any_source };
> +allow domain_type xen_t:argo { enable register_any_source };
> allow domain_type domain_type:argo { send register_single_source };
>
> # Allow guest console output to the serial console. This is used by PV Linux
> diff --git a/xen/common/argo.c b/xen/common/argo.c
> index 8eabf99..ba9c1d6 100644
> --- a/xen/common/argo.c
> +++ b/xen/common/argo.c
> @@ -2091,7 +2091,7 @@ do_argo_op(unsigned int cmd,
> XEN_GUEST_HANDLE_PARAM(void) arg1,
> argo_dprintk("->do_argo_op(%u,%p,%p,%lu,0x%lx)\n", cmd,
> (void *)arg1.p, (void *)arg2.p, arg3, arg4);
>
> - if ( unlikely(!opt_argo) )
> + if ( unlikely(!opt_argo || xsm_argo_enable(currd)) )
> return -EOPNOTSUPP;
>
> switch (cmd)
> @@ -2242,7 +2242,7 @@ argo_init(struct domain *d)
> {
> struct argo_domain *argo;
>
> - if ( !opt_argo )
> + if ( !opt_argo || xsm_argo_enable(d) )
> {
> argo_dprintk("argo disabled, domid: %u\n", d->domain_id);
> return 0;
> @@ -2299,9 +2299,9 @@ argo_soft_reset(struct domain *d)
> wildcard_rings_pending_remove(d);
>
> /*
> - * Since opt_argo cannot change at runtime, if d->argo is true then
> - * opt_argo must be true, and we can assume that init is allowed to
> - * proceed again here.
> + * 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
> + * true, and we can assume that init is allowed to proceed again
> here.
> */
> argo_domain_init(d->argo);
> }
> diff --git a/xen/include/xsm/dummy.h b/xen/include/xsm/dummy.h
> index 7daf1f0..56d7865 100644
> --- a/xen/include/xsm/dummy.h
> +++ b/xen/include/xsm/dummy.h
> @@ -721,6 +721,11 @@ static XSM_INLINE int xsm_dm_op(XSM_DEFAULT_ARG struct
> domain *d)
> #endif /* CONFIG_X86 */
>
> #ifdef CONFIG_ARGO
> +static XSM_INLINE int xsm_argo_enable(struct domain *d)
> +{
> + return 0;
> +}
> +
> static XSM_INLINE int xsm_argo_register_single_source(struct domain *d,
> struct domain *t)
> {
> diff --git a/xen/include/xsm/xsm.h b/xen/include/xsm/xsm.h
> index 7c69efe..8daffae 100644
> --- a/xen/include/xsm/xsm.h
> +++ b/xen/include/xsm/xsm.h
> @@ -182,6 +182,7 @@ struct xsm_operations {
> int (*xen_version) (uint32_t cmd);
> int (*domain_resource_map) (struct domain *d);
> #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);
> @@ -705,6 +706,11 @@ static inline int xsm_domain_resource_map(xsm_default_t
> def, struct domain *d)
> }
>
> #ifdef CONFIG_ARGO
> +static inline xsm_argo_enable(const struct domain *d)
missing return type, fails to compile with XSM enabled:
| /home/chris/git/xen/include/xsm/xsm.h:709:15: error: return type
defaults to 'int' [-Werror=implicit-int]
| static inline xsm_argo_enable(const struct domain *d)
> +{
> + return xsm_ops->argo_enable(d);
> +}
> +
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxxx
https://lists.xenproject.org/mailman/listinfo/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |