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; |