From: Julien Grall <julien.grall@linaro.org>
To: Ian Campbell <Ian.Campbell@citrix.com>
Cc: xen-devel@lists.xenproject.org, tim@xen.org,
stefano.stabellini@citrix.com, patches@linaro.org
Subject: Re: [PATCH v2 09/10] xen/arm: Set foreign page type to p2m_map_foreign
Date: Tue, 10 Dec 2013 01:46:04 +0000 [thread overview]
Message-ID: <52A6725C.2060307@linaro.org> (raw)
In-Reply-To: <1386607240.7812.60.camel@kazak.uk.xensource.com>
On 12/09/2013 04:40 PM, Ian Campbell wrote:
> On Mon, 2013-12-09 at 03:34 +0000, Julien Grall wrote:
>> Xen needs to know that the current page belongs to another domain. Also take
>> the refcount to this page.
>>
>> Signed-off-by: Julien Grall <julien.grall@linaro.org>
>>
>> ---
>> Changes in v2:
>> - Even if gcc is buggy (see http://gcc.gnu.org/bugzilla/show_bug.cgi?id=18501)
>> define p2m type per mapspace to let the compiler warns about unitialized
>> values.
>> ---
>> xen/arch/arm/mm.c | 24 ++++++++++++++++--------
>> 1 file changed, 16 insertions(+), 8 deletions(-)
>>
>> diff --git a/xen/arch/arm/mm.c b/xen/arch/arm/mm.c
>> index ba51f6e..b08ffa0 100644
>> --- a/xen/arch/arm/mm.c
>> +++ b/xen/arch/arm/mm.c
>> @@ -993,6 +993,7 @@ static int xenmem_add_to_physmap_one(
>> {
>> unsigned long mfn = 0;
>> int rc;
>> + p2m_type_t t;
>>
>> switch ( space )
>> {
>> @@ -1025,18 +1026,22 @@ static int xenmem_add_to_physmap_one(
>>
>> d->arch.grant_table_gpfn[idx] = gpfn;
>>
>> + t = p2m_ram_rw;
>> +
>> spin_unlock(&d->grant_table->lock);
>> break;
>> case XENMAPSPACE_shared_info:
>> - if ( idx == 0 )
>> - mfn = virt_to_mfn(d->shared_info);
>> - else
>> + if ( idx != 0 )
>> return -EINVAL;
>> +
>> + mfn = virt_to_mfn(d->shared_info);
>> + t = p2m_ram_rw;
>> +
>> break;
>> case XENMAPSPACE_gmfn_foreign:
>> {
>> - paddr_t maddr;
>> struct domain *od;
>> + struct page_info *page;
>> od = rcu_lock_domain_by_any_id(foreign_domid);
>> if ( od == NULL )
>> return -ESRCH;
>> @@ -1048,15 +1053,18 @@ static int xenmem_add_to_physmap_one(
>> return rc;
>> }
>>
>> - maddr = p2m_lookup(od, pfn_to_paddr(idx));
>> - if ( maddr == INVALID_PADDR )
>> + /* Take refcount to the foreign domain page.
>
> "refcount on...". Or "Take a reference to..."
>
>> + * Refcount will be release in XENMEM_remove_from_physmap */
>
> and a few other places...
>
> Like with the unmap it might be best to push this reference manipulation
> down into the eventual function which makes the mapping. That would keep
> this stuff much more localised.
>
>> + page = get_page_from_gfn(od, idx, NULL, P2M_ALLOC);
>
> This made me wonder what happens if the guest drops its mapping while
> the foreign one is around. At least the page won't be freed until the
> foreign mapping goes away, but it won't be what the tools think it is.
In this case, the domain will get wrong data and can crash. It won't
corrupted the domain who mapped the foreign mapping.
--
Julien Grall
next prev parent reply other threads:[~2013-12-10 1:46 UTC|newest]
Thread overview: 44+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-12-09 3:33 [PATCH v2 00/10] xen/arm: Handle correctly foreign mapping Julien Grall
2013-12-09 3:33 ` [PATCH v2 01/10] xen/arm: Introduce steps in domain_relinquish_resource Julien Grall
2013-12-09 15:42 ` Ian Campbell
2013-12-09 3:33 ` [PATCH v2 02/10] xen/arm: move mfn_to_p2m_entry in arch/arm/p2m.c Julien Grall
2013-12-09 3:34 ` [PATCH v2 03/10] xen/arm: Implement p2m_type_t as an enum Julien Grall
2013-12-09 15:59 ` Ian Campbell
2013-12-09 16:34 ` Julien Grall
2013-12-09 16:54 ` Ian Campbell
2013-12-10 2:02 ` Julien Grall
2013-12-09 3:34 ` [PATCH v2 04/10] xen/arm: Store p2m type in each page of the guest Julien Grall
2013-12-09 16:03 ` Ian Campbell
2013-12-09 16:37 ` Julien Grall
2013-12-09 16:53 ` Ian Campbell
2013-12-10 1:55 ` Julien Grall
2013-12-10 9:37 ` Ian Campbell
2013-12-10 13:50 ` Julien Grall
2013-12-10 13:58 ` Ian Campbell
2013-12-09 3:34 ` [PATCH v2 05/10] xen/arm: p2m: Extend p2m_lookup parameters to retrieve the p2m type Julien Grall
2013-12-09 16:04 ` Ian Campbell
2013-12-09 3:34 ` [PATCH v2 06/10] xen/arm: Retrieve p2m type in get_page_from_gfn Julien Grall
2013-12-09 16:06 ` Ian Campbell
2013-12-09 16:50 ` Julien Grall
2013-12-09 16:58 ` Ian Campbell
2013-12-10 2:04 ` Julien Grall
2013-12-09 3:34 ` [PATCH v2 07/10] xen/arm: Introduce relinquish_p2m_mapping to remove refcount every mapped page Julien Grall
2013-12-09 16:28 ` Ian Campbell
2013-12-10 1:31 ` Julien Grall
2013-12-10 2:36 ` Julien Grall
2013-12-10 9:34 ` Ian Campbell
2013-12-09 3:34 ` [PATCH v2 08/10] xen/arm: Implement xen_rem_foreign_from_p2m Julien Grall
2013-12-09 16:31 ` Ian Campbell
2013-12-09 17:08 ` Julien Grall
2013-12-09 17:18 ` Ian Campbell
2013-12-10 1:33 ` Julien Grall
2013-12-09 3:34 ` [PATCH v2 09/10] xen/arm: Set foreign page type to p2m_map_foreign Julien Grall
2013-12-09 16:40 ` Ian Campbell
2013-12-10 1:46 ` Julien Grall [this message]
2013-12-10 1:51 ` Julien Grall
2013-12-10 9:37 ` Ian Campbell
2013-12-10 14:44 ` Julien Grall
2013-12-10 15:13 ` Ian Campbell
2013-12-09 3:34 ` [PATCH v2 10/10] xen/arm: grant-table: Support read-only mapping Julien Grall
2013-12-09 16:41 ` Ian Campbell
2013-12-09 11:32 ` [PATCH v2 00/10] xen/arm: Handle correctly foreign mapping George Dunlap
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=52A6725C.2060307@linaro.org \
--to=julien.grall@linaro.org \
--cc=Ian.Campbell@citrix.com \
--cc=patches@linaro.org \
--cc=stefano.stabellini@citrix.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).