diff options
| -rw-r--r-- | arch/mips/kernel/syscall.c | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/arch/mips/kernel/syscall.c b/arch/mips/kernel/syscall.c index b95fe93dd646..af1bdc897488 100644 --- a/arch/mips/kernel/syscall.c +++ b/arch/mips/kernel/syscall.c | |||
| @@ -73,7 +73,14 @@ unsigned long arch_get_unmapped_area(struct file *filp, unsigned long addr, | |||
| 73 | 73 | ||
| 74 | task_size = STACK_TOP; | 74 | task_size = STACK_TOP; |
| 75 | 75 | ||
| 76 | if (len > task_size) | ||
| 77 | return -ENOMEM; | ||
| 78 | |||
| 76 | if (flags & MAP_FIXED) { | 79 | if (flags & MAP_FIXED) { |
| 80 | /* Even MAP_FIXED mappings must reside within task_size. */ | ||
| 81 | if (task_size - len < addr) | ||
| 82 | return -EINVAL; | ||
| 83 | |||
| 77 | /* | 84 | /* |
| 78 | * We do not accept a shared mapping if it would violate | 85 | * We do not accept a shared mapping if it would violate |
| 79 | * cache aliasing constraints. | 86 | * cache aliasing constraints. |
| @@ -83,8 +90,6 @@ unsigned long arch_get_unmapped_area(struct file *filp, unsigned long addr, | |||
| 83 | return addr; | 90 | return addr; |
| 84 | } | 91 | } |
| 85 | 92 | ||
| 86 | if (len > task_size) | ||
| 87 | return -ENOMEM; | ||
| 88 | do_color_align = 0; | 93 | do_color_align = 0; |
| 89 | if (filp || (flags & MAP_SHARED)) | 94 | if (filp || (flags & MAP_SHARED)) |
| 90 | do_color_align = 1; | 95 | do_color_align = 1; |
