Author: kib
Date: Fri Mar 25 14:00:36 2011
New Revision: 219999
URL: http://svn.freebsd.org/changeset/base/219999

Log:
  Add O_CLOEXEC flag to open(2) and fhopen(2).
  The new function fallocf(9), that is renamed falloc(9) with added
  flag argument, is provided to facilitate the merge to stable branch.
  
  Reviewed by:  jhb
  MFC after:    1 week

Modified:
  head/sys/kern/kern_descrip.c
  head/sys/kern/vfs_syscalls.c
  head/sys/sys/fcntl.h
  head/sys/sys/filedesc.h

Modified: head/sys/kern/kern_descrip.c
==============================================================================
--- head/sys/kern/kern_descrip.c        Fri Mar 25 13:09:57 2011        
(r219998)
+++ head/sys/kern/kern_descrip.c        Fri Mar 25 14:00:36 2011        
(r219999)
@@ -1516,7 +1516,7 @@ fdavail(struct thread *td, int n)
  * release the FILEDESC lock.
  */
 int
-falloc(struct thread *td, struct file **resultfp, int *resultfd)
+fallocf(struct thread *td, struct file **resultfp, int *resultfd, int flags)
 {
        struct proc *p = td->td_proc;
        struct file *fp;
@@ -1559,6 +1559,8 @@ falloc(struct thread *td, struct file **
                return (error);
        }
        p->p_fd->fd_ofiles[i] = fp;
+       if ((flags & O_CLOEXEC) != 0)
+               p->p_fd->fd_ofileflags[i] |= UF_EXCLOSE;
        FILEDESC_XUNLOCK(p->p_fd);
        if (resultfp)
                *resultfp = fp;
@@ -1567,6 +1569,13 @@ falloc(struct thread *td, struct file **
        return (0);
 }
 
+int
+falloc(struct thread *td, struct file **resultfp, int *resultfd)
+{
+
+       return (fallocf(td, resultfp, resultfd, 0));
+}
+
 /*
  * Build a new filedesc structure from another.
  * Copy the current, root, and jail root vnode references.

Modified: head/sys/kern/vfs_syscalls.c
==============================================================================
--- head/sys/kern/vfs_syscalls.c        Fri Mar 25 13:09:57 2011        
(r219998)
+++ head/sys/kern/vfs_syscalls.c        Fri Mar 25 14:00:36 2011        
(r219999)
@@ -1069,7 +1069,7 @@ kern_openat(struct thread *td, int fd, c
        else
                flags = FFLAGS(flags);
 
-       error = falloc(td, &nfp, &indx);
+       error = fallocf(td, &nfp, &indx, flags);
        if (error)
                return (error);
        /* An extra reference on `nfp' has been held for us by falloc(). */
@@ -4488,7 +4488,7 @@ fhopen(td, uap)
         * end of vn_open code
         */
 
-       if ((error = falloc(td, &nfp, &indx)) != 0) {
+       if ((error = fallocf(td, &nfp, &indx, fmode)) != 0) {
                if (fmode & FWRITE)
                        vp->v_writecount--;
                goto bad;

Modified: head/sys/sys/fcntl.h
==============================================================================
--- head/sys/sys/fcntl.h        Fri Mar 25 13:09:57 2011        (r219998)
+++ head/sys/sys/fcntl.h        Fri Mar 25 14:00:36 2011        (r219999)
@@ -123,9 +123,11 @@ typedef    __pid_t         pid_t;
 #define        FEXEC           O_EXEC
 #endif
 
-/* Defined by POSIX 1003.1-2008; BSD default, but reserve for future use. */
 #if __POSIX_VISIBLE >= 200809
+/* Defined by POSIX 1003.1-2008; BSD default, but reserve for future use. */
 #define        O_TTY_INIT      0x00080000      /* Restore default termios 
attributes */
+
+#define        O_CLOEXEC       0x00100000
 #endif
 
 /*

Modified: head/sys/sys/filedesc.h
==============================================================================
--- head/sys/sys/filedesc.h     Fri Mar 25 13:09:57 2011        (r219998)
+++ head/sys/sys/filedesc.h     Fri Mar 25 14:00:36 2011        (r219999)
@@ -112,6 +112,8 @@ int closef(struct file *fp, struct threa
 int    dupfdopen(struct thread *td, struct filedesc *fdp, int indx, int dfd,
            int mode, int error);
 int    falloc(struct thread *td, struct file **resultfp, int *resultfd);
+int    fallocf(struct thread *td, struct file **resultfp, int *resultfd,
+           int flags);
 int    fdalloc(struct thread *td, int minfd, int *result);
 int    fdavail(struct thread *td, int n);
 int    fdcheckstd(struct thread *td);
_______________________________________________
svn-src-all@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to