summaryrefslogtreecommitdiffstats
path: root/security/selinux
diff options
context:
space:
mode:
authorCasey Schaufler <casey@schaufler-ca.com>2018-09-21 20:19:45 -0400
committerKees Cook <keescook@chromium.org>2019-01-08 16:18:45 -0500
commit7c6538280ae99eaebd589a5c029e1ed1c063909c (patch)
treedc9151bdc921bb93a0a3be3e06a4e93f570e44c5 /security/selinux
parentf4ad8f2c40769b3cc9497ba0883bbaf823f7752f (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.c18
-rw-r--r--security/selinux/include/objsec.h13
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
6070static void selinux_ipc_getsecid(struct kern_ipc_perm *ipcp, u32 *secid) 6070static 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
179static inline struct msg_security_struct *selinux_msg_msg(
180 const struct msg_msg *msg_msg)
181{
182 return msg_msg->security;
183}
184
185static 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_ */