[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v6 04/10] xen: Introduce XENMEM_soft_reset operation
At 12:06 +0200 on 25 May (1432555565), Vitaly Kuznetsov wrote: > Tim Deegan <tim@xxxxxxx> writes: > > > At 17:26 +0100 on 22 May (1432315574), Jan Beulich wrote: > >> >>> On 22.05.15 at 17:36, <vkuznets@xxxxxxxxxx> wrote: > >> >>>>> On 13.05.15 at 11:49, <vkuznets@xxxxxxxxxx> wrote: > >> >>> + if ( !source_d->is_dying ) > >> >>> + { > >> >>> + /* > >> >>> + * Make sure no allocation/remapping for the source domain is > >> >>> ongoing > >> >>> + * and set is_dying flag to prevent such actions in future. > >> >>> + */ > >> >>> + spin_lock(&source_d->page_alloc_lock); > >> >>> + source_d->is_dying = DOMDYING_locked; > >> >> > >> >> Furthermore I don't see how this prevents there being further > >> >> changes to the GFN <-> MFN mappings for the guest (yet you rely > >> >> on them to be stable below afaict). > >> >> > >> > > >> > As you suggested below we can complement that by pausing both source and > >> > destination domains here. In that case these domains won't be changing > >> > their mappings by themselves but it would still be possible for the > >> > hypervisor to change something. We do have !d->is_dying check in many > >> > places though ... In theory we could have taken the p2m_lock() for both > >> > domains but I'm not sure all stuff I need here will cope with p2m_lock() > >> > already being held, this lock is x86-specific and I'm not sure we want > >> > it in the first place. I'd be very grateful for some additional ideas on > >> > how to make it safer. > >> > >> For whether p2m_lock() might be needed here I'd like to defer to > >> Tim. > > > > I don't think that will work. Given that you have to make this > > preemptable you can't hope to hold the p2m lock for the entire > > operation. > > > > If you want to make sure that the p2m mapping doesn't change > > underfoot, you can use get_gfn()/put_gfn() around each individual > > operation. > > Thanks, I see... An additional concern from Jan was (I suppose) about > the safeness (or correctness) of this operation as a whole: even when > both source and destination domains are paused their mappings can be > changed by the control domain (especially having possible preemption in > mind). True. I don't think there's anything you can do about that. As I said, you can't hold the p2m lock while your operation is preempted. AFAICT this operation is pretty much best-effort already; it doesn't really handle grant-table/shared/paged/readonly/access-controlled mappings. > > If you use get_gfn_type_access() it will also report > > superpage mappings, so you can drop the loop that attempts > > to detect them in the PoD case. > > Thanks, I'll have a look. This one is x86-specific but the whole PoD > case is already x86-specific because of p2m_is_pod(). It might be worth adding this interface to arm, depending on what you want to do about p2m-access types. E.g. can a guest OS use this kexec operation to turn off all its p2m-access controls (and so escape from the control of an external security tool)? > > Incidentally, counting from 0-->max_mapped_gfn is unfortunate (though I > > know this is not the first code to do that). It would be better > > to introduce an iterator over the p2m itself, either some sort of > > for_each_gfn(dom, callback_fn, callback_arg) or a get_next_gfn(dom, > > base_gfn, &found_gfn) that skips unmapped areas. > > I agree. Do you see this as a compulsory part of this series? I don't think so; not in something like this form anyway. If you wanted to handle the source p2m changing underfoot by re-scanning for new entries, then you'd definitely want it. Tim. _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |