]> git.karo-electronics.de Git - karo-tx-linux.git/blobdiff - mm/mremap.c
Using "- 1" relies on the old_end to be page aligned and PAGE_SIZE > 1,
[karo-tx-linux.git] / mm / mremap.c
index 506fa44403df5cc3215cb69ec2d1098a96bb7919..195e866568e04d312224f4a674e0873c46e3d2eb 100644 (file)
@@ -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;