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] != '.')) {