diff --git a/mm/mremap.c b/mm/mremap.c index 614b4fffed1d..6c3df022ff64 100644 --- a/mm/mremap.c +++ b/mm/mremap.c @@ -243,6 +243,9 @@ static inline void try_to_align_start(unsigned long *len, struct vm_area_struct *old, unsigned long *old_addr, struct vm_area_struct *new, unsigned long *new_addr) { + if (*old_addr > old->vm_start) + return; + if (ADDR_BEFORE_PREV(*old_addr & PMD_MASK, old)) return; @@ -270,6 +273,9 @@ static inline void try_to_align_end(unsigned long *len, struct vm_area_struct *old, unsigned long *old_addr, struct vm_area_struct *new, unsigned long *new_addr) { + if (*old_addr < old->vm_end) + return; + if (ADDR_AFTER_NEXT(*old_addr + *len, old)) return;