summaryrefslogtreecommitdiffstats
path: root/sys/compat/freebsd32
diff options
context:
space:
mode:
authorkib <kib@FreeBSD.org>2015-05-24 07:32:02 +0000
committerkib <kib@FreeBSD.org>2015-05-24 07:32:02 +0000
commit0d8ee7566b4bab2d197db6ce3ad8e5f4667ab319 (patch)
tree10a359f89eb0d5ea4f3d3643fb851c21a9bba508 /sys/compat/freebsd32
parentb7a860bb3a919e24d54388f1a29bff11e93832e0 (diff)
downloadFreeBSD-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.c10
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);
}
OpenPOWER on IntegriCloud