aboutsummaryrefslogtreecommitdiffstats
path: root/ipc/shm.c
diff options
context:
space:
mode:
Diffstat (limited to 'ipc/shm.c')
-rw-r--r--ipc/shm.c9
1 files changed, 5 insertions, 4 deletions
diff --git a/ipc/shm.c b/ipc/shm.c
index 7d3bb22a9302..8644452f5c4c 100644
--- a/ipc/shm.c
+++ b/ipc/shm.c
@@ -623,7 +623,8 @@ static int shmctl_down(struct ipc_namespace *ns, int shmid, int cmd,
623 return -EFAULT; 623 return -EFAULT;
624 } 624 }
625 625
626 ipcp = ipcctl_pre_down(&shm_ids(ns), shmid, cmd, &shmid64.shm_perm, 0); 626 ipcp = ipcctl_pre_down(ns, &shm_ids(ns), shmid, cmd,
627 &shmid64.shm_perm, 0);
627 if (IS_ERR(ipcp)) 628 if (IS_ERR(ipcp))
628 return PTR_ERR(ipcp); 629 return PTR_ERR(ipcp);
629 630
@@ -737,7 +738,7 @@ SYSCALL_DEFINE3(shmctl, int, shmid, int, cmd, struct shmid_ds __user *, buf)
737 result = 0; 738 result = 0;
738 } 739 }
739 err = -EACCES; 740 err = -EACCES;
740 if (ipcperms (&shp->shm_perm, S_IRUGO)) 741 if (ipcperms(ns, &shp->shm_perm, S_IRUGO))
741 goto out_unlock; 742 goto out_unlock;
742 err = security_shm_shmctl(shp, cmd); 743 err = security_shm_shmctl(shp, cmd);
743 if (err) 744 if (err)
@@ -773,7 +774,7 @@ SYSCALL_DEFINE3(shmctl, int, shmid, int, cmd, struct shmid_ds __user *, buf)
773 774
774 audit_ipc_obj(&(shp->shm_perm)); 775 audit_ipc_obj(&(shp->shm_perm));
775 776
776 if (!capable(CAP_IPC_LOCK)) { 777 if (!ns_capable(ns->user_ns, CAP_IPC_LOCK)) {
777 uid_t euid = current_euid(); 778 uid_t euid = current_euid();
778 err = -EPERM; 779 err = -EPERM;
779 if (euid != shp->shm_perm.uid && 780 if (euid != shp->shm_perm.uid &&
@@ -888,7 +889,7 @@ long do_shmat(int shmid, char __user *shmaddr, int shmflg, ulong *raddr)
888 } 889 }
889 890
890 err = -EACCES; 891 err = -EACCES;
891 if (ipcperms(&shp->shm_perm, acc_mode)) 892 if (ipcperms(ns, &shp->shm_perm, acc_mode))
892 goto out_unlock; 893 goto out_unlock;
893 894
894 err = security_shm_shmat(shp, shmaddr, shmflg); 895 err = security_shm_shmat(shp, shmaddr, shmflg);