mmap: return -ENOMEM if speicified range is out of range
This commit is contained in:
@ -1260,11 +1260,7 @@ SYSCALL_DECLARE(mmap)
|
|||||||
addr = (flags & MAP_FIXED)? addr0: VALID_DUMMY_ADDR;
|
addr = (flags & MAP_FIXED)? addr0: VALID_DUMMY_ADDR;
|
||||||
len = (len0 + PAGE_SIZE - 1) & PAGE_MASK;
|
len = (len0 + PAGE_SIZE - 1) & PAGE_MASK;
|
||||||
if ((addr & (PAGE_SIZE - 1))
|
if ((addr & (PAGE_SIZE - 1))
|
||||||
|| (addr < region->user_start)
|
|
||||||
|| (region->user_end <= addr)
|
|
||||||
|| (len == 0)
|
|| (len == 0)
|
||||||
|| (len > (region->user_end - region->user_start))
|
|
||||||
|| ((region->user_end - len) < addr)
|
|
||||||
|| !(flags & (MAP_SHARED | MAP_PRIVATE))
|
|| !(flags & (MAP_SHARED | MAP_PRIVATE))
|
||||||
|| ((flags & MAP_SHARED) && (flags & MAP_PRIVATE))
|
|| ((flags & MAP_SHARED) && (flags & MAP_PRIVATE))
|
||||||
|| (off0 & (PAGE_SIZE - 1))) {
|
|| (off0 & (PAGE_SIZE - 1))) {
|
||||||
@ -1274,6 +1270,15 @@ SYSCALL_DECLARE(mmap)
|
|||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ((addr < region->user_start)
|
||||||
|
|| (region->user_end <= addr)
|
||||||
|
|| ((region->user_end - addr) < len)) {
|
||||||
|
ekprintf("sys_mmap(%lx,%lx,%x,%x,%x,%lx):ENOMEM\n",
|
||||||
|
addr0, len0, prot, flags, fd, off0);
|
||||||
|
error = -ENOMEM;
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
|
||||||
/* check not supported requests */
|
/* check not supported requests */
|
||||||
if ((flags & error_flags)
|
if ((flags & error_flags)
|
||||||
|| (flags & ~(supported_flags | ignored_flags))) {
|
|| (flags & ~(supported_flags | ignored_flags))) {
|
||||||
|
|||||||
Reference in New Issue
Block a user