summaryrefslogtreecommitdiffstats
path: root/sys/kern/kern_exec.c
diff options
context:
space:
mode:
authormjg <mjg@FreeBSD.org>2012-07-08 00:51:38 +0000
committermjg <mjg@FreeBSD.org>2012-07-08 00:51:38 +0000
commit1e0d3fae01871e2dc80f05ead912d9a1d4f56f15 (patch)
tree8ef867fed21ee04518bd48270e5ff95f96ab8e74 /sys/kern/kern_exec.c
parentb9655c9adb908d7d26aae414f1d9186c1bae160e (diff)
downloadFreeBSD-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.c4
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);
OpenPOWER on IntegriCloud