Date: Fri, 1 Apr 2011 12:50:30 +0000 (UTC) From: Konstantin Belousov <kib@FreeBSD.org> To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-8@freebsd.org Subject: svn commit: r220241 - in stable/8/sys: kern sys Message-ID: <201104011250.p31CoULd045353@svn.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: kib Date: Fri Apr 1 12:50:29 2011 New Revision: 220241 URL: http://svn.freebsd.org/changeset/base/220241 Log: MFC r219999: Add O_CLOEXEC flag to open(2) and fhopen(2). Modified: stable/8/sys/kern/kern_descrip.c stable/8/sys/kern/vfs_syscalls.c stable/8/sys/sys/fcntl.h stable/8/sys/sys/filedesc.h Directory Properties: stable/8/sys/ (props changed) stable/8/sys/amd64/include/xen/ (props changed) stable/8/sys/cddl/contrib/opensolaris/ (props changed) stable/8/sys/contrib/dev/acpica/ (props changed) stable/8/sys/contrib/pf/ (props changed) Modified: stable/8/sys/kern/kern_descrip.c ============================================================================== --- stable/8/sys/kern/kern_descrip.c Fri Apr 1 11:39:13 2011 (r220240) +++ stable/8/sys/kern/kern_descrip.c Fri Apr 1 12:50:29 2011 (r220241) @@ -1514,7 +1514,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; @@ -1557,6 +1557,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; @@ -1565,6 +1567,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: stable/8/sys/kern/vfs_syscalls.c ============================================================================== --- stable/8/sys/kern/vfs_syscalls.c Fri Apr 1 11:39:13 2011 (r220240) +++ stable/8/sys/kern/vfs_syscalls.c Fri Apr 1 12:50:29 2011 (r220241) @@ -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(). */ @@ -4478,7 +4478,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: stable/8/sys/sys/fcntl.h ============================================================================== --- stable/8/sys/sys/fcntl.h Fri Apr 1 11:39:13 2011 (r220240) +++ stable/8/sys/sys/fcntl.h Fri Apr 1 12:50:29 2011 (r220241) @@ -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: stable/8/sys/sys/filedesc.h ============================================================================== --- stable/8/sys/sys/filedesc.h Fri Apr 1 11:39:13 2011 (r220240) +++ stable/8/sys/sys/filedesc.h Fri Apr 1 12:50:29 2011 (r220241) @@ -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);
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201104011250.p31CoULd045353>