diff options
-rw-r--r-- | include/net/netlabel.h | 2 | ||||
-rw-r--r-- | net/netlabel/netlabel_user.c | 4 | ||||
-rw-r--r-- | net/xfrm/xfrm_policy.c | 5 | ||||
-rw-r--r-- | security/selinux/hooks.c | 3 | ||||
-rw-r--r-- | security/selinux/netlabel.c | 16 |
5 files changed, 21 insertions, 9 deletions
diff --git a/include/net/netlabel.h b/include/net/netlabel.h index ffbc7f28335a..2e5b2f6f9fa0 100644 --- a/include/net/netlabel.h +++ b/include/net/netlabel.h | |||
@@ -132,6 +132,8 @@ struct netlbl_lsm_secattr_catmap { | |||
132 | #define NETLBL_SECATTR_CACHE 0x00000002 | 132 | #define NETLBL_SECATTR_CACHE 0x00000002 |
133 | #define NETLBL_SECATTR_MLS_LVL 0x00000004 | 133 | #define NETLBL_SECATTR_MLS_LVL 0x00000004 |
134 | #define NETLBL_SECATTR_MLS_CAT 0x00000008 | 134 | #define NETLBL_SECATTR_MLS_CAT 0x00000008 |
135 | #define NETLBL_SECATTR_CACHEABLE (NETLBL_SECATTR_MLS_LVL | \ | ||
136 | NETLBL_SECATTR_MLS_CAT) | ||
135 | struct netlbl_lsm_secattr { | 137 | struct netlbl_lsm_secattr { |
136 | u32 flags; | 138 | u32 flags; |
137 | 139 | ||
diff --git a/net/netlabel/netlabel_user.c b/net/netlabel/netlabel_user.c index 89dcc485653b..85a96a3fddaa 100644 --- a/net/netlabel/netlabel_user.c +++ b/net/netlabel/netlabel_user.c | |||
@@ -113,8 +113,10 @@ struct audit_buffer *netlbl_audit_start_common(int type, | |||
113 | if (audit_info->secid != 0 && | 113 | if (audit_info->secid != 0 && |
114 | security_secid_to_secctx(audit_info->secid, | 114 | security_secid_to_secctx(audit_info->secid, |
115 | &secctx, | 115 | &secctx, |
116 | &secctx_len) == 0) | 116 | &secctx_len) == 0) { |
117 | audit_log_format(audit_buf, " subj=%s", secctx); | 117 | audit_log_format(audit_buf, " subj=%s", secctx); |
118 | security_release_secctx(secctx, secctx_len); | ||
119 | } | ||
118 | 120 | ||
119 | return audit_buf; | 121 | return audit_buf; |
120 | } | 122 | } |
diff --git a/net/xfrm/xfrm_policy.c b/net/xfrm/xfrm_policy.c index 95a47304336d..e5a3be03aa0d 100644 --- a/net/xfrm/xfrm_policy.c +++ b/net/xfrm/xfrm_policy.c | |||
@@ -2195,9 +2195,10 @@ void xfrm_audit_log(uid_t auid, u32 sid, int type, int result, | |||
2195 | } | 2195 | } |
2196 | 2196 | ||
2197 | if (sid != 0 && | 2197 | if (sid != 0 && |
2198 | security_secid_to_secctx(sid, &secctx, &secctx_len) == 0) | 2198 | security_secid_to_secctx(sid, &secctx, &secctx_len) == 0) { |
2199 | audit_log_format(audit_buf, " subj=%s", secctx); | 2199 | audit_log_format(audit_buf, " subj=%s", secctx); |
2200 | else | 2200 | security_release_secctx(secctx, secctx_len); |
2201 | } else | ||
2201 | audit_log_task_context(audit_buf); | 2202 | audit_log_task_context(audit_buf); |
2202 | 2203 | ||
2203 | if (xp) { | 2204 | if (xp) { |
diff --git a/security/selinux/hooks.c b/security/selinux/hooks.c index 0fac6829c63a..6237933f7d82 100644 --- a/security/selinux/hooks.c +++ b/security/selinux/hooks.c | |||
@@ -4658,8 +4658,7 @@ static int selinux_secid_to_secctx(u32 secid, char **secdata, u32 *seclen) | |||
4658 | 4658 | ||
4659 | static void selinux_release_secctx(char *secdata, u32 seclen) | 4659 | static void selinux_release_secctx(char *secdata, u32 seclen) |
4660 | { | 4660 | { |
4661 | if (secdata) | 4661 | kfree(secdata); |
4662 | kfree(secdata); | ||
4663 | } | 4662 | } |
4664 | 4663 | ||
4665 | #ifdef CONFIG_KEYS | 4664 | #ifdef CONFIG_KEYS |
diff --git a/security/selinux/netlabel.c b/security/selinux/netlabel.c index 051b14c88e2d..d243ddc723a5 100644 --- a/security/selinux/netlabel.c +++ b/security/selinux/netlabel.c | |||
@@ -162,9 +162,13 @@ int selinux_netlbl_skbuff_getsid(struct sk_buff *skb, u32 base_sid, u32 *sid) | |||
162 | 162 | ||
163 | netlbl_secattr_init(&secattr); | 163 | netlbl_secattr_init(&secattr); |
164 | rc = netlbl_skbuff_getattr(skb, &secattr); | 164 | rc = netlbl_skbuff_getattr(skb, &secattr); |
165 | if (rc == 0 && secattr.flags != NETLBL_SECATTR_NONE) | 165 | if (rc == 0 && secattr.flags != NETLBL_SECATTR_NONE) { |
166 | rc = security_netlbl_secattr_to_sid(&secattr, base_sid, sid); | 166 | rc = security_netlbl_secattr_to_sid(&secattr, base_sid, sid); |
167 | else | 167 | if (rc == 0 && |
168 | (secattr.flags & NETLBL_SECATTR_CACHEABLE) && | ||
169 | (secattr.flags & NETLBL_SECATTR_CACHE)) | ||
170 | netlbl_cache_add(skb, &secattr); | ||
171 | } else | ||
168 | *sid = SECSID_NULL; | 172 | *sid = SECSID_NULL; |
169 | netlbl_secattr_destroy(&secattr); | 173 | netlbl_secattr_destroy(&secattr); |
170 | 174 | ||
@@ -307,11 +311,15 @@ int selinux_netlbl_sock_rcv_skb(struct sk_security_struct *sksec, | |||
307 | 311 | ||
308 | netlbl_secattr_init(&secattr); | 312 | netlbl_secattr_init(&secattr); |
309 | rc = netlbl_skbuff_getattr(skb, &secattr); | 313 | rc = netlbl_skbuff_getattr(skb, &secattr); |
310 | if (rc == 0 && secattr.flags != NETLBL_SECATTR_NONE) | 314 | if (rc == 0 && secattr.flags != NETLBL_SECATTR_NONE) { |
311 | rc = security_netlbl_secattr_to_sid(&secattr, | 315 | rc = security_netlbl_secattr_to_sid(&secattr, |
312 | SECINITSID_NETMSG, | 316 | SECINITSID_NETMSG, |
313 | &nlbl_sid); | 317 | &nlbl_sid); |
314 | else | 318 | if (rc == 0 && |
319 | (secattr.flags & NETLBL_SECATTR_CACHEABLE) && | ||
320 | (secattr.flags & NETLBL_SECATTR_CACHE)) | ||
321 | netlbl_cache_add(skb, &secattr); | ||
322 | } else | ||
315 | nlbl_sid = SECINITSID_UNLABELED; | 323 | nlbl_sid = SECINITSID_UNLABELED; |
316 | netlbl_secattr_destroy(&secattr); | 324 | netlbl_secattr_destroy(&secattr); |
317 | if (rc != 0) | 325 | if (rc != 0) |