Module Name:    src
Committed By:   elad
Date:           Fri Jul  3 21:32:09 UTC 2009

Modified Files:
        src/sys/kern: sys_mqueue.c

Log Message:
Message queues also use genfs_can_access() to control access. Since the
latter might lose its KAUTH_GENERIC_ISSUSER check soon, add an internal
function, mqueue_access(), and call genfs_can_access() from it instead
so we don't pollute the main code path once we need to add a special
kauth(9) check for message queues.

No functional change, error codes preserved.

Related mailing list thread:

        http://mail-index.netbsd.org/tech-kern/2009/06/21/msg005311.html


To generate a diff of this commit:
cvs rdiff -u -r1.19 -r1.20 src/sys/kern/sys_mqueue.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/sys_mqueue.c
diff -u src/sys/kern/sys_mqueue.c:1.19 src/sys/kern/sys_mqueue.c:1.20
--- src/sys/kern/sys_mqueue.c:1.19	Tue Jun 23 19:36:38 2009
+++ src/sys/kern/sys_mqueue.c	Fri Jul  3 21:32:09 2009
@@ -1,4 +1,4 @@
-/*	$NetBSD: sys_mqueue.c,v 1.19 2009/06/23 19:36:38 elad Exp $	*/
+/*	$NetBSD: sys_mqueue.c,v 1.20 2009/07/03 21:32:09 elad Exp $	*/
 
 /*
  * Copyright (c) 2007, 2008 Mindaugas Rasiukevicius <rmind at NetBSD org>
@@ -42,7 +42,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: sys_mqueue.c,v 1.19 2009/06/23 19:36:38 elad Exp $");
+__KERNEL_RCSID(0, "$NetBSD: sys_mqueue.c,v 1.20 2009/07/03 21:32:09 elad Exp $");
 
 #include <sys/param.h>
 #include <sys/types.h>
@@ -295,6 +295,17 @@
 	return 0;
 }
 
+static int
+mqueue_access(struct mqueue *mq, mode_t mode, kauth_cred_t cred)
+{
+	if (genfs_can_access(VNON, mq->mq_mode, mq->mq_euid,
+	    mq->mq_egid, mode, cred)) {
+		return EACCES;
+	}
+
+	return 0;
+}
+
 /*
  * General mqueue system calls.
  */
@@ -430,8 +441,7 @@
 		if (fp->f_flag & FWRITE) {
 			acc_mode |= VWRITE;
 		}
-		if (genfs_can_access(VNON, mq->mq_mode, mq->mq_euid,
-		    mq->mq_egid, acc_mode, l->l_cred)) {
+		if (mqueue_access(mq, acc_mode, l->l_cred) != 0) {
 			error = EACCES;
 			goto exit;
 		}

Reply via email to