aboutsummaryrefslogtreecommitdiff
path: root/sys/kern/kern_exec.c
diff options
context:
space:
mode:
authorMateusz Guzik <mjg@FreeBSD.org>2012-07-08 00:51:38 +0000
committerMateusz Guzik <mjg@FreeBSD.org>2012-07-08 00:51:38 +0000
commit28a7f60741b8e92fb0fc05e1febd362b6d0eaef9 (patch)
tree8ef867fed21ee04518bd48270e5ff95f96ab8e74 /sys/kern/kern_exec.c
parent7027e4dac468c4d1643db1e872226a772f47e5c1 (diff)
downloadsrc-28a7f60741b8e92fb0fc05e1febd362b6d0eaef9.tar.gz
src-28a7f60741b8e92fb0fc05e1febd362b6d0eaef9.zip
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
Notes
Notes: svn path=/head/; revision=238220
Diffstat (limited to 'sys/kern/kern_exec.c')
-rw-r--r--sys/kern/kern_exec.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/sys/kern/kern_exec.c b/sys/kern/kern_exec.c
index 414a826e74b8..90f7311b8209 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);