diff options
Diffstat (limited to 'security/selinux/hooks.c')
-rw-r--r-- | security/selinux/hooks.c | 29 |
1 files changed, 24 insertions, 5 deletions
diff --git a/security/selinux/hooks.c b/security/selinux/hooks.c index b3c064744d32..81bfcf114484 100644 --- a/security/selinux/hooks.c +++ b/security/selinux/hooks.c | |||
@@ -3443,6 +3443,11 @@ static int selinux_parse_skb(struct sk_buff *skb, struct avc_audit_data *ad, | |||
3443 | break; | 3443 | break; |
3444 | } | 3444 | } |
3445 | 3445 | ||
3446 | if (unlikely(ret)) | ||
3447 | printk(KERN_WARNING | ||
3448 | "SELinux: failure in selinux_parse_skb()," | ||
3449 | " unable to parse packet\n"); | ||
3450 | |||
3446 | return ret; | 3451 | return ret; |
3447 | } | 3452 | } |
3448 | 3453 | ||
@@ -3463,6 +3468,7 @@ static int selinux_parse_skb(struct sk_buff *skb, struct avc_audit_data *ad, | |||
3463 | */ | 3468 | */ |
3464 | static int selinux_skb_peerlbl_sid(struct sk_buff *skb, u16 family, u32 *sid) | 3469 | static int selinux_skb_peerlbl_sid(struct sk_buff *skb, u16 family, u32 *sid) |
3465 | { | 3470 | { |
3471 | int err; | ||
3466 | u32 xfrm_sid; | 3472 | u32 xfrm_sid; |
3467 | u32 nlbl_sid; | 3473 | u32 nlbl_sid; |
3468 | u32 nlbl_type; | 3474 | u32 nlbl_type; |
@@ -3470,10 +3476,13 @@ static int selinux_skb_peerlbl_sid(struct sk_buff *skb, u16 family, u32 *sid) | |||
3470 | selinux_skb_xfrm_sid(skb, &xfrm_sid); | 3476 | selinux_skb_xfrm_sid(skb, &xfrm_sid); |
3471 | selinux_netlbl_skbuff_getsid(skb, family, &nlbl_type, &nlbl_sid); | 3477 | selinux_netlbl_skbuff_getsid(skb, family, &nlbl_type, &nlbl_sid); |
3472 | 3478 | ||
3473 | if (security_net_peersid_resolve(nlbl_sid, nlbl_type, | 3479 | err = security_net_peersid_resolve(nlbl_sid, nlbl_type, xfrm_sid, sid); |
3474 | xfrm_sid, | 3480 | if (unlikely(err)) { |
3475 | sid) != 0) | 3481 | printk(KERN_WARNING |
3482 | "SELinux: failure in selinux_skb_peerlbl_sid()," | ||
3483 | " unable to determine packet's peer label\n"); | ||
3476 | return -EACCES; | 3484 | return -EACCES; |
3485 | } | ||
3477 | 3486 | ||
3478 | return 0; | 3487 | return 0; |
3479 | } | 3488 | } |
@@ -3925,8 +3934,13 @@ static int selinux_sock_rcv_skb_iptables_compat(struct sock *sk, | |||
3925 | err = security_port_sid(sk->sk_family, sk->sk_type, | 3934 | err = security_port_sid(sk->sk_family, sk->sk_type, |
3926 | sk->sk_protocol, ntohs(ad->u.net.sport), | 3935 | sk->sk_protocol, ntohs(ad->u.net.sport), |
3927 | &port_sid); | 3936 | &port_sid); |
3928 | if (err) | 3937 | if (unlikely(err)) { |
3938 | printk(KERN_WARNING | ||
3939 | "SELinux: failure in" | ||
3940 | " selinux_sock_rcv_skb_iptables_compat()," | ||
3941 | " network port label not found\n"); | ||
3929 | return err; | 3942 | return err; |
3943 | } | ||
3930 | return avc_has_perm(sk_sid, port_sid, sk_class, recv_perm, ad); | 3944 | return avc_has_perm(sk_sid, port_sid, sk_class, recv_perm, ad); |
3931 | } | 3945 | } |
3932 | 3946 | ||
@@ -4343,8 +4357,13 @@ static int selinux_ip_postroute_iptables_compat(struct sock *sk, | |||
4343 | err = security_port_sid(sk->sk_family, sk->sk_type, | 4357 | err = security_port_sid(sk->sk_family, sk->sk_type, |
4344 | sk->sk_protocol, ntohs(ad->u.net.dport), | 4358 | sk->sk_protocol, ntohs(ad->u.net.dport), |
4345 | &port_sid); | 4359 | &port_sid); |
4346 | if (err) | 4360 | if (unlikely(err)) { |
4361 | printk(KERN_WARNING | ||
4362 | "SELinux: failure in" | ||
4363 | " selinux_ip_postroute_iptables_compat()," | ||
4364 | " network port label not found\n"); | ||
4347 | return err; | 4365 | return err; |
4366 | } | ||
4348 | return avc_has_perm(sk_sid, port_sid, sk_class, send_perm, ad); | 4367 | return avc_has_perm(sk_sid, port_sid, sk_class, send_perm, ad); |
4349 | } | 4368 | } |
4350 | 4369 | ||