From: Jan Kiszka <jan.kiszka@siemens.com>
To: Paolo Bonzini <pbonzini@redhat.com>
Cc: "peter.maydell@linaro.org" <peter.maydell@linaro.org>,
"qemu-devel@nongnu.org" <qemu-devel@nongnu.org>
Subject: Re: [Qemu-devel] [PATCH v2 02/11] memory: destroy phys_sections one by one
Date: Mon, 01 Jul 2013 16:14:01 +0200 [thread overview]
Message-ID: <51D18EA9.8000400@siemens.com> (raw)
In-Reply-To: <1372438702-20491-3-git-send-email-pbonzini@redhat.com>
On 2013-06-28 18:58, Paolo Bonzini wrote:
> phys_sections_clear is invoked after the dispatch tree has been
> destroyed.
You mean destroy_all_mappings called by mem_begin vs.
phys_sections_clear called by core_begin, right?
> This leaves a window where phys_sections_nb > 0 but the
> subpages are not valid anymore, which is a recipe for use-after-free
> bugs.
>
> Move the destruction of subpages in phys_sections_clear.
What ensures that we still destroy the subpages when an address space is
cleaned up (address_space_destroy_dispatch)? The fact that an address
space has to be / is de facto empty when destroying it? That question
also applies on the next patch.
Jan
>
> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
> ---
> exec.c | 27 +++++++++++++--------------
> 1 file changed, 13 insertions(+), 14 deletions(-)
>
> diff --git a/exec.c b/exec.c
> index 1118587..e7eadf5 100644
> --- a/exec.c
> +++ b/exec.c
> @@ -762,17 +762,6 @@ hwaddr memory_region_section_get_iotlb(CPUArchState *env,
> static int subpage_register (subpage_t *mmio, uint32_t start, uint32_t end,
> uint16_t section);
> static subpage_t *subpage_init(AddressSpace *as, hwaddr base);
> -static void destroy_page_desc(uint16_t section_index)
> -{
> - MemoryRegionSection *section = &phys_sections[section_index];
> - MemoryRegion *mr = section->mr;
> -
> - if (mr->subpage) {
> - subpage_t *subpage = container_of(mr, subpage_t, iomem);
> - memory_region_destroy(&subpage->iomem);
> - g_free(subpage);
> - }
> -}
>
> static void destroy_l2_mapping(PhysPageEntry *lp, unsigned level)
> {
> @@ -787,8 +776,6 @@ static void destroy_l2_mapping(PhysPageEntry *lp, unsigned level)
> for (i = 0; i < L2_SIZE; ++i) {
> if (!p[i].is_leaf) {
> destroy_l2_mapping(&p[i], level - 1);
> - } else {
> - destroy_page_desc(p[i].ptr);
> }
> }
> lp->is_leaf = 0;
> @@ -818,9 +805,21 @@ static uint16_t phys_section_add(MemoryRegionSection *section)
> return phys_sections_nb++;
> }
>
> +static void phys_section_destroy(MemoryRegion *mr)
> +{
> + if (mr->subpage) {
> + subpage_t *subpage = container_of(mr, subpage_t, iomem);
> + memory_region_destroy(&subpage->iomem);
> + g_free(subpage);
> + }
> +}
> +
> static void phys_sections_clear(void)
> {
> - phys_sections_nb = 0;
> + while (phys_sections_nb > 0) {
> + MemoryRegionSection *section = &phys_sections[--phys_sections_nb];
> + phys_section_destroy(section->mr);
> + }
> }
>
> static void register_subpage(AddressSpaceDispatch *d, MemoryRegionSection *section)
>
--
Siemens AG, Corporate Technology, CT RTC ITP SES-DE
Corporate Competence Center Embedded Linux
next prev parent reply other threads:[~2013-07-01 14:14 UTC|newest]
Thread overview: 42+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-06-28 16:58 [Qemu-devel] [PATCH v2 00/11] Memory patches, part 4: region ownership Paolo Bonzini
2013-06-28 16:58 ` [Qemu-devel] [PATCH v2 01/11] memory: add owner argument to initialization functions Paolo Bonzini
2013-07-01 23:16 ` Andreas Färber
2013-07-01 23:20 ` Andreas Färber
2013-06-28 16:58 ` [Qemu-devel] [PATCH v2 02/11] memory: destroy phys_sections one by one Paolo Bonzini
2013-07-01 14:14 ` Jan Kiszka [this message]
2013-07-01 14:32 ` Paolo Bonzini
2013-06-28 16:58 ` [Qemu-devel] [PATCH v2 03/11] exec: simplify destruction of the phys map Paolo Bonzini
2013-07-01 14:23 ` Jan Kiszka
2013-07-01 14:33 ` Paolo Bonzini
2013-06-28 16:58 ` [Qemu-devel] [PATCH v2 04/11] memory: add getter for owner Paolo Bonzini
2013-07-01 14:24 ` Jan Kiszka
2013-07-01 14:35 ` Paolo Bonzini
2013-06-28 16:58 ` [Qemu-devel] [PATCH v2 05/11] memory: add ref/unref Paolo Bonzini
2013-07-01 14:29 ` Jan Kiszka
2013-07-01 14:38 ` Paolo Bonzini
2013-06-28 16:58 ` [Qemu-devel] [PATCH v2 06/11] memory: add ref/unref calls Paolo Bonzini
2013-07-01 18:33 ` Jan Kiszka
2013-07-02 6:42 ` Paolo Bonzini
2013-07-02 7:11 ` Jan Kiszka
2013-07-02 8:18 ` Paolo Bonzini
2013-07-02 8:36 ` Jan Kiszka
2013-07-02 9:28 ` Paolo Bonzini
2013-07-02 9:31 ` Jan Kiszka
2013-07-02 9:57 ` Paolo Bonzini
2013-06-28 16:58 ` [Qemu-devel] [PATCH v2 07/11] exec: check MRU in qemu_ram_addr_from_host Paolo Bonzini
2013-07-01 18:33 ` Jan Kiszka
2013-07-01 20:48 ` Paolo Bonzini
2013-07-02 7:09 ` Jan Kiszka
2013-07-02 7:52 ` Paolo Bonzini
2013-06-28 16:58 ` [Qemu-devel] [PATCH v2 08/11] exec: move qemu_ram_addr_from_host_nofail to cputlb.c Paolo Bonzini
2013-07-01 18:34 ` Jan Kiszka
2013-06-28 16:58 ` [Qemu-devel] [PATCH v2 09/11] memory: return MemoryRegion from qemu_ram_addr_from_host Paolo Bonzini
2013-07-01 18:34 ` Jan Kiszka
2013-06-28 16:58 ` [Qemu-devel] [PATCH v2 10/11] exec: reorganize address_space_map Paolo Bonzini
2013-07-01 18:34 ` Jan Kiszka
2013-07-01 20:44 ` Paolo Bonzini
2013-07-02 7:08 ` Jan Kiszka
2013-06-28 16:58 ` [Qemu-devel] [PATCH v2 11/11] memory: ref/unref memory across address_space_map/unmap Paolo Bonzini
2013-07-01 18:37 ` Jan Kiszka
2013-07-01 8:43 ` [Qemu-devel] [PATCH v2 00/11] Memory patches, part 4: region ownership Jan Kiszka
2013-07-01 9:04 ` Jan Kiszka
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=51D18EA9.8000400@siemens.com \
--to=jan.kiszka@siemens.com \
--cc=pbonzini@redhat.com \
--cc=peter.maydell@linaro.org \
--cc=qemu-devel@nongnu.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.