[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[xen master] xen/arm: allocate_bank_memory: don't create memory banks of size zero



commit d8e1ed865ac4804c2ba98fc9ef1b53bfa8357f43
Author:     Stefano Stabellini <stefano.stabellini@xxxxxxxxxx>
AuthorDate: Wed Nov 10 12:55:55 2021 -0800
Commit:     Stefano Stabellini <stefano.stabellini@xxxxxxxxxx>
CommitDate: Thu Nov 11 10:35:13 2021 -0800

    xen/arm: allocate_bank_memory: don't create memory banks of size zero
    
    allocate_bank_memory can be called with a tot_size of zero, as an
    example see the implementation of allocate_memory which can call
    allocate_bank_memory with a tot_size of zero for the second memory bank.
    
    If tot_size == 0, don't create an empty memory bank, just return
    immediately without error. Otherwise a zero-size memory bank will be
    added to the domain device tree.
    
    Note that Linux is known to be able to cope with zero-size memory banks,
    and Xen more recently gained the ability to do so as well (5a37207df520
    "xen/arm: bootfdt: Ignore empty memory bank"). However, there might be
    other non-Linux OSes that are not able to cope with empty memory banks
    as well as Linux (and now Xen). It would be more robust to avoid
    zero-size memory banks unless required.
    
    Moreover, the code to find empty address regions in make_hypervisor_node
    in Xen is not able to cope with empty memory banks today and would
    result in a Xen crash. This is only a latent bug because
    make_hypervisor_node is only called for Dom0 at present and
    allocate_memory is only called for DomU at the moment. (But if
    make_hypervisor_node was to be called for a DomU, then the Xen crash
    would become manifest.)
    
    Fixes: f2931b4233ec ("xen/arm: introduce allocate_memory")
    Signed-off-by: Stefano Stabellini <stefano.stabellini@xxxxxxxxxx>
    Reviewed-by: Oleksandr Tyshchenko <oleksandr_tyshchenko@xxxxxxxx>
    Reviewed-by: Julien Grall <jgrall@xxxxxxxxxx>
    Release-Acked-by: Ian Jackson <iwj@xxxxxxxxxxxxxx>
---
 xen/arch/arm/domain_build.c | 8 ++++++++
 1 file changed, 8 insertions(+)

diff --git a/xen/arch/arm/domain_build.c b/xen/arch/arm/domain_build.c
index dafbc13962..19487c79da 100644
--- a/xen/arch/arm/domain_build.c
+++ b/xen/arch/arm/domain_build.c
@@ -395,6 +395,14 @@ static bool __init allocate_bank_memory(struct domain *d,
     struct membank *bank;
     unsigned int max_order = ~0;
 
+    /*
+     * allocate_bank_memory can be called with a tot_size of zero for
+     * the second memory bank. It is not an error and we can safely
+     * avoid creating a zero-size memory bank.
+     */
+    if ( tot_size == 0 )
+        return true;
+
     bank = &kinfo->mem.bank[kinfo->mem.nr_banks];
     bank->start = gfn_to_gaddr(sgfn);
     bank->size = tot_size;
--
generated by git-patchbot for /home/xen/git/xen.git#master



 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.