|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH v6 4/5] x86/mm: Reject invalid cacheability in PV guests by default
On 22.12.2022 23:31, Demi Marie Obenour wrote:
> Setting cacheability flags that are not ones specified by Xen is a bug
> in the guest. By default, return -EINVAL if a guests attempts to do
> this. The invalid-cacheability= Xen command-line flag allows the
> administrator to allow such attempts or to produce
Unfinished sentence?
> --- a/xen/arch/x86/mm.c
> +++ b/xen/arch/x86/mm.c
> @@ -1324,6 +1324,37 @@ static int put_page_from_l4e(l4_pgentry_t l4e, mfn_t
> l4mfn, unsigned int flags)
> return put_pt_page(l4e_get_page(l4e), mfn_to_page(l4mfn), flags);
> }
>
> +enum {
> + INVALID_CACHEABILITY_ALLOW,
> + INVALID_CACHEABILITY_DENY,
> + INVALID_CACHEABILITY_TRAP,
> +};
> +
> +#ifdef NDEBUG
> +#define INVALID_CACHEABILITY_DEFAULT INVALID_CACHEABILITY_DENY
> +#else
> +#define INVALID_CACHEABILITY_DEFAULT INVALID_CACHEABILITY_TRAP
> +#endif
> +
> +static __ro_after_init uint8_t invalid_cacheability =
> + INVALID_CACHEABILITY_DEFAULT;
> +
> +static int __init cf_check set_invalid_cacheability(const char *str)
> +{
> + if (strcmp("allow", str) == 0)
> + invalid_cacheability = INVALID_CACHEABILITY_ALLOW;
> + else if (strcmp("deny", str) == 0)
> + invalid_cacheability = INVALID_CACHEABILITY_DENY;
> + else if (strcmp("trap", str) == 0)
> + invalid_cacheability = INVALID_CACHEABILITY_TRAP;
Style: Missing blanks immediately inside if(). Also note that generally
we prefer '!' over "== 0".
> + else
> + return -EINVAL;
> +
> + return 0;
> +}
> +
> +custom_param("invalid-cacheability", set_invalid_cacheability);
Nit: Generally we avoid blank lines between the handler of a
custom_param() and the actual param definition.
> @@ -1343,7 +1374,34 @@ static int promote_l1_table(struct page_info *page)
> }
> else
> {
> - switch ( ret = get_page_from_l1e(pl1e[i], d, d) )
> + l1_pgentry_t l1e = pl1e[i];
> +
> + if ( invalid_cacheability != INVALID_CACHEABILITY_ALLOW )
> + {
> + switch ( l1e.l1 & PAGE_CACHE_ATTRS )
You want to use l1e_get_flags() here.
Jan
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |