|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [RFC PATCH 58/84] x86/mm: fix leaks in map_xen_pagetable.
On Thu, Sep 26, 2019 at 10:46:21AM +0100, hongyax@xxxxxxxxxx wrote:
> From: Hongyan Xia <hongyax@xxxxxxxxxx>
>
> Not unmapping pages after map_xen_pagetable can leak the virtual address
> space over time.
I understand this part, but ...
> Also this fix makes vmap_to_mfn non-trivial to be a
> macro. There might be better options but move it into vmap.c for now.
>
... not this part.
> Signed-off-by: Hongyan Xia <hongyax@xxxxxxxxxx>
> ---
> xen/arch/x86/mm.c | 5 +----
> xen/common/vmap.c | 13 +++++++++++++
> xen/include/asm-arm/mm.h | 2 --
> xen/include/asm-x86/page.h | 2 --
> xen/include/xen/vmap.h | 3 +++
> 5 files changed, 17 insertions(+), 8 deletions(-)
>
> diff --git a/xen/arch/x86/mm.c b/xen/arch/x86/mm.c
> index b2b2edbed1..145c5ab47c 100644
> --- a/xen/arch/x86/mm.c
> +++ b/xen/arch/x86/mm.c
> @@ -5160,6 +5160,7 @@ int map_pages_to_xen(
> !(l2e_get_flags(ol2e) & _PAGE_PSE) )
> free_xen_pagetable(l2e_get_mfn(ol2e));
> }
> + UNMAP_XEN_PAGETABLE(l2t);
This is presumably the issue you try to fix.
> free_xen_pagetable(l2t_mfn);
> }
> }
> @@ -5225,7 +5226,6 @@ int map_pages_to_xen(
> l3e_write_atomic(pl3e,
> l3e_from_mfn(l2t_mfn, __PAGE_HYPERVISOR));
> UNMAP_XEN_PAGETABLE(l2t);
> - l2t = NULL;
This and similar changes below are irrelevant to the bug your try to
fix.
UNMAP_XEN_PAGETABLE already sets lXt to NULL. Deleting these two lines
are fine, but they should be folded into one of the previous patches
where UNMAP_XEN_PAGETABLE was used in this function.
> }
> if ( locking )
> spin_unlock(&map_pgdir_lock);
> @@ -5346,7 +5346,6 @@ int map_pages_to_xen(
> l2e_write_atomic(pl2e, l2e_from_mfn(l1t_mfn,
> __PAGE_HYPERVISOR));
> UNMAP_XEN_PAGETABLE(l1t);
> - l1t = NULL;
> }
> if ( locking )
> spin_unlock(&map_pgdir_lock);
> @@ -5589,7 +5588,6 @@ int modify_xen_mappings(unsigned long s, unsigned long
> e, unsigned int nf)
> {
> l3e_write_atomic(pl3e, l3e_from_mfn(mfn, __PAGE_HYPERVISOR));
> UNMAP_XEN_PAGETABLE(l2t);
> - l2t = NULL;
> }
> if ( locking )
> spin_unlock(&map_pgdir_lock);
> @@ -5657,7 +5655,6 @@ int modify_xen_mappings(unsigned long s, unsigned long
> e, unsigned int nf)
> l2e_write_atomic(pl2e, l2e_from_mfn(mfn,
> __PAGE_HYPERVISOR));
> UNMAP_XEN_PAGETABLE(l1t);
> - l1t = NULL;
> }
> if ( locking )
> spin_unlock(&map_pgdir_lock);
> diff --git a/xen/common/vmap.c b/xen/common/vmap.c
> index faebc1ddf1..fcdb8495c8 100644
> --- a/xen/common/vmap.c
> +++ b/xen/common/vmap.c
I fail to see why you need to change vmap to fix a leak somewhere else.
I guess I will need to wait for your branch to have a closer look.
Wei.
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxxx
https://lists.xenproject.org/mailman/listinfo/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |