Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 14 Jun 2012 12:41:21 +0000 (UTC)
From:      Pawel Jakub Dawidek <pjd@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r237065 - head/sys/kern
Message-ID:  <201206141241.q5ECfL3g094752@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: pjd
Date: Thu Jun 14 12:41:21 2012
New Revision: 237065
URL: http://svn.freebsd.org/changeset/base/237065

Log:
  When we are closing capabilities during exec, we want to call mq_fdclose()
  on the underlying object and not on the capability itself.
  
  Similar bug was fixed in r236853.
  
  MFC after:	1 month

Modified:
  head/sys/kern/kern_descrip.c

Modified: head/sys/kern/kern_descrip.c
==============================================================================
--- head/sys/kern/kern_descrip.c	Thu Jun 14 12:38:51 2012	(r237064)
+++ head/sys/kern/kern_descrip.c	Thu Jun 14 12:41:21 2012	(r237065)
@@ -2025,7 +2025,7 @@ void
 fdcloseexec(struct thread *td)
 {
 	struct filedesc *fdp;
-	struct file *fp;
+	struct file *fp, *fp_object;
 	int i;
 
 	/* Certain daemons might not have file descriptors. */
@@ -2050,8 +2050,14 @@ fdcloseexec(struct thread *td)
 			fdp->fd_ofileflags[i] = 0;
 			fdunused(fdp, i);
 			knote_fdclose(td, i);
-			if (fp->f_type == DTYPE_MQUEUE)
-				mq_fdclose(td, i, fp);
+			/*
+			 * When we're closing an fd with a capability, we need
+			 * to notify mqueue if the underlying object is of type
+			 * mqueue.
+			 */
+			(void)cap_funwrap(fp, 0, &fp_object);
+			if (fp_object->f_type == DTYPE_MQUEUE)
+				mq_fdclose(td, i, fp_object);
 			FILEDESC_XUNLOCK(fdp);
 			(void) closef(fp, td);
 			FILEDESC_XLOCK(fdp);



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201206141241.q5ECfL3g094752>