diff options
author | Paul Moore <paul.moore@hp.com> | 2008-01-29 08:38:04 -0500 |
---|---|---|
committer | James Morris <jmorris@namei.org> | 2008-01-29 16:17:20 -0500 |
commit | 75e22910cf0c26802b09dac2e34c13e648d3ed02 (patch) | |
tree | bf5f5c62f6db8a3057a0265dc7748bf310d26d4a /security/selinux/netlabel.c | |
parent | 16efd45435fa695b501b7f73c3259bd7c77cc12c (diff) |
NetLabel: Add IP address family information to the netlbl_skbuff_getattr() function
In order to do any sort of IP header inspection of incoming packets we need to
know which address family, AF_INET/AF_INET6/etc., it belongs to and since the
sk_buff structure does not store this information we need to pass along the
address family separate from the packet itself.
Signed-off-by: Paul Moore <paul.moore@hp.com>
Signed-off-by: James Morris <jmorris@namei.org>
Diffstat (limited to 'security/selinux/netlabel.c')
-rw-r--r-- | security/selinux/netlabel.c | 12 |
1 files changed, 9 insertions, 3 deletions
diff --git a/security/selinux/netlabel.c b/security/selinux/netlabel.c index 66e013d6f6f6..f4bcbf12a4c9 100644 --- a/security/selinux/netlabel.c +++ b/security/selinux/netlabel.c | |||
@@ -144,6 +144,7 @@ void selinux_netlbl_sk_security_clone(struct sk_security_struct *ssec, | |||
144 | /** | 144 | /** |
145 | * selinux_netlbl_skbuff_getsid - Get the sid of a packet using NetLabel | 145 | * selinux_netlbl_skbuff_getsid - Get the sid of a packet using NetLabel |
146 | * @skb: the packet | 146 | * @skb: the packet |
147 | * @family: protocol family | ||
147 | * @base_sid: the SELinux SID to use as a context for MLS only attributes | 148 | * @base_sid: the SELinux SID to use as a context for MLS only attributes |
148 | * @sid: the SID | 149 | * @sid: the SID |
149 | * | 150 | * |
@@ -153,7 +154,10 @@ void selinux_netlbl_sk_security_clone(struct sk_security_struct *ssec, | |||
153 | * assign to the packet. Returns zero on success, negative values on failure. | 154 | * assign to the packet. Returns zero on success, negative values on failure. |
154 | * | 155 | * |
155 | */ | 156 | */ |
156 | int selinux_netlbl_skbuff_getsid(struct sk_buff *skb, u32 base_sid, u32 *sid) | 157 | int selinux_netlbl_skbuff_getsid(struct sk_buff *skb, |
158 | u16 family, | ||
159 | u32 base_sid, | ||
160 | u32 *sid) | ||
157 | { | 161 | { |
158 | int rc; | 162 | int rc; |
159 | struct netlbl_lsm_secattr secattr; | 163 | struct netlbl_lsm_secattr secattr; |
@@ -164,7 +168,7 @@ int selinux_netlbl_skbuff_getsid(struct sk_buff *skb, u32 base_sid, u32 *sid) | |||
164 | } | 168 | } |
165 | 169 | ||
166 | netlbl_secattr_init(&secattr); | 170 | netlbl_secattr_init(&secattr); |
167 | rc = netlbl_skbuff_getattr(skb, &secattr); | 171 | rc = netlbl_skbuff_getattr(skb, family, &secattr); |
168 | if (rc == 0 && secattr.flags != NETLBL_SECATTR_NONE) { | 172 | if (rc == 0 && secattr.flags != NETLBL_SECATTR_NONE) { |
169 | rc = security_netlbl_secattr_to_sid(&secattr, base_sid, sid); | 173 | rc = security_netlbl_secattr_to_sid(&secattr, base_sid, sid); |
170 | if (rc == 0 && | 174 | if (rc == 0 && |
@@ -292,6 +296,7 @@ int selinux_netlbl_inode_permission(struct inode *inode, int mask) | |||
292 | * selinux_netlbl_sock_rcv_skb - Do an inbound access check using NetLabel | 296 | * selinux_netlbl_sock_rcv_skb - Do an inbound access check using NetLabel |
293 | * @sksec: the sock's sk_security_struct | 297 | * @sksec: the sock's sk_security_struct |
294 | * @skb: the packet | 298 | * @skb: the packet |
299 | * @family: protocol family | ||
295 | * @ad: the audit data | 300 | * @ad: the audit data |
296 | * | 301 | * |
297 | * Description: | 302 | * Description: |
@@ -302,6 +307,7 @@ int selinux_netlbl_inode_permission(struct inode *inode, int mask) | |||
302 | */ | 307 | */ |
303 | int selinux_netlbl_sock_rcv_skb(struct sk_security_struct *sksec, | 308 | int selinux_netlbl_sock_rcv_skb(struct sk_security_struct *sksec, |
304 | struct sk_buff *skb, | 309 | struct sk_buff *skb, |
310 | u16 family, | ||
305 | struct avc_audit_data *ad) | 311 | struct avc_audit_data *ad) |
306 | { | 312 | { |
307 | int rc; | 313 | int rc; |
@@ -313,7 +319,7 @@ int selinux_netlbl_sock_rcv_skb(struct sk_security_struct *sksec, | |||
313 | return 0; | 319 | return 0; |
314 | 320 | ||
315 | netlbl_secattr_init(&secattr); | 321 | netlbl_secattr_init(&secattr); |
316 | rc = netlbl_skbuff_getattr(skb, &secattr); | 322 | rc = netlbl_skbuff_getattr(skb, family, &secattr); |
317 | if (rc == 0 && secattr.flags != NETLBL_SECATTR_NONE) { | 323 | if (rc == 0 && secattr.flags != NETLBL_SECATTR_NONE) { |
318 | rc = security_netlbl_secattr_to_sid(&secattr, | 324 | rc = security_netlbl_secattr_to_sid(&secattr, |
319 | SECINITSID_NETMSG, | 325 | SECINITSID_NETMSG, |