|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH] xen/altp2m: set access_required properly for all altp2ms
Thanks for the review!
On 06/12/2018 03:23 PM, Jan Beulich wrote:
>>>> On 11.06.18 at 17:12, <rcojocaru@xxxxxxxxxxxxxxx> wrote:
>> --- a/xen/arch/x86/domain.c
>> +++ b/xen/arch/x86/domain.c
>> @@ -38,6 +38,7 @@
>> #include <xen/livepatch.h>
>> #include <public/sysctl.h>
>> #include <public/hvm/hvm_vcpu.h>
>> +#include <asm/altp2m.h>
>
> Not the least to avoid this I think ...
>
>> @@ -719,6 +720,22 @@ int arch_domain_soft_reset(struct domain *d)
>> return ret;
>> }
>>
>> +void arch_domain_set_access_required(struct domain *d, bool access_required)
>
> ... this belongs somewhere in x86/mm/.
No problem, I'll move it there.
>> +{
>> + unsigned int i;
>> +
>> + if ( !altp2m_active(d) )
>> + return;
>
> Hard tab.
Sorry for missing that.
>> + for ( i = 0; i < MAX_ALTP2M; i++ )
>> + {
>> + if ( d->arch.altp2m_eptp[i] == mfn_x(INVALID_MFN) )
>> + continue;
>
> Yet another EPT-specific check outside of EPT code. Why can't you
> check the pointer you use ...
>
>> + d->arch.altp2m_p2m[i]->access_required = access_required;
>
> ... here against NULL, and otherwise do the store irrespective
> of the value of d->arch.altp2m_eptp[i]?
No reason, it'll have the same effect. I thought I'd only take care of
the active altp2ms, but the extra effort doesn't buy much indeed.
>> @@ -210,7 +211,7 @@ static int p2m_init_altp2m(struct domain *d)
>> return -ENOMEM;
>> }
>> p2m->p2m_class = p2m_alternate;
>> - p2m->access_required = 1;
>> + p2m->access_required = hostp2m->access_required;
>
> There must have been a reason to have it start out as 1. You
> mention the fact in the description, but not why it is okay (or
> even necessary) to change it.
If there was one, I can't see what it was. It in any case make altp2ms
behave differently than the hostp2m. The mem_access system has been
designed so that the user can say "this domain should now no longer be
able to continue if there are EPT violatios and there's no vm_event
subscriber attached".
Our application, for one, explicitly _disables_ access_required - so
that it is able to detach from the domain and reattach later. Hence the
surprise when an altp2m-enabled domain crashed when the introspection
agent detached.
Basically, the altp2m behaviour can't be controlled at all here. Maybe
Tamas remembers / knows more about why access_required ended up being 1
always, but it was probably just the quickest way to write the original
patch.
>> --- a/xen/common/domctl.c
>> +++ b/xen/common/domctl.c
>> @@ -1094,6 +1094,8 @@ long do_domctl(XEN_GUEST_HANDLE_PARAM(xen_domctl_t)
>> u_domctl)
>> domain_pause(d);
>> p2m_get_hostp2m(d)->access_required =
>> op->u.access_required.access_required;
>> + arch_domain_set_access_required(d,
>> + op->u.access_required.access_required);
>
> Perhaps the setting of the host p2m field should move into that
> function as well?
No objection, but should in that case the logic still live in
common/domctl.c (if the only thing the case does is call
arch_domain_set_access_required())?
I thought the common part (setting p2m_get_hostp2m(d)->access_required)
justifies the code remaining in the common/ source file.
Thanks,
Razvan
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxxx
https://lists.xenproject.org/mailman/listinfo/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |