diff options
author | Casey Schaufler <casey@schaufler-ca.com> | 2018-09-21 20:19:45 -0400 |
---|---|---|
committer | Kees Cook <keescook@chromium.org> | 2019-01-08 16:18:45 -0500 |
commit | 7c6538280ae99eaebd589a5c029e1ed1c063909c (patch) | |
tree | dc9151bdc921bb93a0a3be3e06a4e93f570e44c5 /security/selinux | |
parent | f4ad8f2c40769b3cc9497ba0883bbaf823f7752f (diff) |
SELinux: Abstract use of ipc security blobs
Don't use the ipc->security pointer directly.
Don't use the msg_msg->security pointer directly.
Provide helper functions that provides the security blob pointers.
Signed-off-by: Casey Schaufler <casey@schaufler-ca.com>
Reviewed-by: Kees Cook <keescook@chromium.org>
Signed-off-by: Kees Cook <keescook@chromium.org>
Diffstat (limited to 'security/selinux')
-rw-r--r-- | security/selinux/hooks.c | 18 | ||||
-rw-r--r-- | security/selinux/include/objsec.h | 13 |
2 files changed, 22 insertions, 9 deletions
diff --git a/security/selinux/hooks.c b/security/selinux/hooks.c index 23da46cd6e37..4b64ad31326f 100644 --- a/security/selinux/hooks.c +++ b/security/selinux/hooks.c | |||
@@ -5678,7 +5678,7 @@ static int ipc_has_perm(struct kern_ipc_perm *ipc_perms, | |||
5678 | struct common_audit_data ad; | 5678 | struct common_audit_data ad; |
5679 | u32 sid = current_sid(); | 5679 | u32 sid = current_sid(); |
5680 | 5680 | ||
5681 | isec = ipc_perms->security; | 5681 | isec = selinux_ipc(ipc_perms); |
5682 | 5682 | ||
5683 | ad.type = LSM_AUDIT_DATA_IPC; | 5683 | ad.type = LSM_AUDIT_DATA_IPC; |
5684 | ad.u.ipc_id = ipc_perms->key; | 5684 | ad.u.ipc_id = ipc_perms->key; |
@@ -5735,7 +5735,7 @@ static int selinux_msg_queue_associate(struct kern_ipc_perm *msq, int msqflg) | |||
5735 | struct common_audit_data ad; | 5735 | struct common_audit_data ad; |
5736 | u32 sid = current_sid(); | 5736 | u32 sid = current_sid(); |
5737 | 5737 | ||
5738 | isec = msq->security; | 5738 | isec = selinux_ipc(msq); |
5739 | 5739 | ||
5740 | ad.type = LSM_AUDIT_DATA_IPC; | 5740 | ad.type = LSM_AUDIT_DATA_IPC; |
5741 | ad.u.ipc_id = msq->key; | 5741 | ad.u.ipc_id = msq->key; |
@@ -5784,8 +5784,8 @@ static int selinux_msg_queue_msgsnd(struct kern_ipc_perm *msq, struct msg_msg *m | |||
5784 | u32 sid = current_sid(); | 5784 | u32 sid = current_sid(); |
5785 | int rc; | 5785 | int rc; |
5786 | 5786 | ||
5787 | isec = msq->security; | 5787 | isec = selinux_ipc(msq); |
5788 | msec = msg->security; | 5788 | msec = selinux_msg_msg(msg); |
5789 | 5789 | ||
5790 | /* | 5790 | /* |
5791 | * First time through, need to assign label to the message | 5791 | * First time through, need to assign label to the message |
@@ -5832,8 +5832,8 @@ static int selinux_msg_queue_msgrcv(struct kern_ipc_perm *msq, struct msg_msg *m | |||
5832 | u32 sid = task_sid(target); | 5832 | u32 sid = task_sid(target); |
5833 | int rc; | 5833 | int rc; |
5834 | 5834 | ||
5835 | isec = msq->security; | 5835 | isec = selinux_ipc(msq); |
5836 | msec = msg->security; | 5836 | msec = selinux_msg_msg(msg); |
5837 | 5837 | ||
5838 | ad.type = LSM_AUDIT_DATA_IPC; | 5838 | ad.type = LSM_AUDIT_DATA_IPC; |
5839 | ad.u.ipc_id = msq->key; | 5839 | ad.u.ipc_id = msq->key; |
@@ -5886,7 +5886,7 @@ static int selinux_shm_associate(struct kern_ipc_perm *shp, int shmflg) | |||
5886 | struct common_audit_data ad; | 5886 | struct common_audit_data ad; |
5887 | u32 sid = current_sid(); | 5887 | u32 sid = current_sid(); |
5888 | 5888 | ||
5889 | isec = shp->security; | 5889 | isec = selinux_ipc(shp); |
5890 | 5890 | ||
5891 | ad.type = LSM_AUDIT_DATA_IPC; | 5891 | ad.type = LSM_AUDIT_DATA_IPC; |
5892 | ad.u.ipc_id = shp->key; | 5892 | ad.u.ipc_id = shp->key; |
@@ -5983,7 +5983,7 @@ static int selinux_sem_associate(struct kern_ipc_perm *sma, int semflg) | |||
5983 | struct common_audit_data ad; | 5983 | struct common_audit_data ad; |
5984 | u32 sid = current_sid(); | 5984 | u32 sid = current_sid(); |
5985 | 5985 | ||
5986 | isec = sma->security; | 5986 | isec = selinux_ipc(sma); |
5987 | 5987 | ||
5988 | ad.type = LSM_AUDIT_DATA_IPC; | 5988 | ad.type = LSM_AUDIT_DATA_IPC; |
5989 | ad.u.ipc_id = sma->key; | 5989 | ad.u.ipc_id = sma->key; |
@@ -6069,7 +6069,7 @@ static int selinux_ipc_permission(struct kern_ipc_perm *ipcp, short flag) | |||
6069 | 6069 | ||
6070 | static void selinux_ipc_getsecid(struct kern_ipc_perm *ipcp, u32 *secid) | 6070 | static void selinux_ipc_getsecid(struct kern_ipc_perm *ipcp, u32 *secid) |
6071 | { | 6071 | { |
6072 | struct ipc_security_struct *isec = ipcp->security; | 6072 | struct ipc_security_struct *isec = selinux_ipc(ipcp); |
6073 | *secid = isec->sid; | 6073 | *secid = isec->sid; |
6074 | } | 6074 | } |
6075 | 6075 | ||
diff --git a/security/selinux/include/objsec.h b/security/selinux/include/objsec.h index 562fad58c56b..539cacf4a572 100644 --- a/security/selinux/include/objsec.h +++ b/security/selinux/include/objsec.h | |||
@@ -26,6 +26,7 @@ | |||
26 | #include <linux/in.h> | 26 | #include <linux/in.h> |
27 | #include <linux/spinlock.h> | 27 | #include <linux/spinlock.h> |
28 | #include <linux/lsm_hooks.h> | 28 | #include <linux/lsm_hooks.h> |
29 | #include <linux/msg.h> | ||
29 | #include <net/net_namespace.h> | 30 | #include <net/net_namespace.h> |
30 | #include "flask.h" | 31 | #include "flask.h" |
31 | #include "avc.h" | 32 | #include "avc.h" |
@@ -175,4 +176,16 @@ static inline struct inode_security_struct *selinux_inode( | |||
175 | return inode->i_security + selinux_blob_sizes.lbs_inode; | 176 | return inode->i_security + selinux_blob_sizes.lbs_inode; |
176 | } | 177 | } |
177 | 178 | ||
179 | static inline struct msg_security_struct *selinux_msg_msg( | ||
180 | const struct msg_msg *msg_msg) | ||
181 | { | ||
182 | return msg_msg->security; | ||
183 | } | ||
184 | |||
185 | static inline struct ipc_security_struct *selinux_ipc( | ||
186 | const struct kern_ipc_perm *ipc) | ||
187 | { | ||
188 | return ipc->security; | ||
189 | } | ||
190 | |||
178 | #endif /* _SELINUX_OBJSEC_H_ */ | 191 | #endif /* _SELINUX_OBJSEC_H_ */ |