diff options
author | Mateusz Guzik <mjg@FreeBSD.org> | 2012-07-08 00:51:38 +0000 |
---|---|---|
committer | Mateusz Guzik <mjg@FreeBSD.org> | 2012-07-08 00:51:38 +0000 |
commit | 28a7f60741b8e92fb0fc05e1febd362b6d0eaef9 (patch) | |
tree | 8ef867fed21ee04518bd48270e5ff95f96ab8e74 /sys/kern/kern_exec.c | |
parent | 7027e4dac468c4d1643db1e872226a772f47e5c1 (diff) | |
download | src-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.c | 4 |
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); |