svn commit: r219999 - in head/sys: kern sys
Konstantin Belousov
kib at FreeBSD.org
Fri Mar 25 14:00:36 UTC 2011
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);
More information about the svn-src-all
mailing list