mac_system.c (102103) | mac_system.c (102112) |
---|---|
1/*- 2 * Copyright (c) 1999, 2000, 2001, 2002 Robert N. M. Watson 3 * Copyright (c) 2001 Ilmar S. Habibulin 4 * Copyright (c) 2001, 2002 Networks Associates Technology, Inc. 5 * All rights reserved. 6 * 7 * This software was developed by Robert Watson and Ilmar Habibulin for the 8 * TrustedBSD Project. --- 22 unchanged lines hidden (view full) --- 31 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 32 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 33 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 34 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 35 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 36 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 37 * SUCH DAMAGE. 38 * | 1/*- 2 * Copyright (c) 1999, 2000, 2001, 2002 Robert N. M. Watson 3 * Copyright (c) 2001 Ilmar S. Habibulin 4 * Copyright (c) 2001, 2002 Networks Associates Technology, Inc. 5 * All rights reserved. 6 * 7 * This software was developed by Robert Watson and Ilmar Habibulin for the 8 * TrustedBSD Project. --- 22 unchanged lines hidden (view full) --- 31 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 32 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 33 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 34 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 35 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 36 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 37 * SUCH DAMAGE. 38 * |
39 * $FreeBSD: head/sys/security/mac/mac_system.c 102103 2002-08-19 15:30:30Z rwatson $ | 39 * $FreeBSD: head/sys/security/mac/mac_system.c 102112 2002-08-19 16:43:25Z rwatson $ |
40 */ 41/* 42 * Developed by the TrustedBSD Project. 43 * 44 * Framework for extensible kernel access control. Kernel and userland 45 * interface to the framework, policy registration and composition. 46 */ 47 --- 702 unchanged lines hidden (view full) --- 750 case MAC_CHECK_VNODE_LOOKUP: 751 mpc->mpc_ops->mpo_check_vnode_lookup = 752 mpe->mpe_function; 753 break; 754 case MAC_CHECK_VNODE_MMAP_PERMS: 755 mpc->mpc_ops->mpo_check_vnode_mmap_perms = 756 mpe->mpe_function; 757 break; | 40 */ 41/* 42 * Developed by the TrustedBSD Project. 43 * 44 * Framework for extensible kernel access control. Kernel and userland 45 * interface to the framework, policy registration and composition. 46 */ 47 --- 702 unchanged lines hidden (view full) --- 750 case MAC_CHECK_VNODE_LOOKUP: 751 mpc->mpc_ops->mpo_check_vnode_lookup = 752 mpe->mpe_function; 753 break; 754 case MAC_CHECK_VNODE_MMAP_PERMS: 755 mpc->mpc_ops->mpo_check_vnode_mmap_perms = 756 mpe->mpe_function; 757 break; |
758 case MAC_CHECK_VNODE_OP: 759 mpc->mpc_ops->mpo_check_vnode_op = 760 mpe->mpe_function; 761 break; | |
762 case MAC_CHECK_VNODE_OPEN: 763 mpc->mpc_ops->mpo_check_vnode_open = 764 mpe->mpe_function; 765 break; | 758 case MAC_CHECK_VNODE_OPEN: 759 mpc->mpc_ops->mpo_check_vnode_open = 760 mpe->mpe_function; 761 break; |
762 case MAC_CHECK_VNODE_POLL: 763 mpc->mpc_ops->mpo_check_vnode_poll = 764 mpe->mpe_function; 765 break; 766 case MAC_CHECK_VNODE_READ: 767 mpc->mpc_ops->mpo_check_vnode_read = 768 mpe->mpe_function; 769 break; |
|
766 case MAC_CHECK_VNODE_READDIR: 767 mpc->mpc_ops->mpo_check_vnode_readdir = 768 mpe->mpe_function; 769 break; 770 case MAC_CHECK_VNODE_READLINK: 771 mpc->mpc_ops->mpo_check_vnode_readlink = 772 mpe->mpe_function; 773 break; --- 36 unchanged lines hidden (view full) --- 810 case MAC_CHECK_VNODE_SETUTIMES: 811 mpc->mpc_ops->mpo_check_vnode_setutimes = 812 mpe->mpe_function; 813 break; 814 case MAC_CHECK_VNODE_STAT: 815 mpc->mpc_ops->mpo_check_vnode_stat = 816 mpe->mpe_function; 817 break; | 770 case MAC_CHECK_VNODE_READDIR: 771 mpc->mpc_ops->mpo_check_vnode_readdir = 772 mpe->mpe_function; 773 break; 774 case MAC_CHECK_VNODE_READLINK: 775 mpc->mpc_ops->mpo_check_vnode_readlink = 776 mpe->mpe_function; 777 break; --- 36 unchanged lines hidden (view full) --- 814 case MAC_CHECK_VNODE_SETUTIMES: 815 mpc->mpc_ops->mpo_check_vnode_setutimes = 816 mpe->mpe_function; 817 break; 818 case MAC_CHECK_VNODE_STAT: 819 mpc->mpc_ops->mpo_check_vnode_stat = 820 mpe->mpe_function; 821 break; |
822 case MAC_CHECK_VNODE_WRITE: 823 mpc->mpc_ops->mpo_check_vnode_write = 824 mpe->mpe_function; 825 break; |
|
818/* 819 default: 820 printf("MAC policy `%s': unknown operation %d\n", 821 mpc->mpc_name, mpe->mpe_constant); 822 return (EINVAL); 823*/ 824 } 825 } --- 931 unchanged lines hidden (view full) --- 1757 */ 1758 ASSERT_VOP_LOCKED(vp, "mac_check_vnode_mmap_perms"); 1759 MAC_BOOLEAN(check_vnode_mmap_perms, &, cred, vp, &vp->v_label, 1760 newmapping); 1761 return (result); 1762} 1763 1764int | 826/* 827 default: 828 printf("MAC policy `%s': unknown operation %d\n", 829 mpc->mpc_name, mpe->mpe_constant); 830 return (EINVAL); 831*/ 832 } 833 } --- 931 unchanged lines hidden (view full) --- 1765 */ 1766 ASSERT_VOP_LOCKED(vp, "mac_check_vnode_mmap_perms"); 1767 MAC_BOOLEAN(check_vnode_mmap_perms, &, cred, vp, &vp->v_label, 1768 newmapping); 1769 return (result); 1770} 1771 1772int |
1765mac_check_vnode_op(struct ucred *cred, struct vnode *vp, int op) | 1773mac_check_vnode_open(struct ucred *cred, struct vnode *vp, mode_t acc_mode) |
1766{ 1767 int error; 1768 | 1774{ 1775 int error; 1776 |
1777 ASSERT_VOP_LOCKED(vp, "mac_check_vnode_open"); 1778 |
|
1769 if (!mac_enforce_fs) 1770 return (0); 1771 | 1779 if (!mac_enforce_fs) 1780 return (0); 1781 |
1772 ASSERT_VOP_LOCKED(vp, "mac_check_vnode_op"); | 1782 error = vn_refreshlabel(vp, cred); 1783 if (error) 1784 return (error); |
1773 | 1785 |
1786 MAC_CHECK(check_vnode_open, cred, vp, &vp->v_label, acc_mode); 1787 return (error); 1788} 1789 1790int 1791mac_check_vnode_poll(struct ucred *cred, struct vnode *vp) 1792{ 1793 int error; 1794 1795 ASSERT_VOP_LOCKED(vp, "mac_check_vnode_poll"); 1796 1797 if (!mac_enforce_fs) 1798 return (0); 1799 |
|
1774 error = vn_refreshlabel(vp, cred); 1775 if (error) 1776 return (error); 1777 | 1800 error = vn_refreshlabel(vp, cred); 1801 if (error) 1802 return (error); 1803 |
1778 MAC_CHECK(check_vnode_op, cred, vp, &vp->v_label, op); | 1804 MAC_CHECK(check_vnode_poll, cred, vp, &vp->v_label); |
1779 1780 return (error); 1781} 1782 1783int | 1805 1806 return (error); 1807} 1808 1809int |
1784mac_check_vnode_open(struct ucred *cred, struct vnode *vp, mode_t acc_mode) | 1810mac_check_vnode_read(struct ucred *cred, struct vnode *vp) |
1785{ 1786 int error; 1787 | 1811{ 1812 int error; 1813 |
1788 ASSERT_VOP_LOCKED(vp, "mac_check_vnode_open"); | 1814 ASSERT_VOP_LOCKED(vp, "mac_check_vnode_read"); |
1789 1790 if (!mac_enforce_fs) 1791 return (0); 1792 1793 error = vn_refreshlabel(vp, cred); 1794 if (error) 1795 return (error); 1796 | 1815 1816 if (!mac_enforce_fs) 1817 return (0); 1818 1819 error = vn_refreshlabel(vp, cred); 1820 if (error) 1821 return (error); 1822 |
1797 MAC_CHECK(check_vnode_open, cred, vp, &vp->v_label, acc_mode); | 1823 MAC_CHECK(check_vnode_read, cred, vp, &vp->v_label); 1824 |
1798 return (error); 1799} 1800 1801int 1802mac_check_vnode_readdir(struct ucred *cred, struct vnode *dvp) 1803{ 1804 int error; 1805 --- 239 unchanged lines hidden (view full) --- 2045 error = vn_refreshlabel(vp, cred); 2046 if (error) 2047 return (error); 2048 2049 MAC_CHECK(check_vnode_stat, cred, vp, &vp->v_label); 2050 return (error); 2051} 2052 | 1825 return (error); 1826} 1827 1828int 1829mac_check_vnode_readdir(struct ucred *cred, struct vnode *dvp) 1830{ 1831 int error; 1832 --- 239 unchanged lines hidden (view full) --- 2072 error = vn_refreshlabel(vp, cred); 2073 if (error) 2074 return (error); 2075 2076 MAC_CHECK(check_vnode_stat, cred, vp, &vp->v_label); 2077 return (error); 2078} 2079 |
2080int 2081mac_check_vnode_write(struct ucred *cred, struct vnode *vp) 2082{ 2083 int error; 2084 2085 ASSERT_VOP_LOCKED(vp, "mac_check_vnode_write"); 2086 2087 if (!mac_enforce_fs) 2088 return (0); 2089 2090 error = vn_refreshlabel(vp, cred); 2091 if (error) 2092 return (error); 2093 2094 MAC_CHECK(check_vnode_write, cred, vp, &vp->v_label); 2095 2096 return (error); 2097} 2098 2099 |
|
2053/* 2054 * When relabeling a process, call out to the policies for the maximum 2055 * permission allowed for each object type we know about in its 2056 * memory space, and revoke access (in the least surprising ways we 2057 * know) when necessary. The process lock is not held here. 2058 */ 2059static void 2060mac_cred_mmapped_drop_perms(struct thread *td, struct ucred *cred) --- 1114 unchanged lines hidden --- | 2100/* 2101 * When relabeling a process, call out to the policies for the maximum 2102 * permission allowed for each object type we know about in its 2103 * memory space, and revoke access (in the least surprising ways we 2104 * know) when necessary. The process lock is not held here. 2105 */ 2106static void 2107mac_cred_mmapped_drop_perms(struct thread *td, struct ucred *cred) --- 1114 unchanged lines hidden --- |