From: Andrea Arcangeli Date: Wed, 24 Aug 2011 23:47:14 +0000 (+1000) Subject: Using "- 1" relies on the old_end to be page aligned and PAGE_SIZE > 1, X-Git-Tag: next-20110927~1^2~58 X-Git-Url: https://git.karo-electronics.de/?a=commitdiff_plain;h=0585fea49c20d8bd8622f4dd72c872f7f7b56ff6;p=karo-tx-linux.git Using "- 1" relies on the old_end to be page aligned and PAGE_SIZE > 1, those are reasonable requirements but the check remains obscure and it looks more like an off by one error than an overflow check. This I feel will improve readability. Signed-off-by: Andrea Arcangeli Acked-by: Johannes Weiner Acked-by: Mel Gorman Acked-by: Rik van Riel Cc: Hugh Dickins Signed-off-by: Andrew Morton --- diff --git a/mm/mremap.c b/mm/mremap.c index 506fa44403df..195e866568e0 100644 --- a/mm/mremap.c +++ b/mm/mremap.c @@ -141,9 +141,10 @@ unsigned long move_page_tables(struct vm_area_struct *vma, for (; old_addr < old_end; old_addr += extent, new_addr += extent) { cond_resched(); next = (old_addr + PMD_SIZE) & PMD_MASK; - if (next - 1 > old_end) - next = old_end; + /* even if next overflowed, extent below will be ok */ extent = next - old_addr; + if (extent > old_end - old_addr) + extent = old_end - old_addr; old_pmd = get_old_pmd(vma->vm_mm, old_addr); if (!old_pmd) continue;