diff options
Diffstat (limited to 'mm/nommu.c')
-rw-r--r-- | mm/nommu.c | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/mm/nommu.c b/mm/nommu.c index 8687973462bb..6f9248f89bde 100644 --- a/mm/nommu.c +++ b/mm/nommu.c | |||
@@ -1398,6 +1398,31 @@ error_getting_region: | |||
1398 | } | 1398 | } |
1399 | EXPORT_SYMBOL(do_mmap_pgoff); | 1399 | EXPORT_SYMBOL(do_mmap_pgoff); |
1400 | 1400 | ||
1401 | SYSCALL_DEFINE6(mmap_pgoff, unsigned long, addr, unsigned long, len, | ||
1402 | unsigned long, prot, unsigned long, flags, | ||
1403 | unsigned long, fd, unsigned long, pgoff) | ||
1404 | { | ||
1405 | struct file *file = NULL; | ||
1406 | unsigned long retval = -EBADF; | ||
1407 | |||
1408 | if (!(flags & MAP_ANONYMOUS)) { | ||
1409 | file = fget(fd); | ||
1410 | if (!file) | ||
1411 | goto out; | ||
1412 | } | ||
1413 | |||
1414 | flags &= ~(MAP_EXECUTABLE | MAP_DENYWRITE); | ||
1415 | |||
1416 | down_write(¤t->mm->mmap_sem); | ||
1417 | retval = do_mmap_pgoff(file, addr, len, prot, flags, pgoff); | ||
1418 | up_write(¤t->mm->mmap_sem); | ||
1419 | |||
1420 | if (file) | ||
1421 | fput(file); | ||
1422 | out: | ||
1423 | return retval; | ||
1424 | } | ||
1425 | |||
1401 | /* | 1426 | /* |
1402 | * split a vma into two pieces at address 'addr', a new vma is allocated either | 1427 | * split a vma into two pieces at address 'addr', a new vma is allocated either |
1403 | * for the first part or the tail. | 1428 | * for the first part or the tail. |