diff options
| -rw-r--r-- | sys/alpha/alpha/sys_machdep.c | 9 | ||||
| -rw-r--r-- | sys/amd64/amd64/sys_machdep.c | 6 | ||||
| -rw-r--r-- | sys/i386/i386/sys_machdep.c | 6 | ||||
| -rw-r--r-- | sys/kern/kern_mac.c | 12 | ||||
| -rw-r--r-- | sys/security/mac/mac_framework.c | 12 | ||||
| -rw-r--r-- | sys/security/mac/mac_framework.h | 1 | ||||
| -rw-r--r-- | sys/security/mac/mac_internal.h | 12 | ||||
| -rw-r--r-- | sys/security/mac/mac_net.c | 12 | ||||
| -rw-r--r-- | sys/security/mac/mac_pipe.c | 12 | ||||
| -rw-r--r-- | sys/security/mac/mac_policy.h | 1 | ||||
| -rw-r--r-- | sys/security/mac/mac_process.c | 12 | ||||
| -rw-r--r-- | sys/security/mac/mac_syscalls.c | 12 | ||||
| -rw-r--r-- | sys/security/mac/mac_system.c | 12 | ||||
| -rw-r--r-- | sys/security/mac/mac_vfs.c | 12 | ||||
| -rw-r--r-- | sys/sys/mac.h | 1 | ||||
| -rw-r--r-- | sys/sys/mac_policy.h | 1 |
16 files changed, 133 insertions, 0 deletions
diff --git a/sys/alpha/alpha/sys_machdep.c b/sys/alpha/alpha/sys_machdep.c index e2e23ec9f4c2..94334bcbedd9 100644 --- a/sys/alpha/alpha/sys_machdep.c +++ b/sys/alpha/alpha/sys_machdep.c @@ -35,9 +35,12 @@ * */ +#include "opt_mac.h" + #include <sys/param.h> #include <sys/systm.h> #include <sys/lock.h> +#include <sys/mac.h> #include <sys/mutex.h> #include <sys/proc.h> #include <sys/sysent.h> @@ -114,6 +117,12 @@ alpha_sethae(struct thread *td, char *args) if (error) return (error); +#ifdef MAC + error = mac_check_sysarch_ioperm(td->td_ucred); + if (error) + return (error); +#endif + error = securelevel_gt(td->td_ucred, 0); if (error) return (error); diff --git a/sys/amd64/amd64/sys_machdep.c b/sys/amd64/amd64/sys_machdep.c index 3e2ec7424d5f..ce26093d53b8 100644 --- a/sys/amd64/amd64/sys_machdep.c +++ b/sys/amd64/amd64/sys_machdep.c @@ -36,10 +36,12 @@ */ #include "opt_kstack_pages.h" +#include "opt_mac.h" #include <sys/param.h> #include <sys/systm.h> #include <sys/lock.h> +#include <sys/mac.h> #include <sys/malloc.h> #include <sys/mutex.h> #include <sys/proc.h> @@ -183,6 +185,10 @@ i386_set_ioperm(td, args) if ((error = copyin(args, &ua, sizeof(struct i386_ioperm_args))) != 0) return (error); +#ifdef MAC + if ((error = mac_check_sysarch_ioperm(td->td_ucred)) != 0) + return (error); +#endif if ((error = suser(td)) != 0) return (error); if ((error = securelevel_gt(td->td_ucred, 0)) != 0) diff --git a/sys/i386/i386/sys_machdep.c b/sys/i386/i386/sys_machdep.c index 3e2ec7424d5f..ce26093d53b8 100644 --- a/sys/i386/i386/sys_machdep.c +++ b/sys/i386/i386/sys_machdep.c @@ -36,10 +36,12 @@ */ #include "opt_kstack_pages.h" +#include "opt_mac.h" #include <sys/param.h> #include <sys/systm.h> #include <sys/lock.h> +#include <sys/mac.h> #include <sys/malloc.h> #include <sys/mutex.h> #include <sys/proc.h> @@ -183,6 +185,10 @@ i386_set_ioperm(td, args) if ((error = copyin(args, &ua, sizeof(struct i386_ioperm_args))) != 0) return (error); +#ifdef MAC + if ((error = mac_check_sysarch_ioperm(td->td_ucred)) != 0) + return (error); +#endif if ((error = suser(td)) != 0) return (error); if ((error = securelevel_gt(td->td_ucred, 0)) != 0) diff --git a/sys/kern/kern_mac.c b/sys/kern/kern_mac.c index a7660069a258..6b2e6534e10f 100644 --- a/sys/kern/kern_mac.c +++ b/sys/kern/kern_mac.c @@ -2623,6 +2623,18 @@ mac_check_socket_visible(struct ucred *cred, struct socket *socket) } int +mac_check_sysarch_ioperm(struct ucred *cred) +{ + int error; + + if (!mac_enforce_system) + return (0); + + MAC_CHECK(check_sysarch_ioperm, cred); + return (error); +} + +int mac_check_system_acct(struct ucred *cred, struct vnode *vp) { int error; diff --git a/sys/security/mac/mac_framework.c b/sys/security/mac/mac_framework.c index a7660069a258..6b2e6534e10f 100644 --- a/sys/security/mac/mac_framework.c +++ b/sys/security/mac/mac_framework.c @@ -2623,6 +2623,18 @@ mac_check_socket_visible(struct ucred *cred, struct socket *socket) } int +mac_check_sysarch_ioperm(struct ucred *cred) +{ + int error; + + if (!mac_enforce_system) + return (0); + + MAC_CHECK(check_sysarch_ioperm, cred); + return (error); +} + +int mac_check_system_acct(struct ucred *cred, struct vnode *vp) { int error; diff --git a/sys/security/mac/mac_framework.h b/sys/security/mac/mac_framework.h index 8e25d0d097c0..c6b9c73ef55a 100644 --- a/sys/security/mac/mac_framework.h +++ b/sys/security/mac/mac_framework.h @@ -264,6 +264,7 @@ int mac_check_socket_listen(struct ucred *cred, struct socket *so); int mac_check_socket_receive(struct ucred *cred, struct socket *so); int mac_check_socket_send(struct ucred *cred, struct socket *so); int mac_check_socket_visible(struct ucred *cred, struct socket *so); +int mac_check_sysarch_ioperm(struct ucred *cred); int mac_check_system_acct(struct ucred *cred, struct vnode *vp); int mac_check_system_nfsd(struct ucred *cred); int mac_check_system_reboot(struct ucred *cred, int howto); diff --git a/sys/security/mac/mac_internal.h b/sys/security/mac/mac_internal.h index a7660069a258..6b2e6534e10f 100644 --- a/sys/security/mac/mac_internal.h +++ b/sys/security/mac/mac_internal.h @@ -2623,6 +2623,18 @@ mac_check_socket_visible(struct ucred *cred, struct socket *socket) } int +mac_check_sysarch_ioperm(struct ucred *cred) +{ + int error; + + if (!mac_enforce_system) + return (0); + + MAC_CHECK(check_sysarch_ioperm, cred); + return (error); +} + +int mac_check_system_acct(struct ucred *cred, struct vnode *vp) { int error; diff --git a/sys/security/mac/mac_net.c b/sys/security/mac/mac_net.c index a7660069a258..6b2e6534e10f 100644 --- a/sys/security/mac/mac_net.c +++ b/sys/security/mac/mac_net.c @@ -2623,6 +2623,18 @@ mac_check_socket_visible(struct ucred *cred, struct socket *socket) } int +mac_check_sysarch_ioperm(struct ucred *cred) +{ + int error; + + if (!mac_enforce_system) + return (0); + + MAC_CHECK(check_sysarch_ioperm, cred); + return (error); +} + +int mac_check_system_acct(struct ucred *cred, struct vnode *vp) { int error; diff --git a/sys/security/mac/mac_pipe.c b/sys/security/mac/mac_pipe.c index a7660069a258..6b2e6534e10f 100644 --- a/sys/security/mac/mac_pipe.c +++ b/sys/security/mac/mac_pipe.c @@ -2623,6 +2623,18 @@ mac_check_socket_visible(struct ucred *cred, struct socket *socket) } int +mac_check_sysarch_ioperm(struct ucred *cred) +{ + int error; + + if (!mac_enforce_system) + return (0); + + MAC_CHECK(check_sysarch_ioperm, cred); + return (error); +} + +int mac_check_system_acct(struct ucred *cred, struct vnode *vp) { int error; diff --git a/sys/security/mac/mac_policy.h b/sys/security/mac/mac_policy.h index fc08f2a7ae69..d536f05659f6 100644 --- a/sys/security/mac/mac_policy.h +++ b/sys/security/mac/mac_policy.h @@ -322,6 +322,7 @@ struct mac_policy_ops { struct socket *so, struct label *socketlabel); int (*mpo_check_socket_visible)(struct ucred *cred, struct socket *so, struct label *socketlabel); + int (*mpo_check_sysarch_ioperm)(struct ucred *cred); int (*mpo_check_system_acct)(struct ucred *cred, struct vnode *vp, struct label *vlabel); int (*mpo_check_system_nfsd)(struct ucred *cred); diff --git a/sys/security/mac/mac_process.c b/sys/security/mac/mac_process.c index a7660069a258..6b2e6534e10f 100644 --- a/sys/security/mac/mac_process.c +++ b/sys/security/mac/mac_process.c @@ -2623,6 +2623,18 @@ mac_check_socket_visible(struct ucred *cred, struct socket *socket) } int +mac_check_sysarch_ioperm(struct ucred *cred) +{ + int error; + + if (!mac_enforce_system) + return (0); + + MAC_CHECK(check_sysarch_ioperm, cred); + return (error); +} + +int mac_check_system_acct(struct ucred *cred, struct vnode *vp) { int error; diff --git a/sys/security/mac/mac_syscalls.c b/sys/security/mac/mac_syscalls.c index a7660069a258..6b2e6534e10f 100644 --- a/sys/security/mac/mac_syscalls.c +++ b/sys/security/mac/mac_syscalls.c @@ -2623,6 +2623,18 @@ mac_check_socket_visible(struct ucred *cred, struct socket *socket) } int +mac_check_sysarch_ioperm(struct ucred *cred) +{ + int error; + + if (!mac_enforce_system) + return (0); + + MAC_CHECK(check_sysarch_ioperm, cred); + return (error); +} + +int mac_check_system_acct(struct ucred *cred, struct vnode *vp) { int error; diff --git a/sys/security/mac/mac_system.c b/sys/security/mac/mac_system.c index a7660069a258..6b2e6534e10f 100644 --- a/sys/security/mac/mac_system.c +++ b/sys/security/mac/mac_system.c @@ -2623,6 +2623,18 @@ mac_check_socket_visible(struct ucred *cred, struct socket *socket) } int +mac_check_sysarch_ioperm(struct ucred *cred) +{ + int error; + + if (!mac_enforce_system) + return (0); + + MAC_CHECK(check_sysarch_ioperm, cred); + return (error); +} + +int mac_check_system_acct(struct ucred *cred, struct vnode *vp) { int error; diff --git a/sys/security/mac/mac_vfs.c b/sys/security/mac/mac_vfs.c index a7660069a258..6b2e6534e10f 100644 --- a/sys/security/mac/mac_vfs.c +++ b/sys/security/mac/mac_vfs.c @@ -2623,6 +2623,18 @@ mac_check_socket_visible(struct ucred *cred, struct socket *socket) } int +mac_check_sysarch_ioperm(struct ucred *cred) +{ + int error; + + if (!mac_enforce_system) + return (0); + + MAC_CHECK(check_sysarch_ioperm, cred); + return (error); +} + +int mac_check_system_acct(struct ucred *cred, struct vnode *vp) { int error; diff --git a/sys/sys/mac.h b/sys/sys/mac.h index 8e25d0d097c0..c6b9c73ef55a 100644 --- a/sys/sys/mac.h +++ b/sys/sys/mac.h @@ -264,6 +264,7 @@ int mac_check_socket_listen(struct ucred *cred, struct socket *so); int mac_check_socket_receive(struct ucred *cred, struct socket *so); int mac_check_socket_send(struct ucred *cred, struct socket *so); int mac_check_socket_visible(struct ucred *cred, struct socket *so); +int mac_check_sysarch_ioperm(struct ucred *cred); int mac_check_system_acct(struct ucred *cred, struct vnode *vp); int mac_check_system_nfsd(struct ucred *cred); int mac_check_system_reboot(struct ucred *cred, int howto); diff --git a/sys/sys/mac_policy.h b/sys/sys/mac_policy.h index fc08f2a7ae69..d536f05659f6 100644 --- a/sys/sys/mac_policy.h +++ b/sys/sys/mac_policy.h @@ -322,6 +322,7 @@ struct mac_policy_ops { struct socket *so, struct label *socketlabel); int (*mpo_check_socket_visible)(struct ucred *cred, struct socket *so, struct label *socketlabel); + int (*mpo_check_sysarch_ioperm)(struct ucred *cred); int (*mpo_check_system_acct)(struct ucred *cred, struct vnode *vp, struct label *vlabel); int (*mpo_check_system_nfsd)(struct ucred *cred); |
