--- linux/mm/filemap.c +++ linux/mm/filemap.c 2002/03/03 17:47:15 @@ -2197,23 +2197,26 @@ goto out; if (flags & ~(MS_ASYNC | MS_INVALIDATE | MS_SYNC)) goto out; + if ((flags & MS_ASYNC) && (flags & MS_SYNC)) + goto out; + error = 0; if (end == start) goto out; /* * If the interval [start,end) covers some unmapped address ranges, - * just ignore them, but return -EFAULT at the end. + * just ignore them, but return -ENOMEM at the end. */ vma = find_vma(current->mm, start); unmapped_error = 0; for (;;) { /* Still start < end. */ - error = -EFAULT; + error = -ENOMEM; if (!vma) goto out; /* Here start < vma->vm_end. */ if (start < vma->vm_start) { - unmapped_error = -EFAULT; + unmapped_error = -ENOMEM; start = vma->vm_start; } /* Here vma->vm_start <= start < vma->vm_end. */ --- linux/mm/mprotect.c +++ linux/mm/mprotect.c 2002/03/03 18:00:38 @@ -286,7 +286,7 @@ down_write(¤t->mm->mmap_sem); vma = find_vma_prev(current->mm, start, &prev); - error = -EFAULT; + error = -ENOMEM; if (!vma || vma->vm_start > start) goto out; @@ -333,7 +333,7 @@ nstart = tmp; vma = next; if (!vma || vma->vm_start != nstart) { - error = -EFAULT; + error = -ENOMEM; goto out; } }