hooks.c (9b8321531a90c400e9c561d903926eee79639dcf) | hooks.c (04f6d70f6e64900a5d70a5fc199dd9d5fa787738) |
---|---|
1/* 2 * NSA Security-Enhanced Linux (SELinux) security module 3 * 4 * This file contains the SELinux hook function implementations. 5 * 6 * Authors: Stephen Smalley, <sds@epoch.ncsc.mil> 7 * Chris Vance, <cvance@nai.com> 8 * Wayne Salamon, <wsalamon@nai.com> --- 1959 unchanged lines hidden (view full) --- 1968 1969static int selinux_quota_on(struct dentry *dentry) 1970{ 1971 const struct cred *cred = current_cred(); 1972 1973 return dentry_has_perm(cred, NULL, dentry, FILE__QUOTAON); 1974} 1975 | 1/* 2 * NSA Security-Enhanced Linux (SELinux) security module 3 * 4 * This file contains the SELinux hook function implementations. 5 * 6 * Authors: Stephen Smalley, <sds@epoch.ncsc.mil> 7 * Chris Vance, <cvance@nai.com> 8 * Wayne Salamon, <wsalamon@nai.com> --- 1959 unchanged lines hidden (view full) --- 1968 1969static int selinux_quota_on(struct dentry *dentry) 1970{ 1971 const struct cred *cred = current_cred(); 1972 1973 return dentry_has_perm(cred, NULL, dentry, FILE__QUOTAON); 1974} 1975 |
1976static int selinux_syslog(int type) | 1976static int selinux_syslog(int type, bool from_file) |
1977{ 1978 int rc; 1979 | 1977{ 1978 int rc; 1979 |
1980 rc = cap_syslog(type, from_file); 1981 if (rc) 1982 return rc; 1983 |
|
1980 switch (type) { 1981 case SYSLOG_ACTION_READ_ALL: /* Read last kernel messages */ 1982 case SYSLOG_ACTION_SIZE_BUFFER: /* Return size of the log buffer */ 1983 rc = task_has_system(current, SYSTEM__SYSLOG_READ); 1984 break; 1985 case SYSLOG_ACTION_CONSOLE_OFF: /* Disable logging to console */ 1986 case SYSLOG_ACTION_CONSOLE_ON: /* Enable logging to console */ 1987 /* Set level of messages printed to console */ --- 2588 unchanged lines hidden (view full) --- 4576 break; 4577 case PF_INET6: 4578 if (IP6CB(skb)->flags & IP6SKB_FORWARDED) 4579 secmark_perm = PACKET__FORWARD_OUT; 4580 else 4581 secmark_perm = PACKET__SEND; 4582 break; 4583 default: | 1984 switch (type) { 1985 case SYSLOG_ACTION_READ_ALL: /* Read last kernel messages */ 1986 case SYSLOG_ACTION_SIZE_BUFFER: /* Return size of the log buffer */ 1987 rc = task_has_system(current, SYSTEM__SYSLOG_READ); 1988 break; 1989 case SYSLOG_ACTION_CONSOLE_OFF: /* Disable logging to console */ 1990 case SYSLOG_ACTION_CONSOLE_ON: /* Enable logging to console */ 1991 /* Set level of messages printed to console */ --- 2588 unchanged lines hidden (view full) --- 4580 break; 4581 case PF_INET6: 4582 if (IP6CB(skb)->flags & IP6SKB_FORWARDED) 4583 secmark_perm = PACKET__FORWARD_OUT; 4584 else 4585 secmark_perm = PACKET__SEND; 4586 break; 4587 default: |
4584 return NF_DROP; | 4588 return NF_DROP_ERR(-ECONNREFUSED); |
4585 } 4586 if (secmark_perm == PACKET__FORWARD_OUT) { 4587 if (selinux_skb_peerlbl_sid(skb, family, &peer_sid)) 4588 return NF_DROP; 4589 } else 4590 peer_sid = SECINITSID_KERNEL; 4591 } else { 4592 struct sk_security_struct *sksec = sk->sk_security; --- 5 unchanged lines hidden (view full) --- 4598 ad.u.net.netif = ifindex; 4599 ad.u.net.family = family; 4600 if (selinux_parse_skb(skb, &ad, &addrp, 0, NULL)) 4601 return NF_DROP; 4602 4603 if (secmark_active) 4604 if (avc_has_perm(peer_sid, skb->secmark, 4605 SECCLASS_PACKET, secmark_perm, &ad)) | 4589 } 4590 if (secmark_perm == PACKET__FORWARD_OUT) { 4591 if (selinux_skb_peerlbl_sid(skb, family, &peer_sid)) 4592 return NF_DROP; 4593 } else 4594 peer_sid = SECINITSID_KERNEL; 4595 } else { 4596 struct sk_security_struct *sksec = sk->sk_security; --- 5 unchanged lines hidden (view full) --- 4602 ad.u.net.netif = ifindex; 4603 ad.u.net.family = family; 4604 if (selinux_parse_skb(skb, &ad, &addrp, 0, NULL)) 4605 return NF_DROP; 4606 4607 if (secmark_active) 4608 if (avc_has_perm(peer_sid, skb->secmark, 4609 SECCLASS_PACKET, secmark_perm, &ad)) |
4606 return NF_DROP; | 4610 return NF_DROP_ERR(-ECONNREFUSED); |
4607 4608 if (peerlbl_active) { 4609 u32 if_sid; 4610 u32 node_sid; 4611 4612 if (sel_netif_sid(ifindex, &if_sid)) 4613 return NF_DROP; 4614 if (avc_has_perm(peer_sid, if_sid, 4615 SECCLASS_NETIF, NETIF__EGRESS, &ad)) | 4611 4612 if (peerlbl_active) { 4613 u32 if_sid; 4614 u32 node_sid; 4615 4616 if (sel_netif_sid(ifindex, &if_sid)) 4617 return NF_DROP; 4618 if (avc_has_perm(peer_sid, if_sid, 4619 SECCLASS_NETIF, NETIF__EGRESS, &ad)) |
4616 return NF_DROP; | 4620 return NF_DROP_ERR(-ECONNREFUSED); |
4617 4618 if (sel_netnode_sid(addrp, family, &node_sid)) 4619 return NF_DROP; 4620 if (avc_has_perm(peer_sid, node_sid, 4621 SECCLASS_NODE, NODE__SENDTO, &ad)) | 4621 4622 if (sel_netnode_sid(addrp, family, &node_sid)) 4623 return NF_DROP; 4624 if (avc_has_perm(peer_sid, node_sid, 4625 SECCLASS_NODE, NODE__SENDTO, &ad)) |
4622 return NF_DROP; | 4626 return NF_DROP_ERR(-ECONNREFUSED); |
4623 } 4624 4625 return NF_ACCEPT; 4626} 4627 4628static unsigned int selinux_ipv4_postroute(unsigned int hooknum, 4629 struct sk_buff *skb, 4630 const struct net_device *in, --- 1139 unchanged lines hidden --- | 4627 } 4628 4629 return NF_ACCEPT; 4630} 4631 4632static unsigned int selinux_ipv4_postroute(unsigned int hooknum, 4633 struct sk_buff *skb, 4634 const struct net_device *in, --- 1139 unchanged lines hidden --- |