diff options
author | kib <kib@FreeBSD.org> | 2015-05-24 07:32:02 +0000 |
---|---|---|
committer | kib <kib@FreeBSD.org> | 2015-05-24 07:32:02 +0000 |
commit | 0d8ee7566b4bab2d197db6ce3ad8e5f4667ab319 (patch) | |
tree | 10a359f89eb0d5ea4f3d3643fb851c21a9bba508 /sys/compat/freebsd32 | |
parent | b7a860bb3a919e24d54388f1a29bff11e93832e0 (diff) | |
download | FreeBSD-src-0d8ee7566b4bab2d197db6ce3ad8e5f4667ab319.zip FreeBSD-src-0d8ee7566b4bab2d197db6ce3ad8e5f4667ab319.tar.gz |
MFC r282708:
On exec, single-threading must be enforced before arguments space is
allocated from exec_map.
Diffstat (limited to 'sys/compat/freebsd32')
-rw-r--r-- | sys/compat/freebsd32/freebsd32_misc.c | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/sys/compat/freebsd32/freebsd32_misc.c b/sys/compat/freebsd32/freebsd32_misc.c index 55bd4a5..afcef0d 100644 --- a/sys/compat/freebsd32/freebsd32_misc.c +++ b/sys/compat/freebsd32/freebsd32_misc.c @@ -400,12 +400,17 @@ int freebsd32_execve(struct thread *td, struct freebsd32_execve_args *uap) { struct image_args eargs; + struct vmspace *oldvmspace; int error; + error = pre_execve(td, &oldvmspace); + if (error != 0) + return (error); error = freebsd32_exec_copyin_args(&eargs, uap->fname, UIO_USERSPACE, uap->argv, uap->envv); if (error == 0) error = kern_execve(td, &eargs, NULL); + post_execve(td, error, oldvmspace); return (error); } @@ -413,14 +418,19 @@ int freebsd32_fexecve(struct thread *td, struct freebsd32_fexecve_args *uap) { struct image_args eargs; + struct vmspace *oldvmspace; int error; + error = pre_execve(td, &oldvmspace); + if (error != 0) + return (error); error = freebsd32_exec_copyin_args(&eargs, NULL, UIO_SYSSPACE, uap->argv, uap->envv); if (error == 0) { eargs.fd = uap->fd; error = kern_execve(td, &eargs, NULL); } + post_execve(td, error, oldvmspace); return (error); } |