Module Name:    src
Committed By:   elad
Date:           Tue Oct  6 21:07:06 UTC 2009

Modified Files:
        src/sys/arch/x86/x86: x86_machdep.c
        src/sys/kern: init_main.c kern_stub.c
        src/sys/secmodel/suser: secmodel_suser.c
        src/sys/sys: systm.h

Log Message:
Add a (weak aliased) machdep_init() as a place to do machdep initialization
that can't happen as early as the other init functions as called from
cpu_startup() -- for example, register kauth(9) listeners.

Put unprivileged policy in the x86 code; used by i386, amd64, and xen.


To generate a diff of this commit:
cvs rdiff -u -r1.34 -r1.35 src/sys/arch/x86/x86/x86_machdep.c
cvs rdiff -u -r1.405 -r1.406 src/sys/kern/init_main.c
cvs rdiff -u -r1.19 -r1.20 src/sys/kern/kern_stub.c
cvs rdiff -u -r1.28 -r1.29 src/sys/secmodel/suser/secmodel_suser.c
cvs rdiff -u -r1.235 -r1.236 src/sys/sys/systm.h

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/arch/x86/x86/x86_machdep.c
diff -u src/sys/arch/x86/x86/x86_machdep.c:1.34 src/sys/arch/x86/x86/x86_machdep.c:1.35
--- src/sys/arch/x86/x86/x86_machdep.c:1.34	Mon Oct  5 23:59:31 2009
+++ src/sys/arch/x86/x86/x86_machdep.c	Tue Oct  6 21:07:05 2009
@@ -1,4 +1,4 @@
-/*	$NetBSD: x86_machdep.c,v 1.34 2009/10/05 23:59:31 rmind Exp $	*/
+/*	$NetBSD: x86_machdep.c,v 1.35 2009/10/06 21:07:05 elad Exp $	*/
 
 /*-
  * Copyright (c) 2002, 2006, 2007 YAMAMOTO Takashi,
@@ -31,7 +31,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: x86_machdep.c,v 1.34 2009/10/05 23:59:31 rmind Exp $");
+__KERNEL_RCSID(0, "$NetBSD: x86_machdep.c,v 1.35 2009/10/06 21:07:05 elad Exp $");
 
 #include "opt_modular.h"
 
@@ -74,6 +74,8 @@
 
 /* --------------------------------------------------------------------- */
 
+static kauth_listener_t x86_listener;
+
 /*
  * Given the type of a bootinfo entry, looks for a matching item inside
  * the bootinfo structure.  If found, returns a pointer to it (which must
@@ -816,3 +818,35 @@
 		DELAY(500000);  /* wait 0.5 sec to see if that did it */
 	}
 }
+
+static int
+x86_listener_cb(kauth_cred_t cred, kauth_action_t action, void *cookie,
+    void *arg0, void *arg1, void *arg2, void *arg3)
+{
+	int result;
+
+	result = KAUTH_RESULT_DEFER;
+
+	switch (action) {
+	case KAUTH_MACHDEP_IOPERM_GET:
+	case KAUTH_MACHDEP_LDT_GET:
+	case KAUTH_MACHDEP_LDT_SET:
+	case KAUTH_MACHDEP_MTRR_GET:
+		result = KAUTH_RESULT_ALLOW;
+
+		break;
+
+	default:
+		break;
+	}
+
+	return result;
+}
+
+void
+machdep_init(void)
+{
+
+	x86_listener = kauth_listen_scope(KAUTH_SCOPE_MACHDEP,
+	    x86_listener_cb, NULL);
+}

Index: src/sys/kern/init_main.c
diff -u src/sys/kern/init_main.c:1.405 src/sys/kern/init_main.c:1.406
--- src/sys/kern/init_main.c:1.405	Sat Oct  3 22:32:56 2009
+++ src/sys/kern/init_main.c	Tue Oct  6 21:07:05 2009
@@ -1,4 +1,4 @@
-/*	$NetBSD: init_main.c,v 1.405 2009/10/03 22:32:56 elad Exp $	*/
+/*	$NetBSD: init_main.c,v 1.406 2009/10/06 21:07:05 elad Exp $	*/
 
 /*-
  * Copyright (c) 2008, 2009 The NetBSD Foundation, Inc.
@@ -97,7 +97,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: init_main.c,v 1.405 2009/10/03 22:32:56 elad Exp $");
+__KERNEL_RCSID(0, "$NetBSD: init_main.c,v 1.406 2009/10/06 21:07:05 elad Exp $");
 
 #include "opt_ddb.h"
 #include "opt_ipsec.h"
@@ -569,6 +569,8 @@
 	wapbl_init();
 #endif
 
+	machdep_init();
+
 	/*
 	 * Create process 1 (init(8)).  We do this now, as Unix has
 	 * historically had init be process 1, and changing this would

Index: src/sys/kern/kern_stub.c
diff -u src/sys/kern/kern_stub.c:1.19 src/sys/kern/kern_stub.c:1.20
--- src/sys/kern/kern_stub.c:1.19	Sun Jul 19 02:50:44 2009
+++ src/sys/kern/kern_stub.c	Tue Oct  6 21:07:06 2009
@@ -1,4 +1,4 @@
-/*	$NetBSD: kern_stub.c,v 1.19 2009/07/19 02:50:44 rmind Exp $	*/
+/*	$NetBSD: kern_stub.c,v 1.20 2009/10/06 21:07:06 elad Exp $	*/
 
 /*-
  * Copyright (c) 2007, 2008 The NetBSD Foundation, Inc.
@@ -62,7 +62,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: kern_stub.c,v 1.19 2009/07/19 02:50:44 rmind Exp $");
+__KERNEL_RCSID(0, "$NetBSD: kern_stub.c,v 1.20 2009/10/06 21:07:06 elad Exp $");
 
 #include "opt_ptrace.h"
 #include "opt_ktrace.h"
@@ -130,6 +130,8 @@
 __weak_alias(ktr_point,nullop);
 #endif	/* KTRACE */
 
+__weak_alias(machdep_init,nullop);
+
 #if !defined(KERN_SA)
 /*
  * Scheduler activations system calls.  These need to remain, even when

Index: src/sys/secmodel/suser/secmodel_suser.c
diff -u src/sys/secmodel/suser/secmodel_suser.c:1.28 src/sys/secmodel/suser/secmodel_suser.c:1.29
--- src/sys/secmodel/suser/secmodel_suser.c:1.28	Tue Oct  6 20:34:22 2009
+++ src/sys/secmodel/suser/secmodel_suser.c	Tue Oct  6 21:07:06 2009
@@ -1,4 +1,4 @@
-/* $NetBSD: secmodel_suser.c,v 1.28 2009/10/06 20:34:22 elad Exp $ */
+/* $NetBSD: secmodel_suser.c,v 1.29 2009/10/06 21:07:06 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.28 2009/10/06 20:34:22 elad Exp $");
+__KERNEL_RCSID(0, "$NetBSD: secmodel_suser.c,v 1.29 2009/10/06 21:07:06 elad Exp $");
 
 #include <sys/types.h>
 #include <sys/param.h>
@@ -800,9 +800,6 @@
 	case KAUTH_MACHDEP_LDT_GET:
 	case KAUTH_MACHDEP_LDT_SET:
 	case KAUTH_MACHDEP_MTRR_GET:
-		result = KAUTH_RESULT_ALLOW;
-		break;
-
 	case KAUTH_MACHDEP_CACHEFLUSH:
 	case KAUTH_MACHDEP_IOPERM_SET:
 	case KAUTH_MACHDEP_IOPL:

Index: src/sys/sys/systm.h
diff -u src/sys/sys/systm.h:1.235 src/sys/sys/systm.h:1.236
--- src/sys/sys/systm.h:1.235	Sun Mar 29 10:58:28 2009
+++ src/sys/sys/systm.h	Tue Oct  6 21:07:05 2009
@@ -1,4 +1,4 @@
-/*	$NetBSD: systm.h,v 1.235 2009/03/29 10:58:28 ad Exp $	*/
+/*	$NetBSD: systm.h,v 1.236 2009/10/06 21:07:05 elad Exp $	*/
 
 /*-
  * Copyright (c) 1982, 1988, 1991, 1993
@@ -397,6 +397,8 @@
 void	kmstartup(void);
 #endif
 
+void	machdep_init(void);
+
 #ifdef _KERNEL
 #include <lib/libkern/libkern.h>
 

Reply via email to