|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH v2 02/10] xsm: refactor xsm_ops handling
On 12/07/2021 21:32, Daniel P. Smith wrote:
> diff --git a/xen/include/xsm/xsm.h b/xen/include/xsm/xsm.h
> index ad3cddbf7d..a8805f514b 100644
> --- a/xen/include/xsm/xsm.h
> +++ b/xen/include/xsm/xsm.h
> @@ -747,16 +747,14 @@ extern int xsm_dt_policy_init(void **policy_buffer,
> size_t *policy_size);
> extern bool has_xsm_magic(paddr_t);
> #endif
>
> -extern int register_xsm(struct xsm_operations *ops);
> -
> -extern struct xsm_operations dummy_xsm_ops;
> extern void xsm_fixup_ops(struct xsm_operations *ops);
>
> #ifdef CONFIG_XSM_FLASK
> -extern void flask_init(const void *policy_buffer, size_t policy_size);
> +extern struct xsm_operations *flask_init(const void *policy_buffer, size_t
> policy_size);
> #else
> -static inline void flask_init(const void *policy_buffer, size_t policy_size)
> +static inline struct xsm_operations *flask_init(const void *policy_buffer,
> size_t policy_size)
> {
> + return NULL;
> }
> #endif
As you touch almost every current user of xsm_operations and introduce
quite a few more, can I recommend taking the opportunity to shorten the
name to struct xsm_ops.
> diff --git a/xen/xsm/flask/flask_op.c b/xen/xsm/flask/flask_op.c
> index 01e52138a1..32e079d676 100644
> --- a/xen/xsm/flask/flask_op.c
> +++ b/xen/xsm/flask/flask_op.c
> @@ -226,6 +226,7 @@ static int flask_security_sid(struct
> xen_flask_sid_context *arg)
> static int flask_disable(void)
> {
> static int flask_disabled = 0;
> + struct xsm_operations default_ops;
>
> if ( ss_initialized )
> {
> @@ -244,7 +245,8 @@ static int flask_disable(void)
> flask_disabled = 1;
>
> /* Reset xsm_ops to the original module. */
> - xsm_ops = &dummy_xsm_ops;
> + xsm_fixup_ops(&default_ops);
> + xsm_ops = default_ops;
>
> return 0;
> }
These two hunks will disappear when patch 3 is reordered with respect to
this one.
... which is good because you've just pointed xsm_ops at a
soon-to-be-out-of-scope local variable on the stack.
> diff --git a/xen/xsm/flask/hooks.c b/xen/xsm/flask/hooks.c
> index f1a1217c98..a3a88aa8ed 100644
> --- a/xen/xsm/flask/hooks.c
> +++ b/xen/xsm/flask/hooks.c
> @@ -1883,7 +1883,8 @@ static struct xsm_operations flask_ops = {
> #endif
> };
flask and silo ops should become:
static const struct xsm_ops __initconst {flask,silo}_ops = {
as they're neither modified, nor needed after init, following this change.
>
> -void __init flask_init(const void *policy_buffer, size_t policy_size)
> +struct xsm_operations __init *flask_init(const void *policy_buffer,
> + size_t policy_size)
struct xsm_ops *__init flask_init(...)
Otherwise you've got the __init in the middle of the return type, and
some compilers are more picky than others.
> @@ -1923,6 +1921,9 @@ void __init flask_init(const void *policy_buffer,
> size_t policy_size)
> printk(XENLOG_INFO "Flask: Starting in enforcing mode.\n");
> else
> printk(XENLOG_INFO "Flask: Starting in permissive mode.\n");
> +
> + return &flask_ops;
> +
Stray newline.
> }
>
> /*
> diff --git a/xen/xsm/silo.c b/xen/xsm/silo.c
> index fc2ca5cd2d..808350f122 100644
> --- a/xen/xsm/silo.c
> +++ b/xen/xsm/silo.c
> @@ -112,12 +112,11 @@ static struct xsm_operations silo_xsm_ops = {
> #endif
> };
>
> -void __init silo_init(void)
> +struct xsm_operations __init *silo_init(void)
Same here as with flask.
> diff --git a/xen/xsm/xsm_core.c b/xen/xsm/xsm_core.c
> index 5eab21e1b1..7265f742e9 100644
> --- a/xen/xsm/xsm_core.c
> +++ b/xen/xsm/xsm_core.c
> @@ -68,17 +76,10 @@ static int __init parse_xsm_param(const char *s)
> }
> custom_param("xsm", parse_xsm_param);
>
> -static inline int verify(struct xsm_operations *ops)
> -{
> - /* verify the security_operations structure exists */
> - if ( !ops )
> - return -EINVAL;
> - xsm_fixup_ops(ops);
> - return 0;
> -}
> -
> static int __init xsm_core_init(const void *policy_buffer, size_t
> policy_size)
> {
> + struct xsm_operations *mod_ops;
> +
Hard tabs, and later in this function. Also, how about just 'ops' for
the local variable name?
> @@ -113,6 +124,17 @@ static int __init xsm_core_init(const void
> *policy_buffer, size_t policy_size)
> break;
> }
>
> + /*
> + * This handles three cases,
> + * - dummy policy module was selected
> + * - a policy module does not provide all handlers
Stray double space.
~Andrew
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |