Module Name:    src
Committed By:   elad
Date:           Fri Oct  2 22:46:18 UTC 2009

Modified Files:
        src/sys/kern: kern_resource.c
        src/sys/secmodel/suser: secmodel_suser.c

Log Message:
Stick nice policy in its own subsystem and call the listener "resource"
rather than "rlimit"...


To generate a diff of this commit:
cvs rdiff -u -r1.153 -r1.154 src/sys/kern/kern_resource.c
cvs rdiff -u -r1.6 -r1.7 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/kern_resource.c
diff -u src/sys/kern/kern_resource.c:1.153 src/sys/kern/kern_resource.c:1.154
--- src/sys/kern/kern_resource.c:1.153	Fri Oct  2 22:38:45 2009
+++ src/sys/kern/kern_resource.c	Fri Oct  2 22:46:18 2009
@@ -1,4 +1,4 @@
-/*	$NetBSD: kern_resource.c,v 1.153 2009/10/02 22:38:45 elad Exp $	*/
+/*	$NetBSD: kern_resource.c,v 1.154 2009/10/02 22:46:18 elad Exp $	*/
 
 /*-
  * Copyright (c) 1982, 1986, 1991, 1993
@@ -37,7 +37,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: kern_resource.c,v 1.153 2009/10/02 22:38:45 elad Exp $");
+__KERNEL_RCSID(0, "$NetBSD: kern_resource.c,v 1.154 2009/10/02 22:46:18 elad Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -69,38 +69,66 @@
 static pool_cache_t	plimit_cache;
 static pool_cache_t	pstats_cache;
 
-static kauth_listener_t	rlimit_listener;
+static kauth_listener_t	resource_listener;
 
 static int
-rlimit_listener_cb(kauth_cred_t cred, kauth_action_t action, void *cookie,
+resource_listener_cb(kauth_cred_t cred, kauth_action_t action, void *cookie,
     void *arg0, void *arg1, void *arg2, void *arg3)
 {
 	struct proc *p;
 	int result;
-	enum kauth_process_req req;
 
 	result = KAUTH_RESULT_DEFER;
 	p = arg0;
-	req = (enum kauth_process_req)(unsigned long)arg1;
 
-	if (action != KAUTH_PROCESS_RLIMIT)
-		return result;
+	switch (action) {
+	case KAUTH_PROCESS_NICE:
+		if (kauth_cred_geteuid(cred) != kauth_cred_geteuid(p->p_cred) &&
+                    kauth_cred_getuid(cred) != kauth_cred_geteuid(p->p_cred)) {
+                        break;
+                }
 
-	if (req == KAUTH_REQ_PROCESS_RLIMIT_SET) {
-		struct rlimit *new_rlimit;
-		u_long which;
+                if ((u_long)arg1 >= p->p_nice)
+                        result = KAUTH_RESULT_ALLOW;
 
-		if ((p != curlwp->l_proc) &&
-		    (proc_uidmatch(cred, p->p_cred) != 0))
-			return result;
+		break;
+
+	case KAUTH_PROCESS_RLIMIT: {
+		enum kauth_process_req req;
 
-		new_rlimit = arg2;
-		which = (u_long)arg3;
+		req = (enum kauth_process_req)(unsigned long)arg1;
 
-		if (new_rlimit->rlim_max <= p->p_rlimit[which].rlim_max)
+		switch (req) {
+		case KAUTH_REQ_PROCESS_RLIMIT_GET:
 			result = KAUTH_RESULT_ALLOW;
-	} else if (req == KAUTH_REQ_PROCESS_RLIMIT_GET) {
-		result = KAUTH_RESULT_ALLOW;
+			break;
+
+		case KAUTH_REQ_PROCESS_RLIMIT_SET: {
+			struct rlimit *new_rlimit;
+			u_long which;
+
+			if ((p != curlwp->l_proc) &&
+			    (proc_uidmatch(cred, p->p_cred) != 0))
+				break;
+
+			new_rlimit = arg2;
+			which = (u_long)arg3;
+
+			if (new_rlimit->rlim_max <= p->p_rlimit[which].rlim_max)
+				result = KAUTH_RESULT_ALLOW;
+
+			break;
+			}
+
+		default:
+			break;
+		}
+
+		break;
+	}
+
+	default:
+		break;
 	}
 
 	return result;
@@ -115,8 +143,8 @@
 	pstats_cache = pool_cache_init(sizeof(struct pstats), 0, 0, 0,
 	    "pstatspl", NULL, IPL_NONE, NULL, NULL, NULL);
 
-	rlimit_listener = kauth_listen_scope(KAUTH_SCOPE_PROCESS,
-	    rlimit_listener_cb, NULL);
+	resource_listener = kauth_listen_scope(KAUTH_SCOPE_PROCESS,
+	    resource_listener_cb, NULL);
 }
 
 /*

Index: src/sys/secmodel/suser/secmodel_suser.c
diff -u src/sys/secmodel/suser/secmodel_suser.c:1.6 src/sys/secmodel/suser/secmodel_suser.c:1.7
--- src/sys/secmodel/suser/secmodel_suser.c:1.6	Fri Oct  2 22:38:45 2009
+++ src/sys/secmodel/suser/secmodel_suser.c	Fri Oct  2 22:46:18 2009
@@ -1,4 +1,4 @@
-/* $NetBSD: secmodel_suser.c,v 1.6 2009/10/02 22:38:45 elad Exp $ */
+/* $NetBSD: secmodel_suser.c,v 1.7 2009/10/02 22:46:18 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.6 2009/10/02 22:38:45 elad Exp $");
+__KERNEL_RCSID(0, "$NetBSD: secmodel_suser.c,v 1.7 2009/10/02 22:46:18 elad Exp $");
 
 #include <sys/types.h>
 #include <sys/param.h>
@@ -645,19 +645,7 @@
 		break;
 
 	case KAUTH_PROCESS_NICE:
-		if (isroot) {
-			result = KAUTH_RESULT_ALLOW;
-			break;
-		}
-
-		if (kauth_cred_geteuid(cred) !=
-		    kauth_cred_geteuid(p->p_cred) &&
-		    kauth_cred_getuid(cred) !=
-		    kauth_cred_geteuid(p->p_cred)) {
-			break;
-		}
-
-		if ((u_long)arg1 >= p->p_nice)
+		if (isroot)
 			result = KAUTH_RESULT_ALLOW;
 
 		break;

Reply via email to