diff options
Diffstat (limited to 'ipc/shm.c')
-rw-r--r-- | ipc/shm.c | 7 |
1 files changed, 6 insertions, 1 deletions
@@ -1036,6 +1036,10 @@ long do_shmat(int shmid, char __user *shmaddr, int shmflg, ulong *raddr) | |||
1036 | sfd->file = shp->shm_file; | 1036 | sfd->file = shp->shm_file; |
1037 | sfd->vm_ops = NULL; | 1037 | sfd->vm_ops = NULL; |
1038 | 1038 | ||
1039 | err = security_mmap_file(file, prot, flags); | ||
1040 | if (err) | ||
1041 | goto out_fput; | ||
1042 | |||
1039 | down_write(¤t->mm->mmap_sem); | 1043 | down_write(¤t->mm->mmap_sem); |
1040 | if (addr && !(shmflg & SHM_REMAP)) { | 1044 | if (addr && !(shmflg & SHM_REMAP)) { |
1041 | err = -EINVAL; | 1045 | err = -EINVAL; |
@@ -1050,7 +1054,7 @@ long do_shmat(int shmid, char __user *shmaddr, int shmflg, ulong *raddr) | |||
1050 | goto invalid; | 1054 | goto invalid; |
1051 | } | 1055 | } |
1052 | 1056 | ||
1053 | user_addr = do_mmap (file, addr, size, prot, flags, 0); | 1057 | user_addr = do_mmap_pgoff(file, addr, size, prot, flags, 0); |
1054 | *raddr = user_addr; | 1058 | *raddr = user_addr; |
1055 | err = 0; | 1059 | err = 0; |
1056 | if (IS_ERR_VALUE(user_addr)) | 1060 | if (IS_ERR_VALUE(user_addr)) |
@@ -1058,6 +1062,7 @@ long do_shmat(int shmid, char __user *shmaddr, int shmflg, ulong *raddr) | |||
1058 | invalid: | 1062 | invalid: |
1059 | up_write(¤t->mm->mmap_sem); | 1063 | up_write(¤t->mm->mmap_sem); |
1060 | 1064 | ||
1065 | out_fput: | ||
1061 | fput(file); | 1066 | fput(file); |
1062 | 1067 | ||
1063 | out_nattch: | 1068 | out_nattch: |