|
@@ -94,11 +94,12 @@ unsigned long arch_get_unmapped_area(struct file *filp, unsigned long addr,
|
|
|
{
|
|
|
if (len > TASK_SIZE)
|
|
|
return -ENOMEM;
|
|
|
- /* Might want to check for cache aliasing issues for MAP_FIXED case
|
|
|
- * like ARM or MIPS ??? --BenH.
|
|
|
- */
|
|
|
- if (flags & MAP_FIXED)
|
|
|
+ if (flags & MAP_FIXED) {
|
|
|
+ if ((flags & MAP_SHARED) &&
|
|
|
+ (addr - (pgoff << PAGE_SHIFT)) & (SHMLBA - 1))
|
|
|
+ return -EINVAL;
|
|
|
return addr;
|
|
|
+ }
|
|
|
if (!addr)
|
|
|
addr = TASK_UNMAPPED_BASE;
|
|
|
|