Module Name: src Committed By: elad Date: Fri Oct 2 21:56:29 UTC 2009
Modified Files: src/sys/kern: sys_pset.c src/sys/secmodel/suser: secmodel_suser.c Log Message: Move psets security policy back to the subsystem and keep suser logic only in the suser secmodel code. To generate a diff of this commit: cvs rdiff -u -r1.12 -r1.13 src/sys/kern/sys_pset.c cvs rdiff -u -r1.2 -r1.3 src/sys/secmodel/suser/secmodel_suser.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/kern/sys_pset.c diff -u src/sys/kern/sys_pset.c:1.12 src/sys/kern/sys_pset.c:1.13 --- src/sys/kern/sys_pset.c:1.12 Tue Mar 3 21:55:06 2009 +++ src/sys/kern/sys_pset.c Fri Oct 2 21:56:28 2009 @@ -1,4 +1,4 @@ -/* $NetBSD: sys_pset.c,v 1.12 2009/03/03 21:55:06 rmind Exp $ */ +/* $NetBSD: sys_pset.c,v 1.13 2009/10/02 21:56:28 elad Exp $ */ /* * Copyright (c) 2008, Mindaugas Rasiukevicius <rmind at NetBSD org> @@ -36,7 +36,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: sys_pset.c,v 1.12 2009/03/03 21:55:06 rmind Exp $"); +__KERNEL_RCSID(0, "$NetBSD: sys_pset.c,v 1.13 2009/10/02 21:56:28 elad Exp $"); #include <sys/param.h> @@ -56,12 +56,37 @@ static pset_info_t ** psets; static u_int psets_max; static u_int psets_count; +static kauth_listener_t psets_listener; static int psets_realloc(int); static int psid_validate(psetid_t, bool); static int kern_pset_create(psetid_t *); static int kern_pset_destroy(psetid_t); +static int +psets_listener_cb(kauth_cred_t cred, kauth_action_t action, void *cookie, + void *arg0, void *arg1, void *arg2, void *arg3) +{ + psetid_t id; + enum kauth_system_req req; + int result; + + result = KAUTH_RESULT_DEFER; + req = (enum kauth_system_req)arg0; + id = (psetid_t)(unsigned long)arg1; + + if (action != KAUTH_SYSTEM_PSET) + return result; + + if ((req == KAUTH_REQ_SYSTEM_PSET_ASSIGN) || + (req == KAUTH_REQ_SYSTEM_PSET_BIND)) { + if (id == PS_QUERY) + result = KAUTH_RESULT_ALLOW; + } + + return result; +} + /* * Initialization of the processor-sets. */ @@ -72,6 +97,9 @@ psets_max = max(MAXCPUS, 32); psets = kmem_zalloc(psets_max * sizeof(void *), KM_SLEEP); psets_count = 0; + + psets_listener = kauth_listen_scope(KAUTH_SCOPE_SYSTEM, + psets_listener_cb, NULL); } /* Index: src/sys/secmodel/suser/secmodel_suser.c diff -u src/sys/secmodel/suser/secmodel_suser.c:1.2 src/sys/secmodel/suser/secmodel_suser.c:1.3 --- src/sys/secmodel/suser/secmodel_suser.c:1.2 Fri Oct 2 21:47:35 2009 +++ src/sys/secmodel/suser/secmodel_suser.c Fri Oct 2 21:56:28 2009 @@ -1,4 +1,4 @@ -/* $NetBSD: secmodel_suser.c,v 1.2 2009/10/02 21:47:35 elad Exp $ */ +/* $NetBSD: secmodel_suser.c,v 1.3 2009/10/02 21:56:28 elad Exp $ */ /*- * Copyright (c) 2006 Elad Efrat <e...@netbsd.org> * All rights reserved. @@ -38,7 +38,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: secmodel_suser.c,v 1.2 2009/10/02 21:47:35 elad Exp $"); +__KERNEL_RCSID(0, "$NetBSD: secmodel_suser.c,v 1.3 2009/10/02 21:56:28 elad Exp $"); #include <sys/types.h> #include <sys/param.h> @@ -398,19 +398,10 @@ break; - case KAUTH_SYSTEM_PSET: { - psetid_t id; - - id = (psetid_t)(unsigned long)arg1; - + case KAUTH_SYSTEM_PSET: switch (req) { case KAUTH_REQ_SYSTEM_PSET_ASSIGN: case KAUTH_REQ_SYSTEM_PSET_BIND: - if (isroot || id == PS_QUERY) - result = KAUTH_RESULT_ALLOW; - - break; - case KAUTH_REQ_SYSTEM_PSET_CREATE: case KAUTH_REQ_SYSTEM_PSET_DESTROY: if (isroot) @@ -423,7 +414,6 @@ } break; - } case KAUTH_SYSTEM_TIME: switch (req) {