diff options
Diffstat (limited to 'mm/nommu.c')
-rw-r--r-- | mm/nommu.c | 35 |
1 files changed, 3 insertions, 32 deletions
diff --git a/mm/nommu.c b/mm/nommu.c index bb8f4f004a82..c4acfbc09972 100644 --- a/mm/nommu.c +++ b/mm/nommu.c | |||
@@ -889,7 +889,6 @@ static int validate_mmap_request(struct file *file, | |||
889 | unsigned long *_capabilities) | 889 | unsigned long *_capabilities) |
890 | { | 890 | { |
891 | unsigned long capabilities, rlen; | 891 | unsigned long capabilities, rlen; |
892 | unsigned long reqprot = prot; | ||
893 | int ret; | 892 | int ret; |
894 | 893 | ||
895 | /* do the simple checks first */ | 894 | /* do the simple checks first */ |
@@ -1047,7 +1046,7 @@ static int validate_mmap_request(struct file *file, | |||
1047 | } | 1046 | } |
1048 | 1047 | ||
1049 | /* allow the security API to have its say */ | 1048 | /* allow the security API to have its say */ |
1050 | ret = security_file_mmap(file, reqprot, prot, flags, addr, 0); | 1049 | ret = security_mmap_addr(addr); |
1051 | if (ret < 0) | 1050 | if (ret < 0) |
1052 | return ret; | 1051 | return ret; |
1053 | 1052 | ||
@@ -1233,7 +1232,7 @@ enomem: | |||
1233 | /* | 1232 | /* |
1234 | * handle mapping creation for uClinux | 1233 | * handle mapping creation for uClinux |
1235 | */ | 1234 | */ |
1236 | static unsigned long do_mmap_pgoff(struct file *file, | 1235 | unsigned long do_mmap_pgoff(struct file *file, |
1237 | unsigned long addr, | 1236 | unsigned long addr, |
1238 | unsigned long len, | 1237 | unsigned long len, |
1239 | unsigned long prot, | 1238 | unsigned long prot, |
@@ -1471,32 +1470,6 @@ error_getting_region: | |||
1471 | return -ENOMEM; | 1470 | return -ENOMEM; |
1472 | } | 1471 | } |
1473 | 1472 | ||
1474 | unsigned long do_mmap(struct file *file, unsigned long addr, | ||
1475 | unsigned long len, unsigned long prot, | ||
1476 | unsigned long flag, unsigned long offset) | ||
1477 | { | ||
1478 | if (unlikely(offset + PAGE_ALIGN(len) < offset)) | ||
1479 | return -EINVAL; | ||
1480 | if (unlikely(offset & ~PAGE_MASK)) | ||
1481 | return -EINVAL; | ||
1482 | return do_mmap_pgoff(file, addr, len, prot, flag, offset >> PAGE_SHIFT); | ||
1483 | } | ||
1484 | EXPORT_SYMBOL(do_mmap); | ||
1485 | |||
1486 | unsigned long vm_mmap(struct file *file, unsigned long addr, | ||
1487 | unsigned long len, unsigned long prot, | ||
1488 | unsigned long flag, unsigned long offset) | ||
1489 | { | ||
1490 | unsigned long ret; | ||
1491 | struct mm_struct *mm = current->mm; | ||
1492 | |||
1493 | down_write(&mm->mmap_sem); | ||
1494 | ret = do_mmap(file, addr, len, prot, flag, offset); | ||
1495 | up_write(&mm->mmap_sem); | ||
1496 | return ret; | ||
1497 | } | ||
1498 | EXPORT_SYMBOL(vm_mmap); | ||
1499 | |||
1500 | SYSCALL_DEFINE6(mmap_pgoff, unsigned long, addr, unsigned long, len, | 1473 | SYSCALL_DEFINE6(mmap_pgoff, unsigned long, addr, unsigned long, len, |
1501 | unsigned long, prot, unsigned long, flags, | 1474 | unsigned long, prot, unsigned long, flags, |
1502 | unsigned long, fd, unsigned long, pgoff) | 1475 | unsigned long, fd, unsigned long, pgoff) |
@@ -1513,9 +1486,7 @@ SYSCALL_DEFINE6(mmap_pgoff, unsigned long, addr, unsigned long, len, | |||
1513 | 1486 | ||
1514 | flags &= ~(MAP_EXECUTABLE | MAP_DENYWRITE); | 1487 | flags &= ~(MAP_EXECUTABLE | MAP_DENYWRITE); |
1515 | 1488 | ||
1516 | down_write(¤t->mm->mmap_sem); | 1489 | ret = vm_mmap_pgoff(file, addr, len, prot, flags, pgoff); |
1517 | retval = do_mmap_pgoff(file, addr, len, prot, flags, pgoff); | ||
1518 | up_write(¤t->mm->mmap_sem); | ||
1519 | 1490 | ||
1520 | if (file) | 1491 | if (file) |
1521 | fput(file); | 1492 | fput(file); |