On Wed, 29 Oct 2014 17:09:32 +0100 , Ard Biesheuvel <ard.biesheuvel@xxxxxxxxxx> wrote: > Memory regions passed to early_init_dt_add_memory_arch() are rounded to > PAGE_SIZE by subtracting the size of the leading fractional page from > the 'size' argument. However, size being a u64 type, if its value is > sufficiently small, the subtraction wraps around and produces a bogus > value, potentially leading to crashes. > > Fix this by ignoring the memory range in such cases. > > Signed-off-by: Ard Biesheuvel <ard.biesheuvel@xxxxxxxxxx> Applied, thanks. g. > --- > drivers/of/fdt.c | 5 +++++ > 1 file changed, 5 insertions(+) > > diff --git a/drivers/of/fdt.c b/drivers/of/fdt.c > index d1ffca8b34ea..3b423f5b99c6 100644 > --- a/drivers/of/fdt.c > +++ b/drivers/of/fdt.c > @@ -930,6 +930,11 @@ void __init __weak early_init_dt_add_memory_arch(u64 base, u64 size) > const u64 phys_offset = __pa(PAGE_OFFSET); > > if (!PAGE_ALIGNED(base)) { > + if (size < PAGE_SIZE - (base & ~PAGE_MASK)) { > + pr_warn("Ignoring memory block 0x%llx - 0x%llx\n", > + base, base + size); > + return; > + } > size -= PAGE_SIZE - (base & ~PAGE_MASK); > base = PAGE_ALIGN(base); > } > -- > 1.8.3.2 > -- To unsubscribe from this list: send the line "unsubscribe devicetree" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html