From: Anders Berg <anders.b...@lsi.com>

  commit 36418c516b31bff4ff949c7c618430a1a514debe upstream

  With !HIGHMEM, sanity_check_meminfo checks for banks that completely or
  partially overlap the vmalloc region. The test for partial overlap checks
  __va(bank->start + bank->size) > vmalloc_min. This is not appropriate if
  there is a non-linear translation between virtual and physical addresses,
  as bank->start + bank->size is actually in the bank following the one being
  interrogated.

  In most cases, even when using SPARSEMEM, this is not problematic as the
  subsequent bank will start at a higher va than the one in question. However
  if the physical to virtual address conversion is not monotonic increasing,
  the incorrect test could result in a bank not being truncated when it
  should be.

  This patch ensures we perform the va-pa conversion on memory from the
  bank we are interested in, not the following one.

  Reported-by: ??? (Steve) <zhanzhe...@gmail.com>
  Signed-off-by: Jonathan Austin <jonathan.aus...@arm.com>
  Acked-by: Nicolas Pitre <n...@linaro.org>
  Signed-off-by: Russell King <rmk+ker...@arm.linux.org.uk>arm/mmu:
       Fix detection of vmalloc area overlap
  Signed-off-by: Anders Berg <anders.b...@lsi.com>
---
 arch/arm/mm/mmu.c |    4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/arch/arm/mm/mmu.c b/arch/arm/mm/mmu.c
index 0acc475..571102e 100644
--- a/arch/arm/mm/mmu.c
+++ b/arch/arm/mm/mmu.c
@@ -967,8 +967,8 @@ void __init sanity_check_meminfo(void)
                 * Check whether this memory bank would partially overlap
                 * the vmalloc area.
                 */
-               if (__va(bank->start + bank->size) > vmalloc_min ||
-                   __va(bank->start + bank->size) < __va(bank->start)) {
+               if (__va(bank->start + bank->size - 1) >= vmalloc_min ||
+                   __va(bank->start + bank->size - 1) <= __va(bank->start)) {
                        unsigned long newsize = vmalloc_min - __va(bank->start);
                        printk(KERN_NOTICE "Truncating RAM at %.8llx-%.8llx "
                               "to -%.8llx (vmalloc region overlap).\n",
-- 
1.7.9.5

-- 
_______________________________________________
linux-yocto mailing list
linux-yocto@yoctoproject.org
https://lists.yoctoproject.org/listinfo/linux-yocto

Reply via email to