Commit ebed4846 authored by Andrea Arcangeli's avatar Andrea Arcangeli Committed by Linus Torvalds

mremap: check for overflow using deltas

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: default avatarAndrea Arcangeli <aarcange@redhat.com>
Acked-by: default avatarJohannes Weiner <jweiner@redhat.com>
Acked-by: default avatarMel Gorman <mgorman@suse.de>
Acked-by: default avatarRik van Riel <riel@redhat.com>
Cc: Hugh Dickins <hughd@google.com>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent 66616720
...@@ -141,9 +141,10 @@ unsigned long move_page_tables(struct vm_area_struct *vma, ...@@ -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) { for (; old_addr < old_end; old_addr += extent, new_addr += extent) {
cond_resched(); cond_resched();
next = (old_addr + PMD_SIZE) & PMD_MASK; next = (old_addr + PMD_SIZE) & PMD_MASK;
if (next - 1 > old_end) /* even if next overflowed, extent below will be ok */
next = old_end;
extent = next - old_addr; 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); old_pmd = get_old_pmd(vma->vm_mm, old_addr);
if (!old_pmd) if (!old_pmd)
continue; continue;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment