Module Name: src Committed By: elad Date: Sat Oct 3 02:01:12 UTC 2009
Modified Files: src/sys/dev: clockctl.c src/sys/secmodel/suser: secmodel_suser.c Log Message: Move clockctl policy exception back to the subsystem. To generate a diff of this commit: cvs rdiff -u -r1.27 -r1.28 src/sys/dev/clockctl.c cvs rdiff -u -r1.21 -r1.22 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/dev/clockctl.c diff -u src/sys/dev/clockctl.c:1.27 src/sys/dev/clockctl.c:1.28 --- src/sys/dev/clockctl.c:1.27 Sun Feb 22 13:06:59 2009 +++ src/sys/dev/clockctl.c Sat Oct 3 02:01:12 2009 @@ -1,4 +1,4 @@ -/* $NetBSD: clockctl.c,v 1.27 2009/02/22 13:06:59 nakayama Exp $ */ +/* $NetBSD: clockctl.c,v 1.28 2009/10/03 02:01:12 elad Exp $ */ /*- * Copyright (c) 2001 The NetBSD Foundation, Inc. @@ -31,7 +31,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: clockctl.c,v 1.27 2009/02/22 13:06:59 nakayama Exp $"); +__KERNEL_RCSID(0, "$NetBSD: clockctl.c,v 1.28 2009/10/03 02:01:12 elad Exp $"); #include "opt_ntp.h" #include "opt_compat_netbsd.h" @@ -47,6 +47,7 @@ #ifdef NTP #include <sys/timex.h> #endif /* NTP */ +#include <sys/kauth.h> #include <sys/clockctl.h> #ifdef COMPAT_50 @@ -64,12 +65,39 @@ nostop, notty, nopoll, nommap, nokqfilter, D_OTHER, }; +static kauth_listener_t clockctl_listener; + +static int +clockctl_listener_cb(kauth_cred_t cred, kauth_action_t action, void *cookie, + void *arg0, void *arg1, void *arg2, void *arg3) +{ + int result; + enum kauth_system_req req; + bool device_context; + + result = KAUTH_RESULT_DEFER; + req = (enum kauth_system_req)arg0; + + if ((action != KAUTH_SYSTEM_TIME) || + (req != KAUTH_REQ_SYSTEM_TIME_SYSTEM)) + return result; + + device_context = (bool)arg3; + + /* Device is controlled by permissions, so allow. */ + if (device_context) + result = KAUTH_RESULT_ALLOW; + + return result; +} + /*ARGSUSED*/ void clockctlattach(int num) { - /* Nothing to set up before open is called */ - return; + + clockctl_listener = kauth_listen_scope(KAUTH_SCOPE_SYSTEM, + clockctl_listener_cb, NULL); } int Index: src/sys/secmodel/suser/secmodel_suser.c diff -u src/sys/secmodel/suser/secmodel_suser.c:1.21 src/sys/secmodel/suser/secmodel_suser.c:1.22 --- src/sys/secmodel/suser/secmodel_suser.c:1.21 Sat Oct 3 01:52:14 2009 +++ src/sys/secmodel/suser/secmodel_suser.c Sat Oct 3 02:01:12 2009 @@ -1,4 +1,4 @@ -/* $NetBSD: secmodel_suser.c,v 1.21 2009/10/03 01:52:14 elad Exp $ */ +/* $NetBSD: secmodel_suser.c,v 1.22 2009/10/03 02:01:12 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.21 2009/10/03 01:52:14 elad Exp $"); +__KERNEL_RCSID(0, "$NetBSD: secmodel_suser.c,v 1.22 2009/10/03 02:01:12 elad Exp $"); #include <sys/types.h> #include <sys/param.h> @@ -410,19 +410,7 @@ case KAUTH_REQ_SYSTEM_TIME_ADJTIME: case KAUTH_REQ_SYSTEM_TIME_NTPADJTIME: case KAUTH_REQ_SYSTEM_TIME_TIMECOUNTERS: - if (isroot) - result = KAUTH_RESULT_ALLOW; - break; - - case KAUTH_REQ_SYSTEM_TIME_SYSTEM: { - bool device_context = (bool)arg3; - - if (device_context || isroot) - result = KAUTH_RESULT_ALLOW; - - break; - } - + case KAUTH_REQ_SYSTEM_TIME_SYSTEM: case KAUTH_REQ_SYSTEM_TIME_RTCOFFSET: if (isroot) result = KAUTH_RESULT_ALLOW;