Module Name: src
Committed By: rmind
Date: Tue May 31 00:15:28 UTC 2011
Modified Files:
src/sys/kern: kern_resource.c
Log Message:
sysctl_proc_corename: perform KAUTH_PROCESS_CORENAME check (for set case)
after the new name is copied into cnbuf. Spotted by enami@.
To generate a diff of this commit:
cvs rdiff -u -r1.165 -r1.166 src/sys/kern/kern_resource.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.165 src/sys/kern/kern_resource.c:1.166
--- src/sys/kern/kern_resource.c:1.165 Tue May 24 01:19:48 2011
+++ src/sys/kern/kern_resource.c Tue May 31 00:15:28 2011
@@ -1,4 +1,4 @@
-/* $NetBSD: kern_resource.c,v 1.165 2011/05/24 01:19:48 mrg Exp $ */
+/* $NetBSD: kern_resource.c,v 1.166 2011/05/31 00:15:28 rmind Exp $ */
/*-
* Copyright (c) 1982, 1986, 1991, 1993
@@ -37,7 +37,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: kern_resource.c,v 1.165 2011/05/24 01:19:48 mrg Exp $");
+__KERNEL_RCSID(0, "$NetBSD: kern_resource.c,v 1.166 2011/05/31 00:15:28 rmind Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@@ -838,15 +838,6 @@
strlcpy(cnbuf, lim->pl_corename, MAXPATHLEN);
mutex_exit(&lim->pl_lock);
}
- if (newp) {
- /* Set case: just use the temporary buffer. */
- error = kauth_authorize_process(l->l_cred,
- KAUTH_PROCESS_CORENAME, p,
- KAUTH_ARG(KAUTH_REQ_PROCESS_CORENAME_SET), cnbuf, NULL);
- if (error) {
- goto done;
- }
- }
node = *rnode;
node.sysctl_data = cnbuf;
@@ -858,9 +849,14 @@
}
/*
- * Validate new core name. It must be either "core", "/core",
- * or end in ".core".
+ * Set case. Check permission and then validate new core name.
+ * It must be either "core", "/core", or end in ".core".
*/
+ error = kauth_authorize_process(l->l_cred, KAUTH_PROCESS_CORENAME,
+ p, KAUTH_ARG(KAUTH_REQ_PROCESS_CORENAME_SET), cnbuf, NULL);
+ if (error) {
+ goto done;
+ }
len = strlen(cnbuf);
if ((len < 4 || strcmp(cnbuf + len - 4, "core") != 0) ||
(len > 4 && cnbuf[len - 5] != '/' && cnbuf[len - 5] != '.')) {