Index: emulation/linux/linux_sysctl.c
===================================================================
RCS file: /nfs/daver/cvs-repos/cvs-dragonflybsd/src/sys/emulation/linux/linux_sysctl.c,v
retrieving revision 1.5
diff -u -u -r1.5 linux_sysctl.c
--- emulation/linux/linux_sysctl.c	15 Aug 2003 06:32:51 -0000	1.5
+++ emulation/linux/linux_sysctl.c	13 Nov 2003 13:38:16 -0000
@@ -81,20 +81,20 @@
 	struct l___sysctl_args la;
 	l_int *mib;
 	int error, i;
-	caddr_t sg;
 
 	error = copyin((caddr_t)args->args, &la, sizeof(la));
 	if (error)
 		return (error);
 
-	if (la.nlen == 0 || la.nlen > LINUX_CTL_MAXNAME)
+	if (la.nlen <= 0 || la.nlen > LINUX_CTL_MAXNAME)
 		return (ENOTDIR);
 
-	sg = stackgap_init();
-	mib = stackgap_alloc(&sg, la.nlen * sizeof(l_int));
+	mib = malloc(la.nlen * sizeof(l_int), M_TEMP, M_WAITOK);
 	error = copyin(la.name, mib, la.nlen * sizeof(l_int));
-	if (error)
+	if (error) {
+		free(mib, M_TEMP);
 		return (error);
+	}
 
 	switch (mib[0]) {
 	case LINUX_CTL_KERN:
@@ -103,6 +103,7 @@
 
 		switch (mib[1]) {
 		case LINUX_KERN_VERSION:
+			free(mib, M_TEMP);
 			return (handle_string(&la, version));
 		default:
 			break;
@@ -117,5 +118,6 @@
 		printf("%c%d", (i) ? ',' : '{', mib[i]);
 	printf("}\n");
 
+	free(mib, M_TEMP);
 	return (ENOTDIR);
 }
Index: emulation/linux/i386/linux_sysvec.c
===================================================================
RCS file: /nfs/daver/cvs-repos/cvs-dragonflybsd/src/sys/emulation/linux/i386/linux_sysvec.c,v
retrieving revision 1.12
diff -u -u -r1.12 linux_sysvec.c
--- emulation/linux/i386/linux_sysvec.c	13 Nov 2003 04:04:42 -0000	1.12
+++ emulation/linux/i386/linux_sysvec.c	13 Nov 2003 12:57:38 -0000
@@ -41,6 +41,7 @@
 #include <sys/imgact.h>
 #include <sys/imgact_aout.h>
 #include <sys/imgact_elf.h>
+#include <sys/kern_syscall.h>
 #include <sys/lock.h>
 #include <sys/malloc.h>
 #include <sys/proc.h>
@@ -617,10 +618,9 @@
 	struct l_ucontext uc;
 	struct l_sigcontext *context;
 	l_stack_t *lss;
-	stack_t *ss;
+	stack_t ss;
 	struct trapframe *regs;
 	int eflags;
-	caddr_t sg = stackgap_init();
 
 	regs = p->p_md.md_regs;
 
@@ -695,22 +695,17 @@
 	/*
 	 * call sigaltstack & ignore results..
 	 */
-	ss = stackgap_alloc(&sg, sizeof(stack_t));
 	lss = &uc.uc_stack;
-	ss->ss_sp = lss->ss_sp;
-	ss->ss_size = lss->ss_size;
-	ss->ss_flags = linux_to_bsd_sigaltstack(lss->ss_flags);
+	ss.ss_sp = lss->ss_sp;
+	ss.ss_size = lss->ss_size;
+	ss.ss_flags = linux_to_bsd_sigaltstack(lss->ss_flags);
 
 #ifdef DEBUG
 	if (ldebug(rt_sigreturn))
 		printf(LMSG("rt_sigret flags: 0x%x, sp: %p, ss: 0x%x, mask: 0x%x"),
-		    ss->ss_flags, ss->ss_sp, ss->ss_size, context->sc_mask);
+		    ss.ss_flags, ss.ss_sp, ss.ss_size, context->sc_mask);
 #endif
-	sasargs.ss = ss;
-	sasargs.oss = NULL;
-	sasargs.sysmsg_result = 0;
-	(void) sigaltstack(&sasargs);
-	args->sysmsg_result = sasargs.sysmsg_result;
+	kern_sigaltstack(&ss, NULL);
 
 	return (EJUSTRETURN);
 }

