From owner-svn-src-all@FreeBSD.ORG Fri Jul 5 21:31:17 2013 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by hub.freebsd.org (Postfix) with ESMTP id 45B6CA69; Fri, 5 Jul 2013 21:31:17 +0000 (UTC) (envelope-from jamie@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) by mx1.freebsd.org (Postfix) with ESMTP id 1B7CF15F5; Fri, 5 Jul 2013 21:31:17 +0000 (UTC) Received: from svn.freebsd.org ([127.0.1.70]) by svn.freebsd.org (8.14.7/8.14.7) with ESMTP id r65LVGCh089553; Fri, 5 Jul 2013 21:31:16 GMT (envelope-from jamie@svn.freebsd.org) Received: (from jamie@localhost) by svn.freebsd.org (8.14.7/8.14.5/Submit) id r65LVGKr089550; Fri, 5 Jul 2013 21:31:16 GMT (envelope-from jamie@svn.freebsd.org) Message-Id: <201307052131.r65LVGKr089550@svn.freebsd.org> From: Jamie Gritton Date: Fri, 5 Jul 2013 21:31:16 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r252841 - in head/sys: dev/mem kern sys X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 05 Jul 2013 21:31:17 -0000 Author: jamie Date: Fri Jul 5 21:31:16 2013 New Revision: 252841 URL: http://svnweb.freebsd.org/changeset/base/252841 Log: Add new privileges, PRIV_KMEM_READ and PRIV_KMEM_WRITE, used in opening /dev/kmem and /dev/mem (in addition to traditional file permission checks). PRIV_KMEM_READ is different from other PRIV_* checks in that it's allowed by default. Reviewed by: kib, mckusick Modified: head/sys/dev/mem/memdev.c head/sys/kern/kern_priv.c head/sys/sys/priv.h Modified: head/sys/dev/mem/memdev.c ============================================================================== --- head/sys/dev/mem/memdev.c Fri Jul 5 21:29:59 2013 (r252840) +++ head/sys/dev/mem/memdev.c Fri Jul 5 21:31:16 2013 (r252841) @@ -37,6 +37,7 @@ __FBSDID("$FreeBSD$"); #include #include #include +#include #include #include #include @@ -67,8 +68,14 @@ memopen(struct cdev *dev __unused, int f { int error = 0; - if (flags & FWRITE) - error = securelevel_gt(td->td_ucred, 0); + if (flags & FREAD) + error = priv_check(td, PRIV_KMEM_READ); + if (flags & FWRITE) { + if (error == 0) + error = priv_check(td, PRIV_KMEM_WRITE); + if (error == 0) + error = securelevel_gt(td->td_ucred, 0); + } return (error); } Modified: head/sys/kern/kern_priv.c ============================================================================== --- head/sys/kern/kern_priv.c Fri Jul 5 21:29:59 2013 (r252840) +++ head/sys/kern/kern_priv.c Fri Jul 5 21:31:16 2013 (r252841) @@ -142,6 +142,15 @@ priv_check_cred(struct ucred *cred, int } /* + * Writes to kernel memory are a typical root-only operation, + * but non-root users are expected to be able to read it. + */ + if (priv == PRIV_KMEM_READ) { + error = 0; + goto out; + } + + /* * Now check with MAC, if enabled, to see if a policy module grants * privilege. */ Modified: head/sys/sys/priv.h ============================================================================== --- head/sys/sys/priv.h Fri Jul 5 21:29:59 2013 (r252840) +++ head/sys/sys/priv.h Fri Jul 5 21:31:16 2013 (r252841) @@ -494,6 +494,12 @@ #define PRIV_RCTL_REMOVE_RULE 674 /* + * Kernel memory privileges. + */ +#define PRIV_KMEM_READ 680 /* Read from kernel memory. */ +#define PRIV_KMEM_WRITE 681 /* Write to kernel memory. */ + +/* * Track end of privilege list. */ #define _PRIV_HIGHEST 675