|
diff -urN linux-2.4.24/mm/mremap.c linux-2.4.25/mm/mremap.c
|
|
--- linux-2.4.24/mm/mremap.c 2004-01-05 05:53:56.000000000 -0800
|
|
+++ linux-2.4.25/mm/mremap.c 2004-02-18 05:36:32.000000000 -0800
|
|
@@ -258,16 +258,20 @@
|
|
if ((addr <= new_addr) && (addr+old_len) > new_addr)
|
|
goto out;
|
|
|
|
- do_munmap(current->mm, new_addr, new_len);
|
|
+ ret = do_munmap(current->mm, new_addr, new_len);
|
|
+ if (ret && new_len)
|
|
+ goto out;
|
|
}
|
|
|
|
/*
|
|
* Always allow a shrinking remap: that just unmaps
|
|
* the unnecessary pages..
|
|
*/
|
|
- ret = addr;
|
|
if (old_len >= new_len) {
|
|
- do_munmap(current->mm, addr+new_len, old_len - new_len);
|
|
+ ret = do_munmap(current->mm, addr+new_len, old_len - new_len);
|
|
+ if (ret && old_len != new_len)
|
|
+ goto out;
|
|
+ ret = addr;
|
|
if (!(flags & MREMAP_FIXED) || (new_addr == addr))
|
|
goto out;
|
|
}
|
|
|