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);
_______________________________________________
svn-src-head@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to