Julien Grall
2013-Nov-12 21:42 UTC
[PATCH] xen/arm: Don''t call init_domheap_page with an empty range
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_page 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 <julien.grall@linaro.org> --- xen/arch/arm/setup.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/xen/arch/arm/setup.c b/xen/arch/arm/setup.c index 1081b43..5794a03 100644 --- a/xen/arch/arm/setup.c +++ b/xen/arch/arm/setup.c @@ -173,7 +173,8 @@ static void dt_unreserved_regions(paddr_t s, paddr_t e, } } - cb(s, e); + if ( s != e ) + cb(s, e); } void __init discard_initial_modules(void) -- 1.8.3.1
Ian Campbell
2013-Nov-13 10:45 UTC
Re: [PATCH] xen/arm: Don''t call init_domheap_page with an empty range
On Tue, 2013-11-12 at 21:42 +0000, Julien Grall wrote:> 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_page 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.init_xenheap_pages starts with "if (pe<=ps) return". I think init_domheap_pages usefully do the same. If we are to fix this in dt_unreserved_regions it should be with < or whatever not !=.> > Signed-off-by: Julien Grall <julien.grall@linaro.org> > --- > xen/arch/arm/setup.c | 3 ++- > 1 file changed, 2 insertions(+), 1 deletion(-) > > diff --git a/xen/arch/arm/setup.c b/xen/arch/arm/setup.c > index 1081b43..5794a03 100644 > --- a/xen/arch/arm/setup.c > +++ b/xen/arch/arm/setup.c > @@ -173,7 +173,8 @@ static void dt_unreserved_regions(paddr_t s, paddr_t e, > } > } > > - cb(s, e); > + if ( s != e ) > + cb(s, e); > } > > void __init discard_initial_modules(void)
Julien Grall
2013-Nov-13 12:59 UTC
Re: [PATCH] xen/arm: Don''t call init_domheap_page with an empty range
On 11/13/2013 10:45 AM, Ian Campbell wrote:> On Tue, 2013-11-12 at 21:42 +0000, Julien Grall wrote: >> 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_page 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. > > init_xenheap_pages starts with "if (pe<=ps) return". I think > init_domheap_pages usefully do the same.Actually, init_domheap_pages doesn''t contain this fix. I will rework this patch to move the check in this function. -- Julien Grall
Ian Campbell
2013-Nov-13 13:09 UTC
Re: [PATCH] xen/arm: Don''t call init_domheap_page with an empty range
On Wed, 2013-11-13 at 12:59 +0000, Julien Grall wrote:> > On 11/13/2013 10:45 AM, Ian Campbell wrote: > > On Tue, 2013-11-12 at 21:42 +0000, Julien Grall wrote: > >> 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_page 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. > > > > init_xenheap_pages starts with "if (pe<=ps) return". I think > > init_domheap_pages usefully do the same.oops: ^could> Actually, init_domheap_pages doesn''t contain this fix.Yeah, I missed a word out, sorry!>I will rework this patch to move the check in this function.Thanks! Ian.