[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Xen-devel] get_page_from_gfn() for foreign pages



>>> On 01.03.18 at 15:49, <Paul.Durrant@xxxxxxxxxx> wrote:
>>  -----Original Message-----
>> From: Jan Beulich [mailto:JBeulich@xxxxxxxx]
>> Sent: 01 March 2018 14:32
>> >>> On 01.03.18 at 15:17, <Paul.Durrant@xxxxxxxxxx> wrote:
>> > Yes, it's the PV case I'm hitting, i.e:
>> >
>> > page = __mfn_to_page(gfn);
>> > return mfn_valid(_mfn(gfn)) && get_page(page, d) ? page : NULL;
>> >
>> > In my particular case I have an mfn but it represents a page that dom0 has
>> > grant mapped. When I come to look it up as a GFN with DOMID_SELF I get
>> the
>> > error.
>> 
>> Sure, and the problem is that for PV there's no P2M type associated
>> with a page, so we can't know whether the page is legitimately
>> foreign to the given domain, or a random page belonging to a
>> domain the requesting one has no privilege over.
> 
> OK, so it's the lack of ability to check the P2M that is crucial. Would it 
> not be sufficient to determine whether the specified domain has privilege 
> over the page owner if they are not identical?

That could work, if you can live with the restriction that for a PV
target only Dom0 can have privilege over it (for HVM it could also
be a stubdom).

> (I can't remember whether 
> there are any examples left of pages owned by a target that are not suitable 
> for priv mapping... IIRC you cleaned up all the instances that left Xen 
> vulnerable).

I think so, yes.

>> >> For grant mapped pages the situation may be a little less clear:
>> >> How would you deal with a grant being revoked when you have
>> >> random uses of the page in another domain?
>> >>
>> >
>> > I suppose it comes down to whether we want to be able to have domA
>> (which
>> > has priv mapping rights over domB) to be able to take a ref on a page from
>> > domC that was granted to domB. If, for example, you have a stubdom with
>> a PV
>> > backend for a framebuffer which is then exported via a VNC server running
>> in
>> > dom0 then that's exactly what you'd probably want to set up. So I don't see
>> > why it should be disallowed. In my case domA == domB and it certainly
>> seems
>> > reasonable to me that a domain be able to page references on GFNs in its
>> own
>> > P2M regardless of the actual page owner.
>> 
>> There may be special cases where it is okay to be allowed, but in
>> the general case it has to be refused. The grant table interface
>> allows a guest to specify _exactly_ which domain(s) get(s) granted
>> access to a given page. Part of me is actually thinking that even
>> transitive grants already violate the trust put in the backend by a
>> frontend.
>> 
>> And then you didn't really answer my question.
> 
> Well, you can't revoke a grant whist a backend has it mapped... that's been 
> a limitation forever. Also, I think it's reasonable that granting to a domain 
> A allows domain A *and* any other domain with mapping privilege over domain A 
> to access that page. I don't think there's really any expectation in the 
> grant interface that granting to only that domain... frontends have to trust 
> backends and if the backend grants it on then so be it. That's certainly the 
> level of trust that's been in place since v2 and AFAIK no-one is unhappy 
> about 
> that.

All true, but what you want to do here is a mapping outside of
what grant_table.c controls and provides. Yet for the page owner
to know when a grant is fine to revoke, such obtaining of extra
references would need to be tracked.

Jan


_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxxx
https://lists.xenproject.org/mailman/listinfo/xen-devel

 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.