]> git.neil.brown.name Git - history.git/commitdiff
[PATCH] ia64: MINSIGSTKSZ on ia32
authorArun Sharma <arun.sharma@intel.com>
Mon, 8 Sep 2003 10:10:45 +0000 (03:10 -0700)
committerDavid Mosberger <davidm@tiger.hpl.hp.com>
Mon, 8 Sep 2003 10:10:45 +0000 (03:10 -0700)
MINSIGSTKSZ is defined differently for i386 and ia64. This patch improves
compatibility with apps which use sigaltstack(2) with sizes between
MINSIGSTKSZ_IA32 and MINSIGSTKSZ.

arch/ia64/ia32/sys_ia32.c

index fcd6d712757e901d493ba4ed92d2fd1807819edb..d4931dc98dbd497810557c1279bf488849275188 100644 (file)
@@ -76,6 +76,7 @@
 
 #define OFFSET4K(a)            ((a) & 0xfff)
 #define PAGE_START(addr)       ((addr) & PAGE_MASK)
+#define MINSIGSTKSZ_IA32       2048
 
 #define high2lowuid(uid) ((uid) > 65535 ? 65534 : (uid))
 #define high2lowgid(gid) ((gid) > 65535 ? 65534 : (gid))
@@ -2262,10 +2263,18 @@ sys32_sigaltstack (ia32_stack_t *uss32, ia32_stack_t *uoss32,
                        return -EFAULT;
        uss.ss_sp = (void *) (long) buf32.ss_sp;
        uss.ss_flags = buf32.ss_flags;
-       uss.ss_size = buf32.ss_size;
+       /* MINSIGSTKSZ is different for ia32 vs ia64. We lie here to pass the 
+           check and set it to the user requested value later */
+       if (buf32.ss_size < MINSIGSTKSZ_IA32) {
+               ret = -ENOMEM;
+               goto out;
+       }
+       uss.ss_size = MINSIGSTKSZ;
        set_fs(KERNEL_DS);
        ret = do_sigaltstack(uss32 ? &uss : NULL, &uoss, pt->r12);
+       current->sas_ss_size = buf32.ss_size;   
        set_fs(old_fs);
+out:
        if (ret < 0)
                return(ret);
        if (uoss32) {