aboutsummaryrefslogtreecommitdiffstats
path: root/security/selinux/netlabel.c
diff options
context:
space:
mode:
Diffstat (limited to 'security/selinux/netlabel.c')
-rw-r--r--security/selinux/netlabel.c10
1 files changed, 3 insertions, 7 deletions
diff --git a/security/selinux/netlabel.c b/security/selinux/netlabel.c
index f4bcbf12a4c9..b54d28fd3b5d 100644
--- a/security/selinux/netlabel.c
+++ b/security/selinux/netlabel.c
@@ -137,7 +137,6 @@ void selinux_netlbl_sk_security_clone(struct sk_security_struct *ssec,
137 * lock as other threads could have access to ssec */ 137 * lock as other threads could have access to ssec */
138 rcu_read_lock(); 138 rcu_read_lock();
139 selinux_netlbl_sk_security_reset(newssec, ssec->sk->sk_family); 139 selinux_netlbl_sk_security_reset(newssec, ssec->sk->sk_family);
140 newssec->sclass = ssec->sclass;
141 rcu_read_unlock(); 140 rcu_read_unlock();
142} 141}
143 142
@@ -146,6 +145,7 @@ void selinux_netlbl_sk_security_clone(struct sk_security_struct *ssec,
146 * @skb: the packet 145 * @skb: the packet
147 * @family: protocol family 146 * @family: protocol family
148 * @base_sid: the SELinux SID to use as a context for MLS only attributes 147 * @base_sid: the SELinux SID to use as a context for MLS only attributes
148 * @type: NetLabel labeling protocol type
149 * @sid: the SID 149 * @sid: the SID
150 * 150 *
151 * Description: 151 * Description:
@@ -157,6 +157,7 @@ void selinux_netlbl_sk_security_clone(struct sk_security_struct *ssec,
157int selinux_netlbl_skbuff_getsid(struct sk_buff *skb, 157int selinux_netlbl_skbuff_getsid(struct sk_buff *skb,
158 u16 family, 158 u16 family,
159 u32 base_sid, 159 u32 base_sid,
160 u32 *type,
160 u32 *sid) 161 u32 *sid)
161{ 162{
162 int rc; 163 int rc;
@@ -177,6 +178,7 @@ int selinux_netlbl_skbuff_getsid(struct sk_buff *skb,
177 netlbl_cache_add(skb, &secattr); 178 netlbl_cache_add(skb, &secattr);
178 } else 179 } else
179 *sid = SECSID_NULL; 180 *sid = SECSID_NULL;
181 *type = secattr.type;
180 netlbl_secattr_destroy(&secattr); 182 netlbl_secattr_destroy(&secattr);
181 183
182 return rc; 184 return rc;
@@ -194,13 +196,10 @@ int selinux_netlbl_skbuff_getsid(struct sk_buff *skb,
194 */ 196 */
195void selinux_netlbl_sock_graft(struct sock *sk, struct socket *sock) 197void selinux_netlbl_sock_graft(struct sock *sk, struct socket *sock)
196{ 198{
197 struct inode_security_struct *isec = SOCK_INODE(sock)->i_security;
198 struct sk_security_struct *sksec = sk->sk_security; 199 struct sk_security_struct *sksec = sk->sk_security;
199 struct netlbl_lsm_secattr secattr; 200 struct netlbl_lsm_secattr secattr;
200 u32 nlbl_peer_sid; 201 u32 nlbl_peer_sid;
201 202
202 sksec->sclass = isec->sclass;
203
204 rcu_read_lock(); 203 rcu_read_lock();
205 204
206 if (sksec->nlbl_state != NLBL_REQUIRE) { 205 if (sksec->nlbl_state != NLBL_REQUIRE) {
@@ -238,11 +237,8 @@ int selinux_netlbl_socket_post_create(struct socket *sock)
238{ 237{
239 int rc = 0; 238 int rc = 0;
240 struct sock *sk = sock->sk; 239 struct sock *sk = sock->sk;
241 struct inode_security_struct *isec = SOCK_INODE(sock)->i_security;
242 struct sk_security_struct *sksec = sk->sk_security; 240 struct sk_security_struct *sksec = sk->sk_security;
243 241
244 sksec->sclass = isec->sclass;
245
246 rcu_read_lock(); 242 rcu_read_lock();
247 if (sksec->nlbl_state == NLBL_REQUIRE) 243 if (sksec->nlbl_state == NLBL_REQUIRE)
248 rc = selinux_netlbl_sock_setsid(sk, sksec->sid); 244 rc = selinux_netlbl_sock_setsid(sk, sksec->sid);