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
This commit is contained in:
parent
bfac1583db
commit
246d35ec91
@ -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 **resultfp, int *resultfd)
|
||||
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 **resultfp, int *resultfd)
|
||||
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.
|
||||
|
@ -1069,7 +1069,7 @@ kern_openat(struct thread *td, int fd, char *path, enum uio_seg pathseg,
|
||||
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;
|
||||
|
@ -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
|
||||
|
||||
/*
|
||||
|
@ -112,6 +112,8 @@ int closef(struct file *fp, struct thread *td);
|
||||
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);
|
||||
|
Loading…
Reference in New Issue
Block a user