diff options
Diffstat (limited to 'ipc/sem.c')
| -rw-r--r-- | ipc/sem.c | 11 |
1 files changed, 10 insertions, 1 deletions
| @@ -61,6 +61,9 @@ | |||
| 61 | * (c) 2001 Red Hat Inc <alan@redhat.com> | 61 | * (c) 2001 Red Hat Inc <alan@redhat.com> |
| 62 | * Lockless wakeup | 62 | * Lockless wakeup |
| 63 | * (c) 2003 Manfred Spraul <manfred@colorfullife.com> | 63 | * (c) 2003 Manfred Spraul <manfred@colorfullife.com> |
| 64 | * | ||
| 65 | * support for audit of ipc object properties and permission changes | ||
| 66 | * Dustin Kirkland <dustin.kirkland@us.ibm.com> | ||
| 64 | */ | 67 | */ |
| 65 | 68 | ||
| 66 | #include <linux/config.h> | 69 | #include <linux/config.h> |
| @@ -820,6 +823,11 @@ static int semctl_down(int semid, int semnum, int cmd, int version, union semun | |||
| 820 | goto out_unlock; | 823 | goto out_unlock; |
| 821 | } | 824 | } |
| 822 | ipcp = &sma->sem_perm; | 825 | ipcp = &sma->sem_perm; |
| 826 | |||
| 827 | err = audit_ipc_obj(ipcp); | ||
| 828 | if (err) | ||
| 829 | goto out_unlock; | ||
| 830 | |||
| 823 | if (current->euid != ipcp->cuid && | 831 | if (current->euid != ipcp->cuid && |
| 824 | current->euid != ipcp->uid && !capable(CAP_SYS_ADMIN)) { | 832 | current->euid != ipcp->uid && !capable(CAP_SYS_ADMIN)) { |
| 825 | err=-EPERM; | 833 | err=-EPERM; |
| @@ -836,7 +844,8 @@ static int semctl_down(int semid, int semnum, int cmd, int version, union semun | |||
| 836 | err = 0; | 844 | err = 0; |
| 837 | break; | 845 | break; |
| 838 | case IPC_SET: | 846 | case IPC_SET: |
| 839 | if ((err = audit_ipc_perms(0, setbuf.uid, setbuf.gid, setbuf.mode, ipcp))) | 847 | err = audit_ipc_set_perm(0, setbuf.uid, setbuf.gid, setbuf.mode, ipcp); |
| 848 | if (err) | ||
| 840 | goto out_unlock; | 849 | goto out_unlock; |
| 841 | ipcp->uid = setbuf.uid; | 850 | ipcp->uid = setbuf.uid; |
| 842 | ipcp->gid = setbuf.gid; | 851 | ipcp->gid = setbuf.gid; |
