aboutsummaryrefslogtreecommitdiff
path: root/sys/security
diff options
context:
space:
mode:
authorPawel Jakub Dawidek <pjd@FreeBSD.org>2004-02-22 12:31:44 +0000
committerPawel Jakub Dawidek <pjd@FreeBSD.org>2004-02-22 12:31:44 +0000
commit63dba32b76bdbc5438c5121c7209f7a8f6774b28 (patch)
tree1c4d31f4b056d45cd39f0c68f6aad1b1af2ebd1c /sys/security
parent47c524ddd41a4d07b2f0d1847ff22c43babbe1ed (diff)
Notes
Diffstat (limited to 'sys/security')
-rw-r--r--sys/security/mac/mac_framework.h7
-rw-r--r--sys/security/mac/mac_policy.h8
-rw-r--r--sys/security/mac/mac_system.c7
-rw-r--r--sys/security/mac_biba/mac_biba.c16
-rw-r--r--sys/security/mac_lomac/mac_lomac.c16
-rw-r--r--sys/security/mac_stub/mac_stub.c4
-rw-r--r--sys/security/mac_test/mac_test.c4
7 files changed, 26 insertions, 36 deletions
diff --git a/sys/security/mac/mac_framework.h b/sys/security/mac/mac_framework.h
index 895c7e305eb1a..59c247a5f5929 100644
--- a/sys/security/mac/mac_framework.h
+++ b/sys/security/mac/mac_framework.h
@@ -120,6 +120,8 @@ struct mount;
struct proc;
struct sockaddr;
struct socket;
+struct sysctl_oid;
+struct sysctl_req;
struct pipepair;
struct thread;
struct timespec;
@@ -281,9 +283,8 @@ int mac_check_system_reboot(struct ucred *cred, int howto);
int mac_check_system_settime(struct ucred *cred);
int mac_check_system_swapon(struct ucred *cred, struct vnode *vp);
int mac_check_system_swapoff(struct ucred *cred, struct vnode *vp);
-int mac_check_system_sysctl(struct ucred *cred, int *name,
- u_int namelen, void *old, size_t *oldlenp, int inkernel,
- void *new, size_t newlen);
+int mac_check_system_sysctl(struct ucred *cred, struct sysctl_oid *oidp,
+ void *arg1, int arg2, struct sysctl_req *req);
int mac_check_vnode_access(struct ucred *cred, struct vnode *vp,
int acc_mode);
int mac_check_vnode_chdir(struct ucred *cred, struct vnode *dvp);
diff --git a/sys/security/mac/mac_policy.h b/sys/security/mac/mac_policy.h
index f1d45b228ef7e..90604381a3a8f 100644
--- a/sys/security/mac/mac_policy.h
+++ b/sys/security/mac/mac_policy.h
@@ -63,6 +63,8 @@ struct mount;
struct pipepair;
struct sbuf;
struct socket;
+struct sysctl_oid;
+struct sysctl_req;
struct ucred;
struct uio;
struct vnode;
@@ -362,9 +364,9 @@ struct mac_policy_ops {
struct vnode *vp, struct label *label);
int (*mpo_check_system_swapoff)(struct ucred *cred,
struct vnode *vp, struct label *label);
- int (*mpo_check_system_sysctl)(struct ucred *cred, int *name,
- u_int namelen, void *old, size_t *oldlenp, int inkernel,
- void *new, size_t newlen);
+ int (*mpo_check_system_sysctl)(struct ucred *cred,
+ struct sysctl_oid *oidp, void *arg1, int arg2,
+ struct sysctl_req *req);
int (*mpo_check_vnode_access)(struct ucred *cred,
struct vnode *vp, struct label *label, int acc_mode);
int (*mpo_check_vnode_chdir)(struct ucred *cred,
diff --git a/sys/security/mac/mac_system.c b/sys/security/mac/mac_system.c
index 14755cf4b3880..128f2c5988dc7 100644
--- a/sys/security/mac/mac_system.c
+++ b/sys/security/mac/mac_system.c
@@ -249,8 +249,8 @@ mac_check_system_swapoff(struct ucred *cred, struct vnode *vp)
}
int
-mac_check_system_sysctl(struct ucred *cred, int *name, u_int namelen,
- void *old, size_t *oldlenp, int inkernel, void *new, size_t newlen)
+mac_check_system_sysctl(struct ucred *cred, struct sysctl_oid *oidp, void *arg1,
+ int arg2, struct sysctl_req *req)
{
int error;
@@ -261,8 +261,7 @@ mac_check_system_sysctl(struct ucred *cred, int *name, u_int namelen,
if (!mac_enforce_system)
return (0);
- MAC_CHECK(check_system_sysctl, cred, name, namelen, old, oldlenp,
- inkernel, new, newlen);
+ MAC_CHECK(check_system_sysctl, cred, oidp, arg1, arg2, req);
return (error);
}
diff --git a/sys/security/mac_biba/mac_biba.c b/sys/security/mac_biba/mac_biba.c
index 63bea162165c0..545ba43bed039 100644
--- a/sys/security/mac_biba/mac_biba.c
+++ b/sys/security/mac_biba/mac_biba.c
@@ -1973,8 +1973,8 @@ mac_biba_check_system_swapoff(struct ucred *cred, struct vnode *vp,
}
static int
-mac_biba_check_system_sysctl(struct ucred *cred, int *name, u_int namelen,
- void *old, size_t *oldlenp, int inkernel, void *new, size_t newlen)
+mac_biba_check_system_sysctl(struct ucred *cred, struct sysctl_oid *oidp,
+ void *arg1, int arg2, struct sysctl_req *req)
{
struct mac_biba *subj;
int error;
@@ -1985,16 +1985,10 @@ mac_biba_check_system_sysctl(struct ucred *cred, int *name, u_int namelen,
subj = SLOT(cred->cr_label);
/*
- * In general, treat sysctl variables as biba/high, but also
- * require privilege to change them, since they are a
- * communications channel between grades. Exempt MIB
- * queries from this due to undocmented sysctl magic.
- * XXXMAC: This probably requires some more review.
+ * Treat sysctl variables without CTLFLAG_ANYBODY flag as
+ * biba/high, but also require privilege to change them.
*/
- if (new != NULL) {
- if (namelen > 0 && name[0] == 0)
- return (0);
-
+ if (req->newptr != NULL && (oidp->oid_kind & CTLFLAG_ANYBODY) == 0) {
if (!mac_biba_subject_dominate_high(subj))
return (EACCES);
diff --git a/sys/security/mac_lomac/mac_lomac.c b/sys/security/mac_lomac/mac_lomac.c
index f1e7a28184232..9502c05bcf099 100644
--- a/sys/security/mac_lomac/mac_lomac.c
+++ b/sys/security/mac_lomac/mac_lomac.c
@@ -2063,8 +2063,8 @@ mac_lomac_check_system_swapon(struct ucred *cred, struct vnode *vp,
}
static int
-mac_lomac_check_system_sysctl(struct ucred *cred, int *name, u_int namelen,
- void *old, size_t *oldlenp, int inkernel, void *new, size_t newlen)
+mac_lomac_check_system_sysctl(struct ucred *cred, struct sysctl_oid *oidp,
+ void *arg1, int arg2, struct sysctl_req *req)
{
struct mac_lomac *subj;
@@ -2074,16 +2074,10 @@ mac_lomac_check_system_sysctl(struct ucred *cred, int *name, u_int namelen,
subj = SLOT(cred->cr_label);
/*
- * In general, treat sysctl variables as lomac/high, but also
- * require privilege to change them, since they are a
- * communications channel between grades. Exempt MIB
- * queries from this due to undocmented sysctl magic.
- * XXXMAC: This probably requires some more review.
+ * Treat sysctl variables without CTLFLAG_ANYBODY flag as
+ * lomac/high, but also require privilege to change them.
*/
- if (new != NULL) {
- if (namelen > 0 && name[0] == 0)
- return (0);
-
+ if (req->newptr != NULL && (oidp->oid_kind & CTLFLAG_ANYBODY) == 0) {
#ifdef notdef
if (!mac_lomac_subject_dominate_high(subj))
return (EACCES);
diff --git a/sys/security/mac_stub/mac_stub.c b/sys/security/mac_stub/mac_stub.c
index 1b573ed30983a..ea113e126b5a4 100644
--- a/sys/security/mac_stub/mac_stub.c
+++ b/sys/security/mac_stub/mac_stub.c
@@ -757,8 +757,8 @@ stub_check_system_swapoff(struct ucred *cred, struct vnode *vp,
}
static int
-stub_check_system_sysctl(struct ucred *cred, int *name, u_int namelen,
- void *old, size_t *oldlenp, int inkernel, void *new, size_t newlen)
+stub_check_system_sysctl(struct ucred *cred, struct sysctl_oid *oidp,
+ void *arg1, int arg2, struct sysctl_req *req)
{
return (0);
diff --git a/sys/security/mac_test/mac_test.c b/sys/security/mac_test/mac_test.c
index f329f8bacf499..b02b36aa02d83 100644
--- a/sys/security/mac_test/mac_test.c
+++ b/sys/security/mac_test/mac_test.c
@@ -1470,8 +1470,8 @@ mac_test_check_system_swapoff(struct ucred *cred, struct vnode *vp,
}
static int
-mac_test_check_system_sysctl(struct ucred *cred, int *name, u_int namelen,
- void *old, size_t *oldlenp, int inkernel, void *new, size_t newlen)
+mac_test_check_system_sysctl(struct ucred *cred, struct sysctl_oid *oidp,
+ void *arg1, int arg2, struct sysctl_req *req)
{
ASSERT_CRED_LABEL(cred->cr_label);