All of lore.kernel.org
 help / color / mirror / Atom feed
From: Julien Grall <julien@xen.org>
To: Penny Zheng <Penny.Zheng@arm.com>, xen-devel@lists.xenproject.org
Cc: nd@arm.com, Stefano Stabellini <sstabellini@kernel.org>,
	Bertrand Marquis <bertrand.marquis@arm.com>,
	Volodymyr Babchuk <Volodymyr_Babchuk@epam.com>
Subject: Re: [PATCH v1 08/13] xen/arm: destroy static shared memory when de-construct domain
Date: Sat, 9 Apr 2022 10:25:57 +0100	[thread overview]
Message-ID: <7c6a3af7-6052-aab8-829c-bc2c2a5db341@xen.org> (raw)
In-Reply-To: <20220311061123.1883189-9-Penny.Zheng@arm.com>

Hi Penny,

On 11/03/2022 06:11, Penny Zheng wrote:
> From: Penny Zheng <penny.zheng@arm.com>
> 
> This commit introduces a new helper destroy_domain_shm to destroy static
> shared memory at domain de-construction.
> 
> This patch only considers the scenario where the owner domain is the
> default dom_shared, for user-defined owner domain, it will be covered in
> the following patches.
> 
> Since all domains are borrower domains, we could simply remove guest P2M
> foreign mapping of statically shared memory region and drop the reference
> added at guest_physmap_add_shm.
> 
> Signed-off-by: Penny Zheng <penny.zheng@arm.com>
> ---
>   xen/arch/arm/domain.c | 48 +++++++++++++++++++++++++++++++++++++++++++
>   1 file changed, 48 insertions(+)
> 
> diff --git a/xen/arch/arm/domain.c b/xen/arch/arm/domain.c
> index 1ff1df5d3f..f0bfd67fe5 100644
> --- a/xen/arch/arm/domain.c
> +++ b/xen/arch/arm/domain.c
> @@ -34,6 +34,7 @@
>   #include <asm/platform.h>
>   #include <asm/procinfo.h>
>   #include <asm/regs.h>
> +#include <asm/setup.h>
>   #include <asm/tee/tee.h>
>   #include <asm/vfp.h>
>   #include <asm/vgic.h>
> @@ -993,6 +994,48 @@ static int relinquish_memory(struct domain *d, struct page_list_head *list)
>       return ret;
>   }
>   
> +#ifdef CONFIG_STATIC_SHM
> +static int domain_destroy_shm(struct domain *d)
> +{
> +    int ret = 0;
> +    unsigned long i = 0UL, j;
> +
> +    if ( d->arch.shm_mem == NULL )
> +        return ret;

You already return the value here. So...

> +    else

... the else is pointless.

> +    {
> +        for ( ; i < d->arch.shm_mem->nr_banks; i++ )
> +        {
> +            unsigned long nr_gfns = PFN_DOWN(d->arch.shm_mem->bank[i].size);
> +            gfn_t gfn = gaddr_to_gfn(d->arch.shm_mem->bank[i].start);
> +
> +            for ( j = 0; j < nr_gfns; j++ )
> +            {
> +                mfn_t mfn;
> +
> +                mfn = gfn_to_mfn(d, gfn_add(gfn, j));

A domain is allowed to modify its P2M. So there are no guarantee that 
the GFN will still point to the shared memory. This will allow the guest...

> +                if ( !mfn_valid(mfn) )
> +                {
> +                    dprintk(XENLOG_ERR,
> +                            "Domain %pd page number %lx invalid.\n",
> +                            d, gfn_x(gfn) + i);
> +                    return -EINVAL;

... to actively prevent destruction.

> +                }


> +
> +                ret = guest_physmap_remove_page(d, gfn_add(gfn, j), mfn, 0);
> +                if ( ret )
> +                    return ret;
> +
> +                /* Drop the reference. */
> +                put_page(mfn_to_page(mfn));

guest_physmap_remove_page() will already drop the reference taken for 
the foreign mapping. I couldn't find any other reference taken, what is 
the put_page() for?

Also, as per above we don't know whether this is a page from the shared 
page. So we can't blindly call put_page().

However, I don't think we need any specific code here. We can rely on 
relinquish_p2m_mappings() to drop any reference. If there is an extra 
one for shared mappings, then we should update p2m_put_l3_page().

Cheers,

-- 
Julien Grall


  reply	other threads:[~2022-04-09  9:26 UTC|newest]

Thread overview: 51+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-03-11  6:11 [PATCH v1 00/13] Static shared memory on dom0less system Penny Zheng
2022-03-11  6:11 ` [PATCH v1 01/13] xen/arm: introduce static shared memory Penny Zheng
2022-03-18  1:59   ` Stefano Stabellini
2022-03-11  6:11 ` [PATCH v1 02/13] xen/arm: introduce a special domain DOMID_SHARED Penny Zheng
2022-03-18  1:59   ` Stefano Stabellini
2022-03-18  6:43     ` Penny Zheng
2022-03-18 22:02       ` Stefano Stabellini
2022-03-18  8:53   ` Jan Beulich
2022-03-18 21:50     ` Stefano Stabellini
2022-03-21  8:48       ` Jan Beulich
2022-03-21 20:03         ` Stefano Stabellini
2022-04-09  9:11           ` Julien Grall
2022-04-15  8:08             ` Penny Zheng
2022-04-15 22:18               ` Stefano Stabellini
2022-04-15 23:45                 ` Julien Grall
2022-03-18 22:20     ` Stefano Stabellini
2022-04-15  9:52     ` Penny Zheng
2022-04-15 23:34       ` Julien Grall
2022-04-19  8:10       ` Jan Beulich
2022-03-11  6:11 ` [PATCH v1 03/13] xen/arm: allocate static shared memory to dom_shared Penny Zheng
2022-03-18  1:59   ` Stefano Stabellini
2022-03-18  8:35     ` Penny Zheng
2022-03-18 22:27       ` Stefano Stabellini
2022-03-11  6:11 ` [PATCH v1 04/13] xen/arm: add P2M type parameter in guest_physmap_add_pages Penny Zheng
2022-03-11  6:11 ` [PATCH v1 05/13] xen/arm: introduce get_pages_from_gfn Penny Zheng
2022-03-11  6:11 ` [PATCH v1 06/13] xen/arm: set up shared memory foreign mapping for borrower domain Penny Zheng
2022-03-18  2:00   ` Stefano Stabellini
2022-03-29  3:44     ` Penny Zheng
2022-04-08 22:18       ` Stefano Stabellini
2022-04-08 22:50         ` Julien Grall
2022-04-08 23:18           ` Stefano Stabellini
2022-04-08 22:59   ` Julien Grall
2022-04-09  9:30     ` Julien Grall
2022-04-20  8:53       ` Penny Zheng
2022-04-20  8:51     ` Penny Zheng
2022-03-11  6:11 ` [PATCH v1 07/13] xen/arm: create shared memory nodes in guest device tree Penny Zheng
2022-03-18  2:00   ` Stefano Stabellini
2022-03-11  6:11 ` [PATCH v1 08/13] xen/arm: destroy static shared memory when de-construct domain Penny Zheng
2022-04-09  9:25   ` Julien Grall [this message]
2022-04-21  7:00     ` Penny Zheng
2022-03-11  6:11 ` [PATCH v1 09/13] xen/arm: enable statically shared memory on Dom0 Penny Zheng
2022-03-11  6:11 ` [PATCH v1 10/13] xen/arm: allocate static shared memory to a specific owner domain Penny Zheng
2022-03-18  2:00   ` Stefano Stabellini
2022-03-11  6:11 ` [PATCH v1 11/13] xen/arm: store shm-info for deferred foreign memory map Penny Zheng
2022-03-18  2:01   ` Stefano Stabellini
2022-03-29  8:37     ` Penny Zheng
2022-04-08 22:46       ` Stefano Stabellini
2022-04-09  9:14         ` Julien Grall
2022-03-11  6:11 ` [PATCH v1 12/13] xen/arm: defer foreign memory map in shm_init_late Penny Zheng
2022-03-11  6:11 ` [PATCH v1 13/13] xen/arm: unmap foreign memory mapping when destroyed domain is owner domain Penny Zheng
2022-04-09  9:44   ` Julien Grall

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=7c6a3af7-6052-aab8-829c-bc2c2a5db341@xen.org \
    --to=julien@xen.org \
    --cc=Penny.Zheng@arm.com \
    --cc=Volodymyr_Babchuk@epam.com \
    --cc=bertrand.marquis@arm.com \
    --cc=nd@arm.com \
    --cc=sstabellini@kernel.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.