diff options
author | mjg <mjg@FreeBSD.org> | 2012-07-08 00:51:38 +0000 |
---|---|---|
committer | mjg <mjg@FreeBSD.org> | 2012-07-08 00:51:38 +0000 |
commit | 1e0d3fae01871e2dc80f05ead912d9a1d4f56f15 (patch) | |
tree | 8ef867fed21ee04518bd48270e5ff95f96ab8e74 /sys/kern/kern_exec.c | |
parent | b9655c9adb908d7d26aae414f1d9186c1bae160e (diff) | |
download | FreeBSD-src-1e0d3fae01871e2dc80f05ead912d9a1d4f56f15.zip FreeBSD-src-1e0d3fae01871e2dc80f05ead912d9a1d4f56f15.tar.gz |
Unbreak handling of descriptors opened with O_EXEC by fexecve(2).
While here return EBADF for descriptors opened for writing (previously it was ETXTBSY).
Add fgetvp_exec function which performs appropriate checks.
PR: kern/169651
In collaboration with: kib
Approved by: trasz (mentor)
MFC after: 1 week
Diffstat (limited to 'sys/kern/kern_exec.c')
-rw-r--r-- | sys/kern/kern_exec.c | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/sys/kern/kern_exec.c b/sys/kern/kern_exec.c index 414a826..90f7311b 100644 --- a/sys/kern/kern_exec.c +++ b/sys/kern/kern_exec.c @@ -443,8 +443,10 @@ interpret: /* * Some might argue that CAP_READ and/or CAP_MMAP should also * be required here; such arguments will be entertained. + * + * Descriptors opened only with O_EXEC or O_RDONLY are allowed. */ - error = fgetvp_read(td, args->fd, CAP_FEXECVE, &binvp); + error = fgetvp_exec(td, args->fd, CAP_FEXECVE, &binvp); if (error) goto exec_fail; vfslocked = VFS_LOCK_GIANT(binvp->v_mount); |