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
This commit is contained in:
pjd 2012-06-14 12:41:21 +00:00
parent 841890f62a
commit 6634e42976

View File

@ -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);