From mboxrd@z Thu Jan 1 00:00:00 1970 From: Julien Grall Subject: [PATCH V3] xen: Check if the range is valid in init_domheap_pages Date: Wed, 13 Nov 2013 13:37:50 +0000 Message-ID: <1384349870-4256-1-git-send-email-julien.grall@linaro.org> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Return-path: Received: from mail6.bemta4.messagelabs.com ([85.158.143.247]) by lists.xen.org with esmtp (Exim 4.72) (envelope-from ) id 1Vgadn-0000Ws-NH for xen-devel@lists.xenproject.org; Wed, 13 Nov 2013 13:37:55 +0000 Received: by mail-wg0-f42.google.com with SMTP id k14so4743895wgh.5 for ; Wed, 13 Nov 2013 05:37:54 -0800 (PST) List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xen.org Errors-To: xen-devel-bounces@lists.xen.org To: xen-devel@lists.xenproject.org Cc: Keir Fraser , ian.campbell@citrix.com, stefano.stabellini@eu.citrix.com, Julien Grall , tim@xen.org, Jan Beulich , patches@linaro.org List-Id: xen-devel@lists.xenproject.org On ARM, when an initrd is given to xen by U-boot, it will reserve the memory in the device tree. In this case, when xen decides to free unused memory, dt_unreserved_regions will call init_domheap_pages with the start and the end of range equals. But the latter assumes that (start > end), if not Xen will hang because the number of pages is equals to (unsigned)-1. Signed-off-by: Julien Grall CC: Keir Fraser CC: Jan Beulich --- Changes in v3: - Invert the check Changes in v2: - Change commit title - Move the check in init_domheap_pages --- xen/common/page_alloc.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/xen/common/page_alloc.c b/xen/common/page_alloc.c index 4c17fbd..0701333 100644 --- a/xen/common/page_alloc.c +++ b/xen/common/page_alloc.c @@ -1429,6 +1429,9 @@ void init_domheap_pages(paddr_t ps, paddr_t pe) smfn = round_pgup(ps) >> PAGE_SHIFT; emfn = round_pgdown(pe) >> PAGE_SHIFT; + if ( emfn <= smfn ) + return; + init_heap_pages(mfn_to_page(smfn), emfn - smfn); } -- 1.8.3.1