Deleted Added
full compact
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 ---