All of lore.kernel.org
 help / color / mirror / Atom feed
From: Daniel De Graaf <dgdegra@tycho.nsa.gov>
To: Mukesh Rathor <mukesh.rathor@oracle.com>
Cc: xen-devel <xen-devel@lists.xenproject.org>,
	keir.xen@gmail.com, tim@xen.org, Jan Beulich <JBeulich@suse.com>
Subject: Re: [V2 PATCH 7/8] pvh dom0: Add and remove foreign pages
Date: Tue, 26 Nov 2013 10:03:52 -0500	[thread overview]
Message-ID: <5294B858.3010405@tycho.nsa.gov> (raw)
In-Reply-To: <20131125163200.1214facf@mantra.us.oracle.com>

On 11/25/2013 07:32 PM, Mukesh Rathor wrote:
> On Mon, 25 Nov 2013 14:00:35 -0500
> Daniel De Graaf <dgdegra@tycho.nsa.gov> wrote:
>
>> On 11/25/2013 04:03 AM, Jan Beulich wrote:
>>>>>> On 23.11.13 at 01:03, Mukesh Rathor <mukesh.rathor@oracle.com>
>>>>>> wrote:
>>>> +static int xenmem_add_foreign_to_pmap(unsigned long fgfn,
>>>> unsigned long gpfn,
>>>> +                                      domid_t foreign_domid)
>>>> +{
>>>> +    p2m_type_t p2mt, p2mt_prev;
>>>> +    int rc = 0;
>>>> +    unsigned long prev_mfn, mfn = 0;
>>>> +    struct domain *fdom, *currd = current->domain;
>>>> +    struct page_info *page = NULL;
>>>> +
>>>> +    if ( currd->domain_id == foreign_domid || foreign_domid ==
>>>> DOMID_SELF ||
>>>> +         !is_pvh_domain(currd) )
>>>> +        return -EINVAL;
>>>> +
>>>> +    if ( !is_control_domain(currd) ||
>>>> +         (fdom = get_pg_owner(foreign_domid)) == NULL )
>>>> +        return -EPERM;
>>>
>>> Is this the right approach (i.e. shouldn't this be an XSM call)?
>>> Cc-ing Daniel...
>>>
>>
>> Yes, this should be an XSM call; it needs to explicitly check if currd
>> has the right to access pages from fdom.
>
> I thought the control_domain would always have right to access pages
> from fdoms.

This is true unless you are creating a system with multiple control domains
or with a control domain that gives up privileges after setting up some
initial boot domains that contain secrets (disk/network encryption, vTPMs,
etc). Preventing the control domain from being able to access pages in such
domains means a compromised control domain does not compromise the entire
system.

> If no, can you please give some hints on which
> xsm call I need to use. Glancing at xsm file, I can't figure quickly....
>
> thanks
> mukesh

This will either need a new XSM hook or a change to the prototype of the
xsm_add_to_physmap hook to add a new parameter for the foreign domain; the
latter seems the simplest change, passing NULL for pg_src when not using
XENMAPSPACE_gmfn_foreign. The hook would look something like this:

int xsm_add_to_physmap(XSM_DEFAULT_ARG struct domain *curr,
		struct domain *target, struct domain *pg_src)
{
     int rc;
     XSM_ASSERT_ACTION(XSM_TARGET);
     rc = xsm_default_action(action, curr, target);
     if ( pg_src && !rc )
         rc = xsm_default_action(action, curr, pg_src);
     return rc;
}
with the corresponding FLASK hook:
{ ...
	rc = domain_has_perm(curr, target, SECCLASS_MMU, MMU__PHYSMAP);
	if ( pg_src && !rc )
	rc = domain_has_perm(curr, pg_src, SECCLASS_MMU, MMU__MAP_READ|MMU__MAP_WRITE);
}

This will require pulling the get_pg_owner(foreign_domid) up a few levels
in order to have the struct domain* available instead of the domid, but
that doesn't seem like it would cause any issues.

-- 
Daniel De Graaf
National Security Agency

  reply	other threads:[~2013-11-26 15:04 UTC|newest]

Thread overview: 34+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-11-23  0:03 [V2 PATCH 0/8]: PVH dom0 Mukesh Rathor
2013-11-23  0:03 ` [V2 PATCH 1/8] PVH dom0: iommu related changes Mukesh Rathor
2013-11-25  1:19   ` Konrad Rzeszutek Wilk
2013-11-25  8:47     ` Jan Beulich
2013-11-25  8:35   ` Jan Beulich
2013-11-26 14:57   ` George Dunlap
2013-11-23  0:03 ` [V2 PATCH 2/8] PVH dom0: create update_memory_mapping() function Mukesh Rathor
2013-11-25  8:43   ` Jan Beulich
2013-11-25 23:20     ` Mukesh Rathor
2013-11-23  0:03 ` [V2 PATCH 3/8] PVH dom0: move some pv specific code to static functions Mukesh Rathor
2013-11-23  0:03 ` [V2 PATCH 4/8] dom0: construct_dom0 changes Mukesh Rathor
2013-11-23  0:03 ` [V2 PATCH 5/8] PVH dom0: implement XENMEM_add_to_physmap_range for x86 Mukesh Rathor
2013-11-23  0:03 ` [V2 PATCH 6/8] PVH dom0: Introduce p2m_map_foreign Mukesh Rathor
2013-11-26 16:00   ` George Dunlap
2013-11-26 16:11     ` Ian Campbell
2013-11-26 17:35       ` George Dunlap
2013-11-23  0:03 ` [V2 PATCH 7/8] pvh dom0: Add and remove foreign pages Mukesh Rathor
2013-11-25  9:03   ` Jan Beulich
2013-11-25 19:00     ` Daniel De Graaf
2013-11-26  0:32       ` Mukesh Rathor
2013-11-26 15:03         ` Daniel De Graaf [this message]
2013-11-27  1:19           ` Mukesh Rathor
2013-11-23  0:03 ` [V2 PATCH 8/8] pvh dom0: add opt_dom0pvh to setup.c Mukesh Rathor
2013-11-25  9:04   ` Jan Beulich
2013-11-26  1:18     ` Mukesh Rathor
2013-11-25  9:06 ` [V2 PATCH 0/8]: PVH dom0 Jan Beulich
2013-11-25 10:49   ` George Dunlap
2013-11-25 10:57     ` Roger Pau Monné
2013-11-25 11:02       ` Jan Beulich
2013-11-26 17:20         ` George Dunlap
2013-11-26 18:06           ` Jan Beulich
2013-11-27  1:32             ` Mukesh Rathor
2013-11-25 11:05     ` Jan Beulich
2013-11-25 11:02 ` Roger Pau Monné

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=5294B858.3010405@tycho.nsa.gov \
    --to=dgdegra@tycho.nsa.gov \
    --cc=JBeulich@suse.com \
    --cc=keir.xen@gmail.com \
    --cc=mukesh.rathor@oracle.com \
    --cc=tim@xen.org \
    --cc=xen-devel@lists.xenproject.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.