From dee4ec33cf31c078746a25bf5a6a5f34b4235fd4 Mon Sep 17 00:00:00 2001 From: Marcel Moolenaar Date: Wed, 6 Sep 2000 06:08:54 +0000 Subject: [PATCH] When sigaltstack is called with a stack size that's not smaller than LINUX_MINSIGSTKSZ but smaller than MINSIGSTKSZ, cheat and pass MINSIGSTKSZ to the kernel. This is a workaround. Submitted through: nate --- sys/alpha/linux/linux.h | 3 +++ sys/alpha/linux/linux_machdep.c | 3 ++- sys/i386/linux/linux.h | 3 +++ sys/i386/linux/linux_machdep.c | 3 ++- 4 files changed, 10 insertions(+), 2 deletions(-) diff --git a/sys/alpha/linux/linux.h b/sys/alpha/linux/linux.h index 3bb46547aed..8887ec36f67 100644 --- a/sys/alpha/linux/linux.h +++ b/sys/alpha/linux/linux.h @@ -157,6 +157,9 @@ struct linux_new_utsname { #define LINUX_SIGISMEMBER(set, sig) SIGISMEMBER(set, sig) #define LINUX_SIGADDSET(set, sig) SIGADDSET(set, sig) +/* sigaltstack */ +#define LINUX_MINSIGSTKSZ 2048 + typedef void (*linux_handler_t)(int); typedef u_long linux_osigset_t; diff --git a/sys/alpha/linux/linux_machdep.c b/sys/alpha/linux/linux_machdep.c index 14e8a535730..afcfd4c734f 100644 --- a/sys/alpha/linux/linux_machdep.c +++ b/sys/alpha/linux/linux_machdep.c @@ -612,7 +612,8 @@ linux_sigaltstack(p, uap) ss = stackgap_alloc(&sg, sizeof(stack_t)); ss->ss_sp = lss.ss_sp; - ss->ss_size = lss.ss_size; + ss->ss_size = (lss.ss_size >= LINUX_MINSIGSTKSZ && + lss.ss_size < MINSIGSTKSZ) ? MINSIGSTKSZ : lss.ss_size; ss->ss_flags = lss.ss_flags; oss = (uap->uoss != NULL) diff --git a/sys/i386/linux/linux.h b/sys/i386/linux/linux.h index 3bb46547aed..8887ec36f67 100644 --- a/sys/i386/linux/linux.h +++ b/sys/i386/linux/linux.h @@ -157,6 +157,9 @@ struct linux_new_utsname { #define LINUX_SIGISMEMBER(set, sig) SIGISMEMBER(set, sig) #define LINUX_SIGADDSET(set, sig) SIGADDSET(set, sig) +/* sigaltstack */ +#define LINUX_MINSIGSTKSZ 2048 + typedef void (*linux_handler_t)(int); typedef u_long linux_osigset_t; diff --git a/sys/i386/linux/linux_machdep.c b/sys/i386/linux/linux_machdep.c index 14e8a535730..afcfd4c734f 100644 --- a/sys/i386/linux/linux_machdep.c +++ b/sys/i386/linux/linux_machdep.c @@ -612,7 +612,8 @@ linux_sigaltstack(p, uap) ss = stackgap_alloc(&sg, sizeof(stack_t)); ss->ss_sp = lss.ss_sp; - ss->ss_size = lss.ss_size; + ss->ss_size = (lss.ss_size >= LINUX_MINSIGSTKSZ && + lss.ss_size < MINSIGSTKSZ) ? MINSIGSTKSZ : lss.ss_size; ss->ss_flags = lss.ss_flags; oss = (uap->uoss != NULL)