|
@@ -889,7 +889,6 @@ static int validate_mmap_request(struct file *file,
|
|
unsigned long *_capabilities)
|
|
unsigned long *_capabilities)
|
|
{
|
|
{
|
|
unsigned long capabilities, rlen;
|
|
unsigned long capabilities, rlen;
|
|
- unsigned long reqprot = prot;
|
|
|
|
int ret;
|
|
int ret;
|
|
|
|
|
|
/* do the simple checks first */
|
|
/* do the simple checks first */
|
|
@@ -1048,9 +1047,6 @@ static int validate_mmap_request(struct file *file,
|
|
|
|
|
|
/* allow the security API to have its say */
|
|
/* allow the security API to have its say */
|
|
ret = security_mmap_addr(addr);
|
|
ret = security_mmap_addr(addr);
|
|
- if (ret < 0)
|
|
|
|
- return ret;
|
|
|
|
- ret = security_mmap_file(file, reqprot, prot, flags);
|
|
|
|
if (ret < 0)
|
|
if (ret < 0)
|
|
return ret;
|
|
return ret;
|
|
|
|
|
|
@@ -1492,9 +1488,12 @@ unsigned long vm_mmap(struct file *file, unsigned long addr,
|
|
unsigned long ret;
|
|
unsigned long ret;
|
|
struct mm_struct *mm = current->mm;
|
|
struct mm_struct *mm = current->mm;
|
|
|
|
|
|
- down_write(&mm->mmap_sem);
|
|
|
|
- ret = do_mmap(file, addr, len, prot, flag, offset);
|
|
|
|
- up_write(&mm->mmap_sem);
|
|
|
|
|
|
+ ret = security_mmap_file(file, prot, flag);
|
|
|
|
+ if (!ret) {
|
|
|
|
+ down_write(&mm->mmap_sem);
|
|
|
|
+ ret = do_mmap(file, addr, len, prot, flag, offset);
|
|
|
|
+ up_write(&mm->mmap_sem);
|
|
|
|
+ }
|
|
return ret;
|
|
return ret;
|
|
}
|
|
}
|
|
EXPORT_SYMBOL(vm_mmap);
|
|
EXPORT_SYMBOL(vm_mmap);
|
|
@@ -1515,9 +1514,12 @@ SYSCALL_DEFINE6(mmap_pgoff, unsigned long, addr, unsigned long, len,
|
|
|
|
|
|
flags &= ~(MAP_EXECUTABLE | MAP_DENYWRITE);
|
|
flags &= ~(MAP_EXECUTABLE | MAP_DENYWRITE);
|
|
|
|
|
|
- down_write(¤t->mm->mmap_sem);
|
|
|
|
- retval = do_mmap_pgoff(file, addr, len, prot, flags, pgoff);
|
|
|
|
- up_write(¤t->mm->mmap_sem);
|
|
|
|
|
|
+ ret = security_mmap_file(file, prot, flags);
|
|
|
|
+ if (!ret) {
|
|
|
|
+ down_write(¤t->mm->mmap_sem);
|
|
|
|
+ retval = do_mmap_pgoff(file, addr, len, prot, flags, pgoff);
|
|
|
|
+ up_write(¤t->mm->mmap_sem);
|
|
|
|
+ }
|
|
|
|
|
|
if (file)
|
|
if (file)
|
|
fput(file);
|
|
fput(file);
|