aboutsummaryrefslogtreecommitdiff
path: root/sys/compat/ia32/ia32_sysvec.c
diff options
context:
space:
mode:
authorJohn Baldwin <jhb@FreeBSD.org>2007-07-12 18:01:31 +0000
committerJohn Baldwin <jhb@FreeBSD.org>2007-07-12 18:01:31 +0000
commit59d8f3ff083f7395b85f30888af849eeca42967e (patch)
treec78cff16168bf26e653ac32e1c954ba6ed15af12 /sys/compat/ia32/ia32_sysvec.c
parentc4ed2c08adfbde9a3d523861dde48ff3914012f9 (diff)
downloadsrc-59d8f3ff083f7395b85f30888af849eeca42967e.tar.gz
src-59d8f3ff083f7395b85f30888af849eeca42967e.zip
Fix a couple of issues with the stack limit for 32-bit processes on 64-bit
kernels exposed by the recent fixes to resource limits for 32-bit processes on 64-bit kernels: - Let ABIs expose their maximum stack size via a new pointer in sysentvec and use that in preference to maxssiz during exec() rather than always using maxssiz for all processses. - Apply the ABI's limit fixup to the previous stack size when adjusting RLIMIT_STACK to determine if the existing mapping for the stack needs to be grown or shrunk (as well as how much it should be grown or shrunk). Approved by: re (kensmith)
Notes
Notes: svn path=/head/; revision=171410
Diffstat (limited to 'sys/compat/ia32/ia32_sysvec.c')
-rw-r--r--sys/compat/ia32/ia32_sysvec.c17
1 files changed, 9 insertions, 8 deletions
diff --git a/sys/compat/ia32/ia32_sysvec.c b/sys/compat/ia32/ia32_sysvec.c
index f61893493736..62779269e3a5 100644
--- a/sys/compat/ia32/ia32_sysvec.c
+++ b/sys/compat/ia32/ia32_sysvec.c
@@ -100,6 +100,13 @@ extern struct sysent freebsd32_sysent[];
SYSCTL_NODE(_compat, OID_AUTO, ia32, CTLFLAG_RW, 0, "ia32 mode");
+static u_long ia32_maxdsiz = IA32_MAXDSIZ;
+SYSCTL_ULONG(_compat_ia32, OID_AUTO, maxdsiz, CTLFLAG_RW, &ia32_maxdsiz, 0, "");
+static u_long ia32_maxssiz = IA32_MAXSSIZ;
+SYSCTL_ULONG(_compat_ia32, OID_AUTO, maxssiz, CTLFLAG_RW, &ia32_maxssiz, 0, "");
+static u_long ia32_maxvmem = IA32_MAXVMEM;
+SYSCTL_ULONG(_compat_ia32, OID_AUTO, maxvmem, CTLFLAG_RW, &ia32_maxvmem, 0, "");
+
struct sysentvec ia32_freebsd_sysvec = {
FREEBSD32_SYS_MAXSYSCALL,
freebsd32_sysent,
@@ -126,7 +133,8 @@ struct sysentvec ia32_freebsd_sysvec = {
VM_PROT_ALL,
ia32_copyout_strings,
ia32_setregs,
- ia32_fixlimit
+ ia32_fixlimit,
+ &ia32_maxssiz
};
@@ -273,13 +281,6 @@ ia32_copyout_strings(struct image_params *imgp)
return ((register_t *)stack_base);
}
-static u_long ia32_maxdsiz = IA32_MAXDSIZ;
-SYSCTL_ULONG(_compat_ia32, OID_AUTO, maxdsiz, CTLFLAG_RW, &ia32_maxdsiz, 0, "");
-static u_long ia32_maxssiz = IA32_MAXSSIZ;
-SYSCTL_ULONG(_compat_ia32, OID_AUTO, maxssiz, CTLFLAG_RW, &ia32_maxssiz, 0, "");
-static u_long ia32_maxvmem = IA32_MAXVMEM;
-SYSCTL_ULONG(_compat_ia32, OID_AUTO, maxvmem, CTLFLAG_RW, &ia32_maxvmem, 0, "");
-
static void
ia32_fixlimit(struct rlimit *rl, int which)
{