diff options
Diffstat (limited to 'ipc')
| -rw-r--r-- | ipc/msg.c | 8 | ||||
| -rw-r--r-- | ipc/sem.c | 5 | ||||
| -rw-r--r-- | ipc/shm.c | 4 |
3 files changed, 8 insertions, 9 deletions
| @@ -220,8 +220,7 @@ asmlinkage long sys_msgget (key_t key, int msgflg) | |||
| 220 | ret = -EEXIST; | 220 | ret = -EEXIST; |
| 221 | } else { | 221 | } else { |
| 222 | msq = msg_lock(id); | 222 | msq = msg_lock(id); |
| 223 | if(msq==NULL) | 223 | BUG_ON(msq==NULL); |
| 224 | BUG(); | ||
| 225 | if (ipcperms(&msq->q_perm, msgflg)) | 224 | if (ipcperms(&msq->q_perm, msgflg)) |
| 226 | ret = -EACCES; | 225 | ret = -EACCES; |
| 227 | else { | 226 | else { |
| @@ -429,8 +428,6 @@ asmlinkage long sys_msgctl (int msqid, int cmd, struct msqid_ds __user *buf) | |||
| 429 | return -EFAULT; | 428 | return -EFAULT; |
| 430 | if (copy_msqid_from_user (&setbuf, buf, version)) | 429 | if (copy_msqid_from_user (&setbuf, buf, version)) |
| 431 | return -EFAULT; | 430 | return -EFAULT; |
| 432 | if ((err = audit_ipc_perms(setbuf.qbytes, setbuf.uid, setbuf.gid, setbuf.mode))) | ||
| 433 | return err; | ||
| 434 | break; | 431 | break; |
| 435 | case IPC_RMID: | 432 | case IPC_RMID: |
| 436 | break; | 433 | break; |
| @@ -461,6 +458,9 @@ asmlinkage long sys_msgctl (int msqid, int cmd, struct msqid_ds __user *buf) | |||
| 461 | switch (cmd) { | 458 | switch (cmd) { |
| 462 | case IPC_SET: | 459 | case IPC_SET: |
| 463 | { | 460 | { |
| 461 | if ((err = audit_ipc_perms(setbuf.qbytes, setbuf.uid, setbuf.gid, setbuf.mode, ipcp))) | ||
| 462 | goto out_unlock_up; | ||
| 463 | |||
| 464 | err = -EPERM; | 464 | err = -EPERM; |
| 465 | if (setbuf.qbytes > msg_ctlmnb && !capable(CAP_SYS_RESOURCE)) | 465 | if (setbuf.qbytes > msg_ctlmnb && !capable(CAP_SYS_RESOURCE)) |
| 466 | goto out_unlock_up; | 466 | goto out_unlock_up; |
| @@ -809,8 +809,6 @@ static int semctl_down(int semid, int semnum, int cmd, int version, union semun | |||
| 809 | if(cmd == IPC_SET) { | 809 | if(cmd == IPC_SET) { |
| 810 | if(copy_semid_from_user (&setbuf, arg.buf, version)) | 810 | if(copy_semid_from_user (&setbuf, arg.buf, version)) |
| 811 | return -EFAULT; | 811 | return -EFAULT; |
| 812 | if ((err = audit_ipc_perms(0, setbuf.uid, setbuf.gid, setbuf.mode))) | ||
| 813 | return err; | ||
| 814 | } | 812 | } |
| 815 | sma = sem_lock(semid); | 813 | sma = sem_lock(semid); |
| 816 | if(sma==NULL) | 814 | if(sma==NULL) |
| @@ -821,7 +819,6 @@ static int semctl_down(int semid, int semnum, int cmd, int version, union semun | |||
| 821 | goto out_unlock; | 819 | goto out_unlock; |
| 822 | } | 820 | } |
| 823 | ipcp = &sma->sem_perm; | 821 | ipcp = &sma->sem_perm; |
| 824 | |||
| 825 | if (current->euid != ipcp->cuid && | 822 | if (current->euid != ipcp->cuid && |
| 826 | current->euid != ipcp->uid && !capable(CAP_SYS_ADMIN)) { | 823 | current->euid != ipcp->uid && !capable(CAP_SYS_ADMIN)) { |
| 827 | err=-EPERM; | 824 | err=-EPERM; |
| @@ -838,6 +835,8 @@ static int semctl_down(int semid, int semnum, int cmd, int version, union semun | |||
| 838 | err = 0; | 835 | err = 0; |
| 839 | break; | 836 | break; |
| 840 | case IPC_SET: | 837 | case IPC_SET: |
| 838 | if ((err = audit_ipc_perms(0, setbuf.uid, setbuf.gid, setbuf.mode, ipcp))) | ||
| 839 | goto out_unlock; | ||
| 841 | ipcp->uid = setbuf.uid; | 840 | ipcp->uid = setbuf.uid; |
| 842 | ipcp->gid = setbuf.gid; | 841 | ipcp->gid = setbuf.gid; |
| 843 | ipcp->mode = (ipcp->mode & ~S_IRWXUGO) | 842 | ipcp->mode = (ipcp->mode & ~S_IRWXUGO) |
| @@ -620,13 +620,13 @@ asmlinkage long sys_shmctl (int shmid, int cmd, struct shmid_ds __user *buf) | |||
| 620 | err = -EFAULT; | 620 | err = -EFAULT; |
| 621 | goto out; | 621 | goto out; |
| 622 | } | 622 | } |
| 623 | if ((err = audit_ipc_perms(0, setbuf.uid, setbuf.gid, setbuf.mode))) | ||
| 624 | return err; | ||
| 625 | down(&shm_ids.sem); | 623 | down(&shm_ids.sem); |
| 626 | shp = shm_lock(shmid); | 624 | shp = shm_lock(shmid); |
| 627 | err=-EINVAL; | 625 | err=-EINVAL; |
| 628 | if(shp==NULL) | 626 | if(shp==NULL) |
| 629 | goto out_up; | 627 | goto out_up; |
| 628 | if ((err = audit_ipc_perms(0, setbuf.uid, setbuf.gid, setbuf.mode, &(shp->shm_perm)))) | ||
| 629 | goto out_unlock_up; | ||
| 630 | err = shm_checkid(shp,shmid); | 630 | err = shm_checkid(shp,shmid); |
| 631 | if(err) | 631 | if(err) |
| 632 | goto out_unlock_up; | 632 | goto out_unlock_up; |
