Browse Source

Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/signal

Pull signal handling cleanups from Al Viro:
 "sigaltstack infrastructure + conversion for x86, alpha and um,
  COMPAT_SYSCALL_DEFINE infrastructure.

  Note that there are several conflicts between "unify
  SS_ONSTACK/SS_DISABLE definitions" and UAPI patches in mainline;
  resolution is trivial - just remove definitions of SS_ONSTACK and
  SS_DISABLED from arch/*/uapi/asm/signal.h; they are all identical and
  include/uapi/linux/signal.h contains the unified variant."

Fixed up conflicts as per Al.

* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/signal:
  alpha: switch to generic sigaltstack
  new helpers: __save_altstack/__compat_save_altstack, switch x86 and um to those
  generic compat_sys_sigaltstack()
  introduce generic sys_sigaltstack(), switch x86 and um to it
  new helper: compat_user_stack_pointer()
  new helper: restore_altstack()
  unify SS_ONSTACK/SS_DISABLE definitions
  new helper: current_user_stack_pointer()
  missing user_stack_pointer() instances
  Bury the conditionals from kernel_thread/kernel_execve series
  COMPAT_SYSCALL_DEFINE: infrastructure
Linus Torvalds 12 năm trước cách đây
mục cha
commit
54d46ea993
100 tập tin đã thay đổi với 52 bổ sung299 xóa
  1. 3 6
      arch/Kconfig
  2. 1 2
      arch/alpha/Kconfig
  3. 1 0
      arch/alpha/include/asm/ptrace.h
  4. 0 1
      arch/alpha/include/asm/unistd.h
  5. 0 6
      arch/alpha/include/uapi/asm/signal.h
  6. 1 9
      arch/alpha/kernel/signal.c
  7. 0 2
      arch/arm/Kconfig
  8. 0 1
      arch/arm/include/asm/unistd.h
  9. 0 7
      arch/arm/include/uapi/asm/signal.h
  10. 0 2
      arch/arm64/Kconfig
  11. 3 2
      arch/arm64/include/asm/compat.h
  12. 0 1
      arch/arm64/include/asm/unistd.h
  13. 0 2
      arch/avr32/Kconfig
  14. 1 0
      arch/avr32/include/asm/ptrace.h
  15. 0 1
      arch/avr32/include/asm/unistd.h
  16. 0 6
      arch/avr32/include/uapi/asm/signal.h
  17. 0 2
      arch/blackfin/Kconfig
  18. 1 0
      arch/blackfin/include/asm/ptrace.h
  19. 0 1
      arch/blackfin/include/asm/unistd.h
  20. 0 2
      arch/c6x/Kconfig
  21. 0 1
      arch/c6x/include/uapi/asm/unistd.h
  22. 0 2
      arch/cris/Kconfig
  23. 1 0
      arch/cris/include/asm/ptrace.h
  24. 0 1
      arch/cris/include/asm/unistd.h
  25. 0 6
      arch/cris/include/uapi/asm/signal.h
  26. 0 2
      arch/frv/Kconfig
  27. 0 1
      arch/frv/include/asm/unistd.h
  28. 0 2
      arch/h8300/Kconfig
  29. 1 0
      arch/h8300/include/asm/ptrace.h
  30. 0 1
      arch/h8300/include/asm/unistd.h
  31. 0 6
      arch/h8300/include/uapi/asm/signal.h
  32. 0 2
      arch/hexagon/Kconfig
  33. 0 1
      arch/hexagon/include/uapi/asm/unistd.h
  34. 0 2
      arch/ia64/Kconfig
  35. 5 0
      arch/ia64/include/asm/ptrace.h
  36. 0 1
      arch/ia64/include/asm/unistd.h
  37. 0 6
      arch/ia64/include/uapi/asm/signal.h
  38. 0 2
      arch/m32r/Kconfig
  39. 1 0
      arch/m32r/include/asm/ptrace.h
  40. 0 1
      arch/m32r/include/asm/unistd.h
  41. 0 6
      arch/m32r/include/uapi/asm/signal.h
  42. 0 2
      arch/m68k/Kconfig
  43. 1 0
      arch/m68k/include/asm/ptrace.h
  44. 0 1
      arch/m68k/include/asm/unistd.h
  45. 0 6
      arch/m68k/include/uapi/asm/signal.h
  46. 0 2
      arch/microblaze/Kconfig
  47. 1 0
      arch/microblaze/include/asm/ptrace.h
  48. 0 1
      arch/microblaze/include/asm/unistd.h
  49. 0 2
      arch/mips/Kconfig
  50. 1 0
      arch/mips/include/asm/ptrace.h
  51. 0 1
      arch/mips/include/asm/unistd.h
  52. 0 6
      arch/mips/include/uapi/asm/signal.h
  53. 0 2
      arch/mn10300/Kconfig
  54. 0 1
      arch/mn10300/include/asm/unistd.h
  55. 0 6
      arch/mn10300/include/uapi/asm/signal.h
  56. 0 2
      arch/openrisc/Kconfig
  57. 0 1
      arch/openrisc/include/uapi/asm/unistd.h
  58. 0 2
      arch/parisc/Kconfig
  59. 0 1
      arch/parisc/include/asm/unistd.h
  60. 0 6
      arch/parisc/include/uapi/asm/signal.h
  61. 0 2
      arch/powerpc/Kconfig
  62. 0 1
      arch/powerpc/include/asm/unistd.h
  63. 0 6
      arch/powerpc/include/uapi/asm/signal.h
  64. 0 2
      arch/s390/Kconfig
  65. 3 0
      arch/s390/include/asm/compat.h
  66. 0 1
      arch/s390/include/asm/unistd.h
  67. 0 6
      arch/s390/include/uapi/asm/signal.h
  68. 0 2
      arch/score/Kconfig
  69. 1 0
      arch/score/include/asm/ptrace.h
  70. 0 1
      arch/score/include/uapi/asm/unistd.h
  71. 0 2
      arch/sh/Kconfig
  72. 0 1
      arch/sh/include/asm/unistd.h
  73. 0 2
      arch/sparc/Kconfig
  74. 0 1
      arch/sparc/include/asm/unistd.h
  75. 0 6
      arch/sparc/include/uapi/asm/signal.h
  76. 0 2
      arch/tile/Kconfig
  77. 1 0
      arch/tile/include/asm/ptrace.h
  78. 0 1
      arch/tile/include/asm/unistd.h
  79. 0 5
      arch/um/kernel/signal.c
  80. 0 2
      arch/unicore32/Kconfig
  81. 1 0
      arch/unicore32/include/asm/ptrace.h
  82. 0 1
      arch/unicore32/include/uapi/asm/unistd.h
  83. 1 2
      arch/x86/Kconfig
  84. 2 53
      arch/x86/ia32/ia32_signal.c
  85. 0 1
      arch/x86/ia32/ia32entry.S
  86. 2 8
      arch/x86/include/asm/ia32.h
  87. 7 0
      arch/x86/include/asm/ptrace.h
  88. 0 2
      arch/x86/include/asm/sys_ia32.h
  89. 0 3
      arch/x86/include/asm/syscalls.h
  90. 0 1
      arch/x86/include/asm/unistd.h
  91. 0 6
      arch/x86/include/uapi/asm/signal.h
  92. 0 1
      arch/x86/kernel/entry_32.S
  93. 0 3
      arch/x86/kernel/entry_64.S
  94. 5 24
      arch/x86/kernel/signal.c
  95. 1 1
      arch/x86/syscalls/syscall_32.tbl
  96. 2 2
      arch/x86/syscalls/syscall_64.tbl
  97. 1 2
      arch/x86/um/Kconfig
  98. 1 0
      arch/x86/um/asm/ptrace.h
  99. 2 7
      arch/x86/um/signal.c
  100. 0 1
      arch/x86/um/sys_call_table_32.c

+ 3 - 6
arch/Kconfig

@@ -291,12 +291,6 @@ config ARCH_WANT_OLD_COMPAT_IPC
 	select ARCH_WANT_COMPAT_IPC_PARSE_VERSION
 	select ARCH_WANT_COMPAT_IPC_PARSE_VERSION
 	bool
 	bool
 
 
-config GENERIC_KERNEL_THREAD
-	bool
-
-config GENERIC_KERNEL_EXECVE
-	bool
-
 config HAVE_ARCH_SECCOMP_FILTER
 config HAVE_ARCH_SECCOMP_FILTER
 	bool
 	bool
 	help
 	help
@@ -362,6 +356,9 @@ config MODULES_USE_ELF_REL
 	  Modules only use ELF REL relocations.  Modules with ELF RELA
 	  Modules only use ELF REL relocations.  Modules with ELF RELA
 	  relocations will give an error.
 	  relocations will give an error.
 
 
+config GENERIC_SIGALTSTACK
+	bool
+
 #
 #
 # ABI hall of shame
 # ABI hall of shame
 #
 #

+ 1 - 2
arch/alpha/Kconfig

@@ -20,10 +20,9 @@ config ALPHA
 	select GENERIC_CMOS_UPDATE
 	select GENERIC_CMOS_UPDATE
 	select GENERIC_STRNCPY_FROM_USER
 	select GENERIC_STRNCPY_FROM_USER
 	select GENERIC_STRNLEN_USER
 	select GENERIC_STRNLEN_USER
-	select GENERIC_KERNEL_THREAD
-	select GENERIC_KERNEL_EXECVE
 	select HAVE_MOD_ARCH_SPECIFIC
 	select HAVE_MOD_ARCH_SPECIFIC
 	select MODULES_USE_ELF_RELA
 	select MODULES_USE_ELF_RELA
+	select GENERIC_SIGALTSTACK
 	help
 	help
 	  The Alpha is a 64-bit general-purpose processor designed and
 	  The Alpha is a 64-bit general-purpose processor designed and
 	  marketed by the Digital Equipment Corporation of blessed memory,
 	  marketed by the Digital Equipment Corporation of blessed memory,

+ 1 - 0
arch/alpha/include/asm/ptrace.h

@@ -8,6 +8,7 @@
 #define user_mode(regs) (((regs)->ps & 8) != 0)
 #define user_mode(regs) (((regs)->ps & 8) != 0)
 #define instruction_pointer(regs) ((regs)->pc)
 #define instruction_pointer(regs) ((regs)->pc)
 #define profile_pc(regs) instruction_pointer(regs)
 #define profile_pc(regs) instruction_pointer(regs)
+#define current_user_stack_pointer() rdusp()
 
 
 #define task_pt_regs(task) \
 #define task_pt_regs(task) \
   ((struct pt_regs *) (task_stack_page(task) + 2*PAGE_SIZE) - 1)
   ((struct pt_regs *) (task_stack_page(task) + 2*PAGE_SIZE) - 1)

+ 0 - 1
arch/alpha/include/asm/unistd.h

@@ -15,7 +15,6 @@
 #define __ARCH_WANT_SYS_OLDUMOUNT
 #define __ARCH_WANT_SYS_OLDUMOUNT
 #define __ARCH_WANT_SYS_SIGPENDING
 #define __ARCH_WANT_SYS_SIGPENDING
 #define __ARCH_WANT_SYS_RT_SIGSUSPEND
 #define __ARCH_WANT_SYS_RT_SIGSUSPEND
-#define __ARCH_WANT_SYS_EXECVE
 #define __ARCH_WANT_SYS_FORK
 #define __ARCH_WANT_SYS_FORK
 #define __ARCH_WANT_SYS_VFORK
 #define __ARCH_WANT_SYS_VFORK
 #define __ARCH_WANT_SYS_CLONE
 #define __ARCH_WANT_SYS_CLONE

+ 0 - 6
arch/alpha/include/uapi/asm/signal.h

@@ -84,12 +84,6 @@ typedef unsigned long sigset_t;
 #define SA_ONESHOT	SA_RESETHAND
 #define SA_ONESHOT	SA_RESETHAND
 #define SA_NOMASK	SA_NODEFER
 #define SA_NOMASK	SA_NODEFER
 
 
-/* 
- * sigaltstack controls
- */
-#define SS_ONSTACK	1
-#define SS_DISABLE	2
-
 #define MINSIGSTKSZ	4096
 #define MINSIGSTKSZ	4096
 #define SIGSTKSZ	16384
 #define SIGSTKSZ	16384
 
 

+ 1 - 9
arch/alpha/kernel/signal.c

@@ -122,12 +122,6 @@ SYSCALL_DEFINE1(sigsuspend, old_sigset_t, mask)
 	return sigsuspend(&blocked);
 	return sigsuspend(&blocked);
 }
 }
 
 
-asmlinkage int
-sys_sigaltstack(const stack_t __user *uss, stack_t __user *uoss)
-{
-	return do_sigaltstack(uss, uoss, rdusp());
-}
-
 /*
 /*
  * Do a signal return; undo the signal stack.
  * Do a signal return; undo the signal stack.
  */
  */
@@ -418,9 +412,7 @@ setup_rt_frame(int sig, struct k_sigaction *ka, siginfo_t *info,
 	err |= __put_user(0, &frame->uc.uc_flags);
 	err |= __put_user(0, &frame->uc.uc_flags);
 	err |= __put_user(0, &frame->uc.uc_link);
 	err |= __put_user(0, &frame->uc.uc_link);
 	err |= __put_user(set->sig[0], &frame->uc.uc_osf_sigmask);
 	err |= __put_user(set->sig[0], &frame->uc.uc_osf_sigmask);
-	err |= __put_user(current->sas_ss_sp, &frame->uc.uc_stack.ss_sp);
-	err |= __put_user(sas_ss_flags(oldsp), &frame->uc.uc_stack.ss_flags);
-	err |= __put_user(current->sas_ss_size, &frame->uc.uc_stack.ss_size);
+	err |= __save_altstack(&frame->uc.uc_stack, oldsp);
 	err |= setup_sigcontext(&frame->uc.uc_mcontext, regs, 
 	err |= setup_sigcontext(&frame->uc.uc_mcontext, regs, 
 				set->sig[0], oldsp);
 				set->sig[0], oldsp);
 	err |= __copy_to_user(&frame->uc.uc_sigmask, set, sizeof(*set));
 	err |= __copy_to_user(&frame->uc.uc_sigmask, set, sizeof(*set));

+ 0 - 2
arch/arm/Kconfig

@@ -12,8 +12,6 @@ config ARM
 	select GENERIC_CLOCKEVENTS_BROADCAST if SMP
 	select GENERIC_CLOCKEVENTS_BROADCAST if SMP
 	select GENERIC_IRQ_PROBE
 	select GENERIC_IRQ_PROBE
 	select GENERIC_IRQ_SHOW
 	select GENERIC_IRQ_SHOW
-	select GENERIC_KERNEL_THREAD
-	select GENERIC_KERNEL_EXECVE
 	select GENERIC_PCI_IOMAP
 	select GENERIC_PCI_IOMAP
 	select GENERIC_SMP_IDLE_THREAD
 	select GENERIC_SMP_IDLE_THREAD
 	select GENERIC_STRNCPY_FROM_USER
 	select GENERIC_STRNCPY_FROM_USER

+ 0 - 1
arch/arm/include/asm/unistd.h

@@ -41,7 +41,6 @@
 #define __ARCH_WANT_OLD_READDIR
 #define __ARCH_WANT_OLD_READDIR
 #define __ARCH_WANT_SYS_SOCKETCALL
 #define __ARCH_WANT_SYS_SOCKETCALL
 #endif
 #endif
-#define __ARCH_WANT_SYS_EXECVE
 #define __ARCH_WANT_SYS_FORK
 #define __ARCH_WANT_SYS_FORK
 #define __ARCH_WANT_SYS_VFORK
 #define __ARCH_WANT_SYS_VFORK
 #define __ARCH_WANT_SYS_CLONE
 #define __ARCH_WANT_SYS_CLONE

+ 0 - 7
arch/arm/include/uapi/asm/signal.h

@@ -87,13 +87,6 @@ typedef unsigned long sigset_t;
 #define SA_NOMASK	SA_NODEFER
 #define SA_NOMASK	SA_NODEFER
 #define SA_ONESHOT	SA_RESETHAND
 #define SA_ONESHOT	SA_RESETHAND
 
 
-
-/* 
- * sigaltstack controls
- */
-#define SS_ONSTACK	1
-#define SS_DISABLE	2
-
 #define MINSIGSTKSZ	2048
 #define MINSIGSTKSZ	2048
 #define SIGSTKSZ	8192
 #define SIGSTKSZ	8192
 
 

+ 0 - 2
arch/arm64/Kconfig

@@ -8,8 +8,6 @@ config ARM64
 	select GENERIC_IOMAP
 	select GENERIC_IOMAP
 	select GENERIC_IRQ_PROBE
 	select GENERIC_IRQ_PROBE
 	select GENERIC_IRQ_SHOW
 	select GENERIC_IRQ_SHOW
-	select GENERIC_KERNEL_EXECVE
-	select GENERIC_KERNEL_THREAD
 	select GENERIC_SMP_IDLE_THREAD
 	select GENERIC_SMP_IDLE_THREAD
 	select GENERIC_TIME_VSYSCALL
 	select GENERIC_TIME_VSYSCALL
 	select HARDIRQS_SW_RESEND
 	select HARDIRQS_SW_RESEND

+ 3 - 2
arch/arm64/include/asm/compat.h

@@ -209,10 +209,11 @@ static inline compat_uptr_t ptr_to_compat(void __user *uptr)
 	return (u32)(unsigned long)uptr;
 	return (u32)(unsigned long)uptr;
 }
 }
 
 
+#define compat_user_stack_pointer() (current_pt_regs()->compat_sp)
+
 static inline void __user *arch_compat_alloc_user_space(long len)
 static inline void __user *arch_compat_alloc_user_space(long len)
 {
 {
-	struct pt_regs *regs = task_pt_regs(current);
-	return (void __user *)regs->compat_sp - len;
+	return (void __user *)compat_user_stack_pointer() - len;
 }
 }
 
 
 struct compat_ipc64_perm {
 struct compat_ipc64_perm {

+ 0 - 1
arch/arm64/include/asm/unistd.h

@@ -28,6 +28,5 @@
 #define __ARCH_WANT_SYS_FORK
 #define __ARCH_WANT_SYS_FORK
 #define __ARCH_WANT_SYS_VFORK
 #define __ARCH_WANT_SYS_VFORK
 #endif
 #endif
-#define __ARCH_WANT_SYS_EXECVE
 #define __ARCH_WANT_SYS_CLONE
 #define __ARCH_WANT_SYS_CLONE
 #include <uapi/asm/unistd.h>
 #include <uapi/asm/unistd.h>

+ 0 - 2
arch/avr32/Kconfig

@@ -17,8 +17,6 @@ config AVR32
 	select GENERIC_CLOCKEVENTS
 	select GENERIC_CLOCKEVENTS
 	select HAVE_MOD_ARCH_SPECIFIC
 	select HAVE_MOD_ARCH_SPECIFIC
 	select MODULES_USE_ELF_RELA
 	select MODULES_USE_ELF_RELA
-	select GENERIC_KERNEL_THREAD
-	select GENERIC_KERNEL_EXECVE
 	help
 	help
 	  AVR32 is a high-performance 32-bit RISC microprocessor core,
 	  AVR32 is a high-performance 32-bit RISC microprocessor core,
 	  designed for cost-sensitive embedded applications, with particular
 	  designed for cost-sensitive embedded applications, with particular

+ 1 - 0
arch/avr32/include/asm/ptrace.h

@@ -21,6 +21,7 @@
 #define user_mode(regs)                 (((regs)->sr & MODE_MASK) == MODE_USER)
 #define user_mode(regs)                 (((regs)->sr & MODE_MASK) == MODE_USER)
 #define instruction_pointer(regs)       ((regs)->pc)
 #define instruction_pointer(regs)       ((regs)->pc)
 #define profile_pc(regs)                instruction_pointer(regs)
 #define profile_pc(regs)                instruction_pointer(regs)
+#define user_stack_pointer(regs)	((regs)->sp)
 
 
 static __inline__ int valid_user_regs(struct pt_regs *regs)
 static __inline__ int valid_user_regs(struct pt_regs *regs)
 {
 {

+ 0 - 1
arch/avr32/include/asm/unistd.h

@@ -39,7 +39,6 @@
 #define __ARCH_WANT_SYS_GETPGRP
 #define __ARCH_WANT_SYS_GETPGRP
 #define __ARCH_WANT_SYS_RT_SIGACTION
 #define __ARCH_WANT_SYS_RT_SIGACTION
 #define __ARCH_WANT_SYS_RT_SIGSUSPEND
 #define __ARCH_WANT_SYS_RT_SIGSUSPEND
-#define __ARCH_WANT_SYS_EXECVE
 #define __ARCH_WANT_SYS_FORK
 #define __ARCH_WANT_SYS_FORK
 #define __ARCH_WANT_SYS_VFORK
 #define __ARCH_WANT_SYS_VFORK
 #define __ARCH_WANT_SYS_CLONE
 #define __ARCH_WANT_SYS_CLONE

+ 0 - 6
arch/avr32/include/uapi/asm/signal.h

@@ -89,12 +89,6 @@ typedef unsigned long sigset_t;
 #define SA_NOMASK	SA_NODEFER
 #define SA_NOMASK	SA_NODEFER
 #define SA_ONESHOT	SA_RESETHAND
 #define SA_ONESHOT	SA_RESETHAND
 
 
-/*
- * sigaltstack controls
- */
-#define SS_ONSTACK	1
-#define SS_DISABLE	2
-
 #define MINSIGSTKSZ	2048
 #define MINSIGSTKSZ	2048
 #define SIGSTKSZ	8192
 #define SIGSTKSZ	8192
 
 

+ 0 - 2
arch/blackfin/Kconfig

@@ -45,8 +45,6 @@ config BLACKFIN
 	select ARCH_USES_GETTIMEOFFSET if !GENERIC_CLOCKEVENTS
 	select ARCH_USES_GETTIMEOFFSET if !GENERIC_CLOCKEVENTS
 	select HAVE_MOD_ARCH_SPECIFIC
 	select HAVE_MOD_ARCH_SPECIFIC
 	select MODULES_USE_ELF_RELA
 	select MODULES_USE_ELF_RELA
-	select GENERIC_KERNEL_THREAD
-	select GENERIC_KERNEL_EXECVE
 
 
 config GENERIC_CSUM
 config GENERIC_CSUM
 	def_bool y
 	def_bool y

+ 1 - 0
arch/blackfin/include/asm/ptrace.h

@@ -17,6 +17,7 @@
 #define arch_has_single_step()	(1)
 #define arch_has_single_step()	(1)
 /* common code demands this function */
 /* common code demands this function */
 #define ptrace_disable(child) user_disable_single_step(child)
 #define ptrace_disable(child) user_disable_single_step(child)
+#define current_user_stack_pointer() rdusp()
 
 
 extern int is_user_addr_valid(struct task_struct *child,
 extern int is_user_addr_valid(struct task_struct *child,
 			      unsigned long start, unsigned long len);
 			      unsigned long start, unsigned long len);

+ 0 - 1
arch/blackfin/include/asm/unistd.h

@@ -20,7 +20,6 @@
 #define __ARCH_WANT_SYS_NICE
 #define __ARCH_WANT_SYS_NICE
 #define __ARCH_WANT_SYS_RT_SIGACTION
 #define __ARCH_WANT_SYS_RT_SIGACTION
 #define __ARCH_WANT_SYS_RT_SIGSUSPEND
 #define __ARCH_WANT_SYS_RT_SIGSUSPEND
-#define __ARCH_WANT_SYS_EXECVE
 #define __ARCH_WANT_SYS_VFORK
 #define __ARCH_WANT_SYS_VFORK
 
 
 /*
 /*

+ 0 - 2
arch/c6x/Kconfig

@@ -17,8 +17,6 @@ config C6X
 	select OF
 	select OF
 	select OF_EARLY_FLATTREE
 	select OF_EARLY_FLATTREE
 	select GENERIC_CLOCKEVENTS
 	select GENERIC_CLOCKEVENTS
-	select GENERIC_KERNEL_THREAD
-	select GENERIC_KERNEL_EXECVE
 	select MODULES_USE_ELF_RELA
 	select MODULES_USE_ELF_RELA
 
 
 config MMU
 config MMU

+ 0 - 1
arch/c6x/include/uapi/asm/unistd.h

@@ -14,7 +14,6 @@
  *   more details.
  *   more details.
  */
  */
 
 
-#define __ARCH_WANT_SYS_EXECVE
 #define __ARCH_WANT_SYS_CLONE
 #define __ARCH_WANT_SYS_CLONE
 
 
 /* Use the standard ABI for syscalls. */
 /* Use the standard ABI for syscalls. */

+ 0 - 2
arch/cris/Kconfig

@@ -49,8 +49,6 @@ config CRIS
 	select GENERIC_SMP_IDLE_THREAD if ETRAX_ARCH_V32
 	select GENERIC_SMP_IDLE_THREAD if ETRAX_ARCH_V32
 	select GENERIC_CMOS_UPDATE
 	select GENERIC_CMOS_UPDATE
 	select MODULES_USE_ELF_RELA
 	select MODULES_USE_ELF_RELA
-	select GENERIC_KERNEL_THREAD
-	select GENERIC_KERNEL_EXECVE
 	select CLONE_BACKWARDS2
 	select CLONE_BACKWARDS2
 
 
 config HZ
 config HZ

+ 1 - 0
arch/cris/include/asm/ptrace.h

@@ -9,5 +9,6 @@
 #define PTRACE_SETREGS            13
 #define PTRACE_SETREGS            13
 
 
 #define profile_pc(regs) instruction_pointer(regs)
 #define profile_pc(regs) instruction_pointer(regs)
+#define current_user_stack_pointer() rdusp()
 
 
 #endif /* _CRIS_PTRACE_H */
 #endif /* _CRIS_PTRACE_H */

+ 0 - 1
arch/cris/include/asm/unistd.h

@@ -32,7 +32,6 @@
 #define __ARCH_WANT_SYS_SIGPROCMASK
 #define __ARCH_WANT_SYS_SIGPROCMASK
 #define __ARCH_WANT_SYS_RT_SIGACTION
 #define __ARCH_WANT_SYS_RT_SIGACTION
 #define __ARCH_WANT_SYS_RT_SIGSUSPEND
 #define __ARCH_WANT_SYS_RT_SIGSUSPEND
-#define __ARCH_WANT_SYS_EXECVE
 #define __ARCH_WANT_SYS_FORK
 #define __ARCH_WANT_SYS_FORK
 #define __ARCH_WANT_SYS_VFORK
 #define __ARCH_WANT_SYS_VFORK
 #define __ARCH_WANT_SYS_CLONE
 #define __ARCH_WANT_SYS_CLONE

+ 0 - 6
arch/cris/include/uapi/asm/signal.h

@@ -83,12 +83,6 @@ typedef unsigned long sigset_t;
 
 
 #define SA_RESTORER	0x04000000
 #define SA_RESTORER	0x04000000
 
 
-/* 
- * sigaltstack controls
- */
-#define SS_ONSTACK	1
-#define SS_DISABLE	2
-
 #define MINSIGSTKSZ	2048
 #define MINSIGSTKSZ	2048
 #define SIGSTKSZ	8192
 #define SIGSTKSZ	8192
 
 

+ 0 - 2
arch/frv/Kconfig

@@ -12,8 +12,6 @@ config FRV
 	select ARCH_HAVE_NMI_SAFE_CMPXCHG
 	select ARCH_HAVE_NMI_SAFE_CMPXCHG
 	select GENERIC_CPU_DEVICES
 	select GENERIC_CPU_DEVICES
 	select ARCH_WANT_IPC_PARSE_VERSION
 	select ARCH_WANT_IPC_PARSE_VERSION
-	select GENERIC_KERNEL_THREAD
-	select GENERIC_KERNEL_EXECVE
 
 
 config ZONE_DMA
 config ZONE_DMA
 	bool
 	bool

+ 0 - 1
arch/frv/include/asm/unistd.h

@@ -29,7 +29,6 @@
 #define __ARCH_WANT_SYS_SIGPROCMASK
 #define __ARCH_WANT_SYS_SIGPROCMASK
 #define __ARCH_WANT_SYS_RT_SIGACTION
 #define __ARCH_WANT_SYS_RT_SIGACTION
 #define __ARCH_WANT_SYS_RT_SIGSUSPEND
 #define __ARCH_WANT_SYS_RT_SIGSUSPEND
-#define __ARCH_WANT_SYS_EXECVE
 #define __ARCH_WANT_SYS_FORK
 #define __ARCH_WANT_SYS_FORK
 #define __ARCH_WANT_SYS_VFORK
 #define __ARCH_WANT_SYS_VFORK
 #define __ARCH_WANT_SYS_CLONE
 #define __ARCH_WANT_SYS_CLONE

+ 0 - 2
arch/h8300/Kconfig

@@ -9,8 +9,6 @@ config H8300
 	select GENERIC_IRQ_SHOW
 	select GENERIC_IRQ_SHOW
 	select GENERIC_CPU_DEVICES
 	select GENERIC_CPU_DEVICES
 	select MODULES_USE_ELF_RELA
 	select MODULES_USE_ELF_RELA
-	select GENERIC_KERNEL_THREAD
-	select GENERIC_KERNEL_EXECVE
 
 
 config SYMBOL_PREFIX
 config SYMBOL_PREFIX
 	string
 	string

+ 1 - 0
arch/h8300/include/asm/ptrace.h

@@ -28,5 +28,6 @@
 #define current_pt_regs() ((struct pt_regs *) \
 #define current_pt_regs() ((struct pt_regs *) \
 	(THREAD_SIZE + (unsigned long)current_thread_info()) - 1)
 	(THREAD_SIZE + (unsigned long)current_thread_info()) - 1)
 #define signal_pt_regs() ((struct pt_regs *)current->thread.esp0)
 #define signal_pt_regs() ((struct pt_regs *)current->thread.esp0)
+#define current_user_stack_pointer() rdusp()
 #endif /* __ASSEMBLY__ */
 #endif /* __ASSEMBLY__ */
 #endif /* _H8300_PTRACE_H */
 #endif /* _H8300_PTRACE_H */

+ 0 - 1
arch/h8300/include/asm/unistd.h

@@ -31,7 +31,6 @@
 #define __ARCH_WANT_SYS_SIGPROCMASK
 #define __ARCH_WANT_SYS_SIGPROCMASK
 #define __ARCH_WANT_SYS_RT_SIGACTION
 #define __ARCH_WANT_SYS_RT_SIGACTION
 #define __ARCH_WANT_SYS_RT_SIGSUSPEND
 #define __ARCH_WANT_SYS_RT_SIGSUSPEND
-#define __ARCH_WANT_SYS_EXECVE
 #define __ARCH_WANT_SYS_FORK
 #define __ARCH_WANT_SYS_FORK
 #define __ARCH_WANT_SYS_VFORK
 #define __ARCH_WANT_SYS_VFORK
 #define __ARCH_WANT_SYS_CLONE
 #define __ARCH_WANT_SYS_CLONE

+ 0 - 6
arch/h8300/include/uapi/asm/signal.h

@@ -82,12 +82,6 @@ typedef unsigned long sigset_t;
 
 
 #define SA_RESTORER	0x04000000
 #define SA_RESTORER	0x04000000
 
 
-/* 
- * sigaltstack controls
- */
-#define SS_ONSTACK	1
-#define SS_DISABLE	2
-
 #define MINSIGSTKSZ	2048
 #define MINSIGSTKSZ	2048
 #define SIGSTKSZ	8192
 #define SIGSTKSZ	8192
 
 

+ 0 - 2
arch/hexagon/Kconfig

@@ -31,8 +31,6 @@ config HEXAGON
 	select GENERIC_CLOCKEVENTS
 	select GENERIC_CLOCKEVENTS
 	select GENERIC_CLOCKEVENTS_BROADCAST
 	select GENERIC_CLOCKEVENTS_BROADCAST
 	select MODULES_USE_ELF_RELA
 	select MODULES_USE_ELF_RELA
-	select GENERIC_KERNEL_THREAD
-	select GENERIC_KERNEL_EXECVE
 	---help---
 	---help---
 	  Qualcomm Hexagon is a processor architecture designed for high
 	  Qualcomm Hexagon is a processor architecture designed for high
 	  performance and low power across a wide variety of applications.
 	  performance and low power across a wide variety of applications.

+ 0 - 1
arch/hexagon/include/uapi/asm/unistd.h

@@ -27,7 +27,6 @@
  */
  */
 
 
 #define sys_mmap2 sys_mmap_pgoff
 #define sys_mmap2 sys_mmap_pgoff
-#define __ARCH_WANT_SYS_EXECVE
 #define __ARCH_WANT_SYS_CLONE
 #define __ARCH_WANT_SYS_CLONE
 
 
 #include <asm-generic/unistd.h>
 #include <asm-generic/unistd.h>

+ 0 - 2
arch/ia64/Kconfig

@@ -42,8 +42,6 @@ config IA64
 	select GENERIC_TIME_VSYSCALL_OLD
 	select GENERIC_TIME_VSYSCALL_OLD
 	select HAVE_MOD_ARCH_SPECIFIC
 	select HAVE_MOD_ARCH_SPECIFIC
 	select MODULES_USE_ELF_RELA
 	select MODULES_USE_ELF_RELA
-	select GENERIC_KERNEL_THREAD
-	select GENERIC_KERNEL_EXECVE
 	default y
 	default y
 	help
 	help
 	  The Itanium Processor Family is Intel's 64-bit successor to
 	  The Itanium Processor Family is Intel's 64-bit successor to

+ 5 - 0
arch/ia64/include/asm/ptrace.h

@@ -78,6 +78,11 @@ static inline long regs_return_value(struct pt_regs *regs)
 	unsigned long __ip = instruction_pointer(regs);			\
 	unsigned long __ip = instruction_pointer(regs);			\
 	(__ip & ~3UL) + ((__ip & 3UL) << 2);				\
 	(__ip & ~3UL) + ((__ip & 3UL) << 2);				\
 })
 })
+/*
+ * Why not default?  Because user_stack_pointer() on ia64 gives register
+ * stack backing store instead...
+ */
+#define current_user_stack_pointer() (current_pt_regs()->r12)
 
 
   /* given a pointer to a task_struct, return the user's pt_regs */
   /* given a pointer to a task_struct, return the user's pt_regs */
 # define task_pt_regs(t)		(((struct pt_regs *) ((char *) (t) + IA64_STK_OFFSET)) - 1)
 # define task_pt_regs(t)		(((struct pt_regs *) ((char *) (t) + IA64_STK_OFFSET)) - 1)

+ 0 - 1
arch/ia64/include/asm/unistd.h

@@ -29,7 +29,6 @@
 
 
 #define __ARCH_WANT_SYS_RT_SIGACTION
 #define __ARCH_WANT_SYS_RT_SIGACTION
 #define __ARCH_WANT_SYS_RT_SIGSUSPEND
 #define __ARCH_WANT_SYS_RT_SIGSUSPEND
-#define __ARCH_WANT_SYS_EXECVE
 
 
 #if !defined(__ASSEMBLY__) && !defined(ASSEMBLER)
 #if !defined(__ASSEMBLY__) && !defined(ASSEMBLER)
 
 

+ 0 - 6
arch/ia64/include/uapi/asm/signal.h

@@ -78,12 +78,6 @@
 
 
 #define SA_RESTORER	0x04000000
 #define SA_RESTORER	0x04000000
 
 
-/*
- * sigaltstack controls
- */
-#define SS_ONSTACK	1
-#define SS_DISABLE	2
-
 /*
 /*
  * The minimum stack size needs to be fairly large because we want to
  * The minimum stack size needs to be fairly large because we want to
  * be sure that an app compiled for today's CPUs will continue to run
  * be sure that an app compiled for today's CPUs will continue to run

+ 0 - 2
arch/m32r/Kconfig

@@ -15,8 +15,6 @@ config M32R
 	select GENERIC_ATOMIC64
 	select GENERIC_ATOMIC64
 	select ARCH_USES_GETTIMEOFFSET
 	select ARCH_USES_GETTIMEOFFSET
 	select MODULES_USE_ELF_RELA
 	select MODULES_USE_ELF_RELA
-	select GENERIC_KERNEL_THREAD
-	select GENERIC_KERNEL_EXECVE
 
 
 config SBUS
 config SBUS
 	bool
 	bool

+ 1 - 0
arch/m32r/include/asm/ptrace.h

@@ -32,6 +32,7 @@ extern void init_debug_traps(struct task_struct *);
 
 
 #define instruction_pointer(regs) ((regs)->bpc)
 #define instruction_pointer(regs) ((regs)->bpc)
 #define profile_pc(regs) instruction_pointer(regs)
 #define profile_pc(regs) instruction_pointer(regs)
+#define user_stack_pointer(regs) ((regs)->spu)
 
 
 extern void withdraw_debug_trap(struct pt_regs *regs);
 extern void withdraw_debug_trap(struct pt_regs *regs);
 
 

+ 0 - 1
arch/m32r/include/asm/unistd.h

@@ -22,7 +22,6 @@
 #define __ARCH_WANT_SYS_OLDUMOUNT
 #define __ARCH_WANT_SYS_OLDUMOUNT
 #define __ARCH_WANT_SYS_RT_SIGACTION
 #define __ARCH_WANT_SYS_RT_SIGACTION
 #define __ARCH_WANT_SYS_RT_SIGSUSPEND
 #define __ARCH_WANT_SYS_RT_SIGSUSPEND
-#define __ARCH_WANT_SYS_EXECVE
 #define __ARCH_WANT_SYS_CLONE
 #define __ARCH_WANT_SYS_CLONE
 #define __ARCH_WANT_SYS_FORK
 #define __ARCH_WANT_SYS_FORK
 #define __ARCH_WANT_SYS_VFORK
 #define __ARCH_WANT_SYS_VFORK

+ 0 - 6
arch/m32r/include/uapi/asm/signal.h

@@ -84,12 +84,6 @@ typedef unsigned long sigset_t;
 
 
 #define SA_RESTORER	0x04000000
 #define SA_RESTORER	0x04000000
 
 
-/*
- * sigaltstack controls
- */
-#define SS_ONSTACK	1
-#define SS_DISABLE	2
-
 #define MINSIGSTKSZ	2048
 #define MINSIGSTKSZ	2048
 #define SIGSTKSZ	8192
 #define SIGSTKSZ	8192
 
 

+ 0 - 2
arch/m68k/Kconfig

@@ -15,8 +15,6 @@ config M68K
 	select FPU if MMU
 	select FPU if MMU
 	select ARCH_WANT_IPC_PARSE_VERSION
 	select ARCH_WANT_IPC_PARSE_VERSION
 	select ARCH_USES_GETTIMEOFFSET if MMU && !COLDFIRE
 	select ARCH_USES_GETTIMEOFFSET if MMU && !COLDFIRE
-	select GENERIC_KERNEL_THREAD
-	select GENERIC_KERNEL_EXECVE
 	select HAVE_MOD_ARCH_SPECIFIC
 	select HAVE_MOD_ARCH_SPECIFIC
 	select MODULES_USE_ELF_REL
 	select MODULES_USE_ELF_REL
 	select MODULES_USE_ELF_RELA
 	select MODULES_USE_ELF_RELA

+ 1 - 0
arch/m68k/include/asm/ptrace.h

@@ -15,6 +15,7 @@
 #define profile_pc(regs) instruction_pointer(regs)
 #define profile_pc(regs) instruction_pointer(regs)
 #define current_pt_regs() \
 #define current_pt_regs() \
 	(struct pt_regs *)((char *)current_thread_info() + THREAD_SIZE) - 1
 	(struct pt_regs *)((char *)current_thread_info() + THREAD_SIZE) - 1
+#define current_user_stack_pointer() rdusp()
 
 
 #define arch_has_single_step()	(1)
 #define arch_has_single_step()	(1)
 
 

+ 0 - 1
arch/m68k/include/asm/unistd.h

@@ -31,7 +31,6 @@
 #define __ARCH_WANT_SYS_SIGPROCMASK
 #define __ARCH_WANT_SYS_SIGPROCMASK
 #define __ARCH_WANT_SYS_RT_SIGACTION
 #define __ARCH_WANT_SYS_RT_SIGACTION
 #define __ARCH_WANT_SYS_RT_SIGSUSPEND
 #define __ARCH_WANT_SYS_RT_SIGSUSPEND
-#define __ARCH_WANT_SYS_EXECVE
 #define __ARCH_WANT_SYS_FORK
 #define __ARCH_WANT_SYS_FORK
 #define __ARCH_WANT_SYS_VFORK
 #define __ARCH_WANT_SYS_VFORK
 
 

+ 0 - 6
arch/m68k/include/uapi/asm/signal.h

@@ -80,12 +80,6 @@ typedef unsigned long sigset_t;
 #define SA_NOMASK	SA_NODEFER
 #define SA_NOMASK	SA_NODEFER
 #define SA_ONESHOT	SA_RESETHAND
 #define SA_ONESHOT	SA_RESETHAND
 
 
-/*
- * sigaltstack controls
- */
-#define SS_ONSTACK	1
-#define SS_DISABLE	2
-
 #define MINSIGSTKSZ	2048
 #define MINSIGSTKSZ	2048
 #define SIGSTKSZ	8192
 #define SIGSTKSZ	8192
 
 

+ 0 - 2
arch/microblaze/Kconfig

@@ -26,8 +26,6 @@ config MICROBLAZE
 	select GENERIC_ATOMIC64
 	select GENERIC_ATOMIC64
 	select GENERIC_CLOCKEVENTS
 	select GENERIC_CLOCKEVENTS
 	select MODULES_USE_ELF_RELA
 	select MODULES_USE_ELF_RELA
-	select GENERIC_KERNEL_THREAD
-	select GENERIC_KERNEL_EXECVE
 	select CLONE_BACKWARDS
 	select CLONE_BACKWARDS
 
 
 config SWAP
 config SWAP

+ 1 - 0
arch/microblaze/include/asm/ptrace.h

@@ -16,6 +16,7 @@
 
 
 #define instruction_pointer(regs)	((regs)->pc)
 #define instruction_pointer(regs)	((regs)->pc)
 #define profile_pc(regs)		instruction_pointer(regs)
 #define profile_pc(regs)		instruction_pointer(regs)
+#define user_stack_pointer(regs)	((regs)->r1)
 
 
 static inline long regs_return_value(struct pt_regs *regs)
 static inline long regs_return_value(struct pt_regs *regs)
 {
 {

+ 0 - 1
arch/microblaze/include/asm/unistd.h

@@ -35,7 +35,6 @@
 #define __ARCH_WANT_SYS_SIGPROCMASK
 #define __ARCH_WANT_SYS_SIGPROCMASK
 #define __ARCH_WANT_SYS_RT_SIGACTION
 #define __ARCH_WANT_SYS_RT_SIGACTION
 #define __ARCH_WANT_SYS_RT_SIGSUSPEND
 #define __ARCH_WANT_SYS_RT_SIGSUSPEND
-#define __ARCH_WANT_SYS_EXECVE
 #define __ARCH_WANT_SYS_CLONE
 #define __ARCH_WANT_SYS_CLONE
 #define __ARCH_WANT_SYS_VFORK
 #define __ARCH_WANT_SYS_VFORK
 #ifdef CONFIG_MMU
 #ifdef CONFIG_MMU

+ 0 - 2
arch/mips/Kconfig

@@ -41,8 +41,6 @@ config MIPS
 	select HAVE_MOD_ARCH_SPECIFIC
 	select HAVE_MOD_ARCH_SPECIFIC
 	select MODULES_USE_ELF_REL
 	select MODULES_USE_ELF_REL
 	select MODULES_USE_ELF_RELA if 64BIT
 	select MODULES_USE_ELF_RELA if 64BIT
-	select GENERIC_KERNEL_THREAD
-	select GENERIC_KERNEL_EXECVE
 
 
 menu "Machine selection"
 menu "Machine selection"
 
 

+ 1 - 0
arch/mips/include/asm/ptrace.h

@@ -49,6 +49,7 @@ static inline long regs_return_value(struct pt_regs *regs)
 
 
 #define instruction_pointer(regs) ((regs)->cp0_epc)
 #define instruction_pointer(regs) ((regs)->cp0_epc)
 #define profile_pc(regs) instruction_pointer(regs)
 #define profile_pc(regs) instruction_pointer(regs)
+#define user_stack_pointer(r) ((r)->regs[29])
 
 
 extern asmlinkage void syscall_trace_enter(struct pt_regs *regs);
 extern asmlinkage void syscall_trace_enter(struct pt_regs *regs);
 extern asmlinkage void syscall_trace_leave(struct pt_regs *regs);
 extern asmlinkage void syscall_trace_leave(struct pt_regs *regs);

+ 0 - 1
arch/mips/include/asm/unistd.h

@@ -20,7 +20,6 @@
 #define __ARCH_OMIT_COMPAT_SYS_GETDENTS64
 #define __ARCH_OMIT_COMPAT_SYS_GETDENTS64
 #define __ARCH_WANT_OLD_READDIR
 #define __ARCH_WANT_OLD_READDIR
 #define __ARCH_WANT_SYS_ALARM
 #define __ARCH_WANT_SYS_ALARM
-#define __ARCH_WANT_SYS_EXECVE
 #define __ARCH_WANT_SYS_GETHOSTNAME
 #define __ARCH_WANT_SYS_GETHOSTNAME
 #define __ARCH_WANT_SYS_IPC
 #define __ARCH_WANT_SYS_IPC
 #define __ARCH_WANT_SYS_PAUSE
 #define __ARCH_WANT_SYS_PAUSE

+ 0 - 6
arch/mips/include/uapi/asm/signal.h

@@ -86,12 +86,6 @@ typedef unsigned long old_sigset_t;		/* at least 32 bits */
 
 
 #define SA_RESTORER	0x04000000	/* Only for o32 */
 #define SA_RESTORER	0x04000000	/* Only for o32 */
 
 
-/*
- * sigaltstack controls
- */
-#define SS_ONSTACK     1
-#define SS_DISABLE     2
-
 #define MINSIGSTKSZ    2048
 #define MINSIGSTKSZ    2048
 #define SIGSTKSZ       8192
 #define SIGSTKSZ       8192
 
 

+ 0 - 2
arch/mn10300/Kconfig

@@ -8,8 +8,6 @@ config MN10300
 	select HAVE_ARCH_KGDB
 	select HAVE_ARCH_KGDB
 	select HAVE_NMI_WATCHDOG if MN10300_WD_TIMER
 	select HAVE_NMI_WATCHDOG if MN10300_WD_TIMER
 	select GENERIC_CLOCKEVENTS
 	select GENERIC_CLOCKEVENTS
-	select GENERIC_KERNEL_THREAD
-	select GENERIC_KERNEL_EXECVE
 	select MODULES_USE_ELF_RELA
 	select MODULES_USE_ELF_RELA
 
 
 config AM33_2
 config AM33_2

+ 0 - 1
arch/mn10300/include/asm/unistd.h

@@ -43,7 +43,6 @@
 #define __ARCH_WANT_SYS_SIGPROCMASK
 #define __ARCH_WANT_SYS_SIGPROCMASK
 #define __ARCH_WANT_SYS_RT_SIGACTION
 #define __ARCH_WANT_SYS_RT_SIGACTION
 #define __ARCH_WANT_SYS_RT_SIGSUSPEND
 #define __ARCH_WANT_SYS_RT_SIGSUSPEND
-#define __ARCH_WANT_SYS_EXECVE
 #define __ARCH_WANT_SYS_FORK
 #define __ARCH_WANT_SYS_FORK
 #define __ARCH_WANT_SYS_VFORK
 #define __ARCH_WANT_SYS_VFORK
 #define __ARCH_WANT_SYS_CLONE
 #define __ARCH_WANT_SYS_CLONE

+ 0 - 6
arch/mn10300/include/uapi/asm/signal.h

@@ -92,12 +92,6 @@ typedef unsigned long sigset_t;
 
 
 #define SA_RESTORER	0x04000000
 #define SA_RESTORER	0x04000000
 
 
-/*
- * sigaltstack controls
- */
-#define SS_ONSTACK	1
-#define SS_DISABLE	2
-
 #define MINSIGSTKSZ	2048
 #define MINSIGSTKSZ	2048
 #define SIGSTKSZ	8192
 #define SIGSTKSZ	8192
 
 

+ 0 - 2
arch/openrisc/Kconfig

@@ -22,8 +22,6 @@ config OPENRISC
 	select GENERIC_STRNCPY_FROM_USER
 	select GENERIC_STRNCPY_FROM_USER
 	select GENERIC_STRNLEN_USER
 	select GENERIC_STRNLEN_USER
 	select MODULES_USE_ELF_RELA
 	select MODULES_USE_ELF_RELA
-	select GENERIC_KERNEL_THREAD
-	select GENERIC_KERNEL_EXECVE
 
 
 config MMU
 config MMU
 	def_bool y
 	def_bool y

+ 0 - 1
arch/openrisc/include/uapi/asm/unistd.h

@@ -20,7 +20,6 @@
 
 
 #define sys_mmap2 sys_mmap_pgoff
 #define sys_mmap2 sys_mmap_pgoff
 
 
-#define __ARCH_WANT_SYS_EXECVE
 #define __ARCH_WANT_SYS_FORK
 #define __ARCH_WANT_SYS_FORK
 #define __ARCH_WANT_SYS_CLONE
 #define __ARCH_WANT_SYS_CLONE
 
 

+ 0 - 2
arch/parisc/Kconfig

@@ -22,8 +22,6 @@ config PARISC
 	select GENERIC_STRNCPY_FROM_USER
 	select GENERIC_STRNCPY_FROM_USER
 	select HAVE_MOD_ARCH_SPECIFIC
 	select HAVE_MOD_ARCH_SPECIFIC
 	select MODULES_USE_ELF_RELA
 	select MODULES_USE_ELF_RELA
-	select GENERIC_KERNEL_THREAD
-	select GENERIC_KERNEL_EXECVE
 	select CLONE_BACKWARDS
 	select CLONE_BACKWARDS
 
 
 	help
 	help

+ 0 - 1
arch/parisc/include/asm/unistd.h

@@ -163,7 +163,6 @@ type name(type1 arg1, type2 arg2, type3 arg3, type4 arg4, type5 arg5)	\
 #define __ARCH_WANT_SYS_RT_SIGACTION
 #define __ARCH_WANT_SYS_RT_SIGACTION
 #define __ARCH_WANT_SYS_RT_SIGSUSPEND
 #define __ARCH_WANT_SYS_RT_SIGSUSPEND
 #define __ARCH_WANT_COMPAT_SYS_RT_SIGSUSPEND
 #define __ARCH_WANT_COMPAT_SYS_RT_SIGSUSPEND
-#define __ARCH_WANT_SYS_EXECVE
 #define __ARCH_WANT_SYS_FORK
 #define __ARCH_WANT_SYS_FORK
 #define __ARCH_WANT_SYS_VFORK
 #define __ARCH_WANT_SYS_VFORK
 #define __ARCH_WANT_SYS_CLONE
 #define __ARCH_WANT_SYS_CLONE

+ 0 - 6
arch/parisc/include/uapi/asm/signal.h

@@ -71,12 +71,6 @@
 
 
 #define SA_RESTORER	0x04000000 /* obsolete -- ignored */
 #define SA_RESTORER	0x04000000 /* obsolete -- ignored */
 
 
-/* 
- * sigaltstack controls
- */
-#define SS_ONSTACK	1
-#define SS_DISABLE	2
-
 #define MINSIGSTKSZ	2048
 #define MINSIGSTKSZ	2048
 #define SIGSTKSZ	8192
 #define SIGSTKSZ	8192
 
 

+ 0 - 2
arch/powerpc/Kconfig

@@ -141,10 +141,8 @@ config PPC
 	select GENERIC_CLOCKEVENTS
 	select GENERIC_CLOCKEVENTS
 	select GENERIC_STRNCPY_FROM_USER
 	select GENERIC_STRNCPY_FROM_USER
 	select GENERIC_STRNLEN_USER
 	select GENERIC_STRNLEN_USER
-	select GENERIC_KERNEL_THREAD
 	select HAVE_MOD_ARCH_SPECIFIC
 	select HAVE_MOD_ARCH_SPECIFIC
 	select MODULES_USE_ELF_RELA
 	select MODULES_USE_ELF_RELA
-	select GENERIC_KERNEL_EXECVE
 	select CLONE_BACKWARDS
 	select CLONE_BACKWARDS
 
 
 config EARLY_PRINTK
 config EARLY_PRINTK

+ 0 - 1
arch/powerpc/include/asm/unistd.h

@@ -56,7 +56,6 @@
 #define __ARCH_WANT_COMPAT_SYS_SENDFILE
 #define __ARCH_WANT_COMPAT_SYS_SENDFILE
 #define __ARCH_WANT_COMPAT_SYS_SCHED_RR_GET_INTERVAL
 #define __ARCH_WANT_COMPAT_SYS_SCHED_RR_GET_INTERVAL
 #endif
 #endif
-#define __ARCH_WANT_SYS_EXECVE
 #define __ARCH_WANT_SYS_FORK
 #define __ARCH_WANT_SYS_FORK
 #define __ARCH_WANT_SYS_VFORK
 #define __ARCH_WANT_SYS_VFORK
 #define __ARCH_WANT_SYS_CLONE
 #define __ARCH_WANT_SYS_CLONE

+ 0 - 6
arch/powerpc/include/uapi/asm/signal.h

@@ -85,12 +85,6 @@ typedef struct {
 
 
 #define SA_RESTORER	0x04000000U
 #define SA_RESTORER	0x04000000U
 
 
-/*
- * sigaltstack controls
- */
-#define SS_ONSTACK	1
-#define SS_DISABLE	2
-
 #define MINSIGSTKSZ	2048
 #define MINSIGSTKSZ	2048
 #define SIGSTKSZ	8192
 #define SIGSTKSZ	8192
 
 

+ 0 - 2
arch/s390/Kconfig

@@ -137,8 +137,6 @@ config S390
 	select GENERIC_CLOCKEVENTS
 	select GENERIC_CLOCKEVENTS
 	select KTIME_SCALAR if 32BIT
 	select KTIME_SCALAR if 32BIT
 	select HAVE_ARCH_SECCOMP_FILTER
 	select HAVE_ARCH_SECCOMP_FILTER
-	select GENERIC_KERNEL_THREAD
-	select GENERIC_KERNEL_EXECVE
 	select HAVE_MOD_ARCH_SPECIFIC
 	select HAVE_MOD_ARCH_SPECIFIC
 	select MODULES_USE_ELF_RELA
 	select MODULES_USE_ELF_RELA
 	select CLONE_BACKWARDS2
 	select CLONE_BACKWARDS2

+ 3 - 0
arch/s390/include/asm/compat.h

@@ -7,6 +7,9 @@
 #include <linux/sched.h>
 #include <linux/sched.h>
 #include <linux/thread_info.h>
 #include <linux/thread_info.h>
 
 
+#define __TYPE_IS_PTR(t) (!__builtin_types_compatible_p(typeof(0?(t)0:0ULL), u64))
+#define __SC_DELOUSE(t,v) (t)(__TYPE_IS_PTR(t) ? ((v) & 0x7fffffff) : (v))
+
 #define PSW32_MASK_PER		0x40000000UL
 #define PSW32_MASK_PER		0x40000000UL
 #define PSW32_MASK_DAT		0x04000000UL
 #define PSW32_MASK_DAT		0x04000000UL
 #define PSW32_MASK_IO		0x02000000UL
 #define PSW32_MASK_IO		0x02000000UL

+ 0 - 1
arch/s390/include/asm/unistd.h

@@ -53,7 +53,6 @@
 #   define __ARCH_WANT_COMPAT_SYS_TIME
 #   define __ARCH_WANT_COMPAT_SYS_TIME
 #   define __ARCH_WANT_COMPAT_SYS_RT_SIGSUSPEND
 #   define __ARCH_WANT_COMPAT_SYS_RT_SIGSUSPEND
 # endif
 # endif
-#define __ARCH_WANT_SYS_EXECVE
 #define __ARCH_WANT_SYS_FORK
 #define __ARCH_WANT_SYS_FORK
 #define __ARCH_WANT_SYS_VFORK
 #define __ARCH_WANT_SYS_VFORK
 #define __ARCH_WANT_SYS_CLONE
 #define __ARCH_WANT_SYS_CLONE

+ 0 - 6
arch/s390/include/uapi/asm/signal.h

@@ -90,12 +90,6 @@ typedef unsigned long sigset_t;
 
 
 #define SA_RESTORER     0x04000000
 #define SA_RESTORER     0x04000000
 
 
-/*
- * sigaltstack controls
- */
-#define SS_ONSTACK      1
-#define SS_DISABLE      2
-
 #define MINSIGSTKSZ     2048
 #define MINSIGSTKSZ     2048
 #define SIGSTKSZ        8192
 #define SIGSTKSZ        8192
 
 

+ 0 - 2
arch/score/Kconfig

@@ -13,8 +13,6 @@ config SCORE
        select GENERIC_CLOCKEVENTS
        select GENERIC_CLOCKEVENTS
        select HAVE_MOD_ARCH_SPECIFIC
        select HAVE_MOD_ARCH_SPECIFIC
 	select MODULES_USE_ELF_REL
 	select MODULES_USE_ELF_REL
-	select GENERIC_KERNEL_THREAD
-	select GENERIC_KERNEL_EXECVE
 	select CLONE_BACKWARDS
 	select CLONE_BACKWARDS
 
 
 choice
 choice

+ 1 - 0
arch/score/include/asm/ptrace.h

@@ -13,6 +13,7 @@ struct task_struct;
 
 
 #define instruction_pointer(regs)	((unsigned long)(regs)->cp0_epc)
 #define instruction_pointer(regs)	((unsigned long)(regs)->cp0_epc)
 #define profile_pc(regs)		instruction_pointer(regs)
 #define profile_pc(regs)		instruction_pointer(regs)
+#define user_stack_pointer(r)		((unsigned long)(r)->regs[0])
 
 
 extern void do_syscall_trace(struct pt_regs *regs, int entryexit);
 extern void do_syscall_trace(struct pt_regs *regs, int entryexit);
 extern int read_tsk_long(struct task_struct *, unsigned long, unsigned long *);
 extern int read_tsk_long(struct task_struct *, unsigned long, unsigned long *);

+ 0 - 1
arch/score/include/uapi/asm/unistd.h

@@ -4,7 +4,6 @@
 #define __ARCH_WANT_SYSCALL_NO_FLAGS
 #define __ARCH_WANT_SYSCALL_NO_FLAGS
 #define __ARCH_WANT_SYSCALL_OFF_T
 #define __ARCH_WANT_SYSCALL_OFF_T
 #define __ARCH_WANT_SYSCALL_DEPRECATED
 #define __ARCH_WANT_SYSCALL_DEPRECATED
-#define __ARCH_WANT_SYS_EXECVE
 #define __ARCH_WANT_SYS_CLONE
 #define __ARCH_WANT_SYS_CLONE
 #define __ARCH_WANT_SYS_FORK
 #define __ARCH_WANT_SYS_FORK
 #define __ARCH_WANT_SYS_VFORK
 #define __ARCH_WANT_SYS_VFORK

+ 0 - 2
arch/sh/Kconfig

@@ -40,8 +40,6 @@ config SUPERH
 	select GENERIC_STRNLEN_USER
 	select GENERIC_STRNLEN_USER
 	select HAVE_MOD_ARCH_SPECIFIC if DWARF_UNWINDER
 	select HAVE_MOD_ARCH_SPECIFIC if DWARF_UNWINDER
 	select MODULES_USE_ELF_RELA
 	select MODULES_USE_ELF_RELA
-	select GENERIC_KERNEL_THREAD
-	select GENERIC_KERNEL_EXECVE
 	help
 	help
 	  The SuperH is a RISC processor targeted for use in embedded systems
 	  The SuperH is a RISC processor targeted for use in embedded systems
 	  and consumer electronics; it was also used in the Sega Dreamcast
 	  and consumer electronics; it was also used in the Sega Dreamcast

+ 0 - 1
arch/sh/include/asm/unistd.h

@@ -28,7 +28,6 @@
 # define __ARCH_WANT_SYS_SIGPENDING
 # define __ARCH_WANT_SYS_SIGPENDING
 # define __ARCH_WANT_SYS_SIGPROCMASK
 # define __ARCH_WANT_SYS_SIGPROCMASK
 # define __ARCH_WANT_SYS_RT_SIGACTION
 # define __ARCH_WANT_SYS_RT_SIGACTION
-# define __ARCH_WANT_SYS_EXECVE
 # define __ARCH_WANT_SYS_FORK
 # define __ARCH_WANT_SYS_FORK
 # define __ARCH_WANT_SYS_VFORK
 # define __ARCH_WANT_SYS_VFORK
 # define __ARCH_WANT_SYS_CLONE
 # define __ARCH_WANT_SYS_CLONE

+ 0 - 2
arch/sparc/Kconfig

@@ -41,8 +41,6 @@ config SPARC
 	select GENERIC_STRNCPY_FROM_USER
 	select GENERIC_STRNCPY_FROM_USER
 	select GENERIC_STRNLEN_USER
 	select GENERIC_STRNLEN_USER
 	select MODULES_USE_ELF_RELA
 	select MODULES_USE_ELF_RELA
-	select GENERIC_KERNEL_THREAD
-	select GENERIC_KERNEL_EXECVE
 
 
 config SPARC32
 config SPARC32
 	def_bool !64BIT
 	def_bool !64BIT

+ 0 - 1
arch/sparc/include/asm/unistd.h

@@ -47,7 +47,6 @@
 #define __ARCH_WANT_COMPAT_SYS_SENDFILE
 #define __ARCH_WANT_COMPAT_SYS_SENDFILE
 #define __ARCH_WANT_COMPAT_SYS_SCHED_RR_GET_INTERVAL
 #define __ARCH_WANT_COMPAT_SYS_SCHED_RR_GET_INTERVAL
 #endif
 #endif
-#define __ARCH_WANT_SYS_EXECVE
 
 
 /*
 /*
  * "Conditional" syscalls
  * "Conditional" syscalls

+ 0 - 6
arch/sparc/include/uapi/asm/signal.h

@@ -147,12 +147,6 @@ struct sigstack {
 #define SIG_UNBLOCK        0x02	/* for unblocking signals */
 #define SIG_UNBLOCK        0x02	/* for unblocking signals */
 #define SIG_SETMASK        0x04	/* for setting the signal mask */
 #define SIG_SETMASK        0x04	/* for setting the signal mask */
 
 
-/*
- * sigaltstack controls
- */
-#define SS_ONSTACK	1
-#define SS_DISABLE	2
-
 #define MINSIGSTKSZ	4096
 #define MINSIGSTKSZ	4096
 #define SIGSTKSZ	16384
 #define SIGSTKSZ	16384
 
 

+ 0 - 2
arch/tile/Kconfig

@@ -21,8 +21,6 @@ config TILE
 	select ARCH_HAVE_NMI_SAFE_CMPXCHG
 	select ARCH_HAVE_NMI_SAFE_CMPXCHG
 	select GENERIC_CLOCKEVENTS
 	select GENERIC_CLOCKEVENTS
 	select MODULES_USE_ELF_RELA
 	select MODULES_USE_ELF_RELA
-	select GENERIC_KERNEL_THREAD
-	select GENERIC_KERNEL_EXECVE
 
 
 # FIXME: investigate whether we need/want these options.
 # FIXME: investigate whether we need/want these options.
 #	select HAVE_IOREMAP_PROT
 #	select HAVE_IOREMAP_PROT

+ 1 - 0
arch/tile/include/asm/ptrace.h

@@ -35,6 +35,7 @@ typedef unsigned long pt_reg_t;
 
 
 #define instruction_pointer(regs) ((regs)->pc)
 #define instruction_pointer(regs) ((regs)->pc)
 #define profile_pc(regs) instruction_pointer(regs)
 #define profile_pc(regs) instruction_pointer(regs)
+#define user_stack_pointer(regs) ((regs)->sp)
 
 
 /* Does the process account for user or for system time? */
 /* Does the process account for user or for system time? */
 #define user_mode(regs) (EX1_PL((regs)->ex1) == USER_PL)
 #define user_mode(regs) (EX1_PL((regs)->ex1) == USER_PL)

+ 0 - 1
arch/tile/include/asm/unistd.h

@@ -17,6 +17,5 @@
 #define __ARCH_WANT_COMPAT_SYS_SCHED_RR_GET_INTERVAL
 #define __ARCH_WANT_COMPAT_SYS_SCHED_RR_GET_INTERVAL
 #endif
 #endif
 #define __ARCH_WANT_SYS_NEWFSTATAT
 #define __ARCH_WANT_SYS_NEWFSTATAT
-#define __ARCH_WANT_SYS_EXECVE
 #define __ARCH_WANT_SYS_CLONE
 #define __ARCH_WANT_SYS_CLONE
 #include <uapi/asm/unistd.h>
 #include <uapi/asm/unistd.h>

+ 0 - 5
arch/um/kernel/signal.c

@@ -132,8 +132,3 @@ long sys_sigsuspend(int history0, int history1, old_sigset_t mask)
 	siginitset(&blocked, mask);
 	siginitset(&blocked, mask);
 	return sigsuspend(&blocked);
 	return sigsuspend(&blocked);
 }
 }
-
-long sys_sigaltstack(const stack_t __user *uss, stack_t __user *uoss)
-{
-	return do_sigaltstack(uss, uoss, PT_REGS_SP(&current->thread.regs));
-}

+ 0 - 2
arch/unicore32/Kconfig

@@ -16,8 +16,6 @@ config UNICORE32
 	select ARCH_WANT_FRAME_POINTERS
 	select ARCH_WANT_FRAME_POINTERS
 	select GENERIC_IOMAP
 	select GENERIC_IOMAP
 	select MODULES_USE_ELF_REL
 	select MODULES_USE_ELF_REL
-	select GENERIC_KERNEL_THREAD
-	select GENERIC_KERNEL_EXECVE
 	help
 	help
 	  UniCore-32 is 32-bit Instruction Set Architecture,
 	  UniCore-32 is 32-bit Instruction Set Architecture,
 	  including a series of low-power-consumption RISC chip
 	  including a series of low-power-consumption RISC chip

+ 1 - 0
arch/unicore32/include/asm/ptrace.h

@@ -54,6 +54,7 @@ static inline int valid_user_regs(struct pt_regs *regs)
 }
 }
 
 
 #define instruction_pointer(regs)	((regs)->UCreg_pc)
 #define instruction_pointer(regs)	((regs)->UCreg_pc)
+#define user_stack_pointer(regs)	((regs)->UCreg_sp)
 
 
 #endif /* __ASSEMBLY__ */
 #endif /* __ASSEMBLY__ */
 #endif
 #endif

+ 0 - 1
arch/unicore32/include/uapi/asm/unistd.h

@@ -12,5 +12,4 @@
 
 
 /* Use the standard ABI for syscalls. */
 /* Use the standard ABI for syscalls. */
 #include <asm-generic/unistd.h>
 #include <asm-generic/unistd.h>
-#define __ARCH_WANT_SYS_EXECVE
 #define __ARCH_WANT_SYS_CLONE
 #define __ARCH_WANT_SYS_CLONE

+ 1 - 2
arch/x86/Kconfig

@@ -110,11 +110,10 @@ config X86
 	select GENERIC_STRNLEN_USER
 	select GENERIC_STRNLEN_USER
 	select HAVE_CONTEXT_TRACKING if X86_64
 	select HAVE_CONTEXT_TRACKING if X86_64
 	select HAVE_IRQ_TIME_ACCOUNTING
 	select HAVE_IRQ_TIME_ACCOUNTING
-	select GENERIC_KERNEL_THREAD
-	select GENERIC_KERNEL_EXECVE
 	select MODULES_USE_ELF_REL if X86_32
 	select MODULES_USE_ELF_REL if X86_32
 	select MODULES_USE_ELF_RELA if X86_64
 	select MODULES_USE_ELF_RELA if X86_64
 	select CLONE_BACKWARDS if X86_32
 	select CLONE_BACKWARDS if X86_32
+	select GENERIC_SIGALTSTACK
 
 
 config INSTRUCTION_DECODER
 config INSTRUCTION_DECODER
 	def_bool y
 	def_bool y

+ 2 - 53
arch/x86/ia32/ia32_signal.c

@@ -136,52 +136,6 @@ asmlinkage long sys32_sigsuspend(int history0, int history1, old_sigset_t mask)
 	return sigsuspend(&blocked);
 	return sigsuspend(&blocked);
 }
 }
 
 
-asmlinkage long sys32_sigaltstack(const stack_ia32_t __user *uss_ptr,
-				  stack_ia32_t __user *uoss_ptr,
-				  struct pt_regs *regs)
-{
-	stack_t uss, uoss;
-	int ret, err = 0;
-	mm_segment_t seg;
-
-	if (uss_ptr) {
-		u32 ptr;
-
-		memset(&uss, 0, sizeof(stack_t));
-		if (!access_ok(VERIFY_READ, uss_ptr, sizeof(stack_ia32_t)))
-			return -EFAULT;
-
-		get_user_try {
-			get_user_ex(ptr, &uss_ptr->ss_sp);
-			get_user_ex(uss.ss_flags, &uss_ptr->ss_flags);
-			get_user_ex(uss.ss_size, &uss_ptr->ss_size);
-		} get_user_catch(err);
-
-		if (err)
-			return -EFAULT;
-		uss.ss_sp = compat_ptr(ptr);
-	}
-	seg = get_fs();
-	set_fs(KERNEL_DS);
-	ret = do_sigaltstack((stack_t __force __user *) (uss_ptr ? &uss : NULL),
-			     (stack_t __force __user *) &uoss, regs->sp);
-	set_fs(seg);
-	if (ret >= 0 && uoss_ptr)  {
-		if (!access_ok(VERIFY_WRITE, uoss_ptr, sizeof(stack_ia32_t)))
-			return -EFAULT;
-
-		put_user_try {
-			put_user_ex(ptr_to_compat(uoss.ss_sp), &uoss_ptr->ss_sp);
-			put_user_ex(uoss.ss_flags, &uoss_ptr->ss_flags);
-			put_user_ex(uoss.ss_size, &uoss_ptr->ss_size);
-		} put_user_catch(err);
-
-		if (err)
-			ret = -EFAULT;
-	}
-	return ret;
-}
-
 /*
 /*
  * Do a signal return; undo the signal stack.
  * Do a signal return; undo the signal stack.
  */
  */
@@ -292,7 +246,6 @@ asmlinkage long sys32_rt_sigreturn(struct pt_regs *regs)
 	struct rt_sigframe_ia32 __user *frame;
 	struct rt_sigframe_ia32 __user *frame;
 	sigset_t set;
 	sigset_t set;
 	unsigned int ax;
 	unsigned int ax;
-	struct pt_regs tregs;
 
 
 	frame = (struct rt_sigframe_ia32 __user *)(regs->sp - 4);
 	frame = (struct rt_sigframe_ia32 __user *)(regs->sp - 4);
 
 
@@ -306,8 +259,7 @@ asmlinkage long sys32_rt_sigreturn(struct pt_regs *regs)
 	if (ia32_restore_sigcontext(regs, &frame->uc.uc_mcontext, &ax))
 	if (ia32_restore_sigcontext(regs, &frame->uc.uc_mcontext, &ax))
 		goto badframe;
 		goto badframe;
 
 
-	tregs = *regs;
-	if (sys32_sigaltstack(&frame->uc.uc_stack, NULL, &tregs) == -EFAULT)
+	if (compat_restore_altstack(&frame->uc.uc_stack))
 		goto badframe;
 		goto badframe;
 
 
 	return ax;
 	return ax;
@@ -515,10 +467,7 @@ int ia32_setup_rt_frame(int sig, struct k_sigaction *ka, siginfo_t *info,
 		else
 		else
 			put_user_ex(0, &frame->uc.uc_flags);
 			put_user_ex(0, &frame->uc.uc_flags);
 		put_user_ex(0, &frame->uc.uc_link);
 		put_user_ex(0, &frame->uc.uc_link);
-		put_user_ex(current->sas_ss_sp, &frame->uc.uc_stack.ss_sp);
-		put_user_ex(sas_ss_flags(regs->sp),
-			    &frame->uc.uc_stack.ss_flags);
-		put_user_ex(current->sas_ss_size, &frame->uc.uc_stack.ss_size);
+		err |= __compat_save_altstack(&frame->uc.uc_stack, regs->sp);
 
 
 		if (ka->sa.sa_flags & SA_RESTORER)
 		if (ka->sa.sa_flags & SA_RESTORER)
 			restorer = ka->sa.sa_restorer;
 			restorer = ka->sa.sa_restorer;

+ 0 - 1
arch/x86/ia32/ia32entry.S

@@ -464,7 +464,6 @@ GLOBAL(\label)
 
 
 	PTREGSCALL stub32_rt_sigreturn, sys32_rt_sigreturn, %rdi
 	PTREGSCALL stub32_rt_sigreturn, sys32_rt_sigreturn, %rdi
 	PTREGSCALL stub32_sigreturn, sys32_sigreturn, %rdi
 	PTREGSCALL stub32_sigreturn, sys32_sigreturn, %rdi
-	PTREGSCALL stub32_sigaltstack, sys32_sigaltstack, %rdx
 	PTREGSCALL stub32_execve, compat_sys_execve, %rcx
 	PTREGSCALL stub32_execve, compat_sys_execve, %rcx
 	PTREGSCALL stub32_fork, sys_fork, %rdi
 	PTREGSCALL stub32_fork, sys_fork, %rdi
 	PTREGSCALL stub32_vfork, sys_vfork, %rdi
 	PTREGSCALL stub32_vfork, sys_vfork, %rdi

+ 2 - 8
arch/x86/include/asm/ia32.h

@@ -29,16 +29,10 @@ struct old_sigaction32 {
 	unsigned int sa_restorer;	/* Another 32 bit pointer */
 	unsigned int sa_restorer;	/* Another 32 bit pointer */
 };
 };
 
 
-typedef struct sigaltstack_ia32 {
-	unsigned int	ss_sp;
-	int		ss_flags;
-	unsigned int	ss_size;
-} stack_ia32_t;
-
 struct ucontext_ia32 {
 struct ucontext_ia32 {
 	unsigned int	  uc_flags;
 	unsigned int	  uc_flags;
 	unsigned int 	  uc_link;
 	unsigned int 	  uc_link;
-	stack_ia32_t	  uc_stack;
+	compat_stack_t	  uc_stack;
 	struct sigcontext_ia32 uc_mcontext;
 	struct sigcontext_ia32 uc_mcontext;
 	compat_sigset_t	  uc_sigmask;	/* mask last for extensibility */
 	compat_sigset_t	  uc_sigmask;	/* mask last for extensibility */
 };
 };
@@ -46,7 +40,7 @@ struct ucontext_ia32 {
 struct ucontext_x32 {
 struct ucontext_x32 {
 	unsigned int	  uc_flags;
 	unsigned int	  uc_flags;
 	unsigned int 	  uc_link;
 	unsigned int 	  uc_link;
-	stack_ia32_t	  uc_stack;
+	compat_stack_t	  uc_stack;
 	unsigned int	  uc__pad0;     /* needed for alignment */
 	unsigned int	  uc__pad0;     /* needed for alignment */
 	struct sigcontext uc_mcontext;  /* the 64-bit sigcontext type */
 	struct sigcontext uc_mcontext;  /* the 64-bit sigcontext type */
 	compat_sigset_t	  uc_sigmask;	/* mask last for extensibility */
 	compat_sigset_t	  uc_sigmask;	/* mask last for extensibility */

+ 7 - 0
arch/x86/include/asm/ptrace.h

@@ -133,6 +133,13 @@ static inline bool user_64bit_mode(struct pt_regs *regs)
 	return regs->cs == __USER_CS || regs->cs == pv_info.extra_user_64bit_cs;
 	return regs->cs == __USER_CS || regs->cs == pv_info.extra_user_64bit_cs;
 #endif
 #endif
 }
 }
+
+#define current_user_stack_pointer()	this_cpu_read(old_rsp)
+/* ia32 vs. x32 difference */
+#define compat_user_stack_pointer()	\
+	(test_thread_flag(TIF_IA32) 	\
+	 ? current_pt_regs()->sp 	\
+	 : this_cpu_read(old_rsp))
 #endif
 #endif
 
 
 #ifdef CONFIG_X86_32
 #ifdef CONFIG_X86_32

+ 0 - 2
arch/x86/include/asm/sys_ia32.h

@@ -69,8 +69,6 @@ asmlinkage long sys32_fallocate(int, int, unsigned,
 
 
 /* ia32/ia32_signal.c */
 /* ia32/ia32_signal.c */
 asmlinkage long sys32_sigsuspend(int, int, old_sigset_t);
 asmlinkage long sys32_sigsuspend(int, int, old_sigset_t);
-asmlinkage long sys32_sigaltstack(const stack_ia32_t __user *,
-				  stack_ia32_t __user *, struct pt_regs *);
 asmlinkage long sys32_sigreturn(struct pt_regs *);
 asmlinkage long sys32_sigreturn(struct pt_regs *);
 asmlinkage long sys32_rt_sigreturn(struct pt_regs *);
 asmlinkage long sys32_rt_sigreturn(struct pt_regs *);
 
 

+ 0 - 3
arch/x86/include/asm/syscalls.h

@@ -25,9 +25,6 @@ asmlinkage int sys_modify_ldt(int, void __user *, unsigned long);
 
 
 /* kernel/signal.c */
 /* kernel/signal.c */
 long sys_rt_sigreturn(struct pt_regs *);
 long sys_rt_sigreturn(struct pt_regs *);
-long sys_sigaltstack(const stack_t __user *, stack_t __user *,
-		     struct pt_regs *);
-
 
 
 /* kernel/tls.c */
 /* kernel/tls.c */
 asmlinkage int sys_set_thread_area(struct user_desc __user *);
 asmlinkage int sys_set_thread_area(struct user_desc __user *);

+ 0 - 1
arch/x86/include/asm/unistd.h

@@ -48,7 +48,6 @@
 # define __ARCH_WANT_SYS_TIME
 # define __ARCH_WANT_SYS_TIME
 # define __ARCH_WANT_SYS_UTIME
 # define __ARCH_WANT_SYS_UTIME
 # define __ARCH_WANT_SYS_WAITPID
 # define __ARCH_WANT_SYS_WAITPID
-# define __ARCH_WANT_SYS_EXECVE
 # define __ARCH_WANT_SYS_FORK
 # define __ARCH_WANT_SYS_FORK
 # define __ARCH_WANT_SYS_VFORK
 # define __ARCH_WANT_SYS_VFORK
 # define __ARCH_WANT_SYS_CLONE
 # define __ARCH_WANT_SYS_CLONE

+ 0 - 6
arch/x86/include/uapi/asm/signal.h

@@ -87,12 +87,6 @@ typedef unsigned long sigset_t;
 
 
 #define SA_RESTORER	0x04000000
 #define SA_RESTORER	0x04000000
 
 
-/*
- * sigaltstack controls
- */
-#define SS_ONSTACK	1
-#define SS_DISABLE	2
-
 #define MINSIGSTKSZ	2048
 #define MINSIGSTKSZ	2048
 #define SIGSTKSZ	8192
 #define SIGSTKSZ	8192
 
 

+ 0 - 1
arch/x86/kernel/entry_32.S

@@ -739,7 +739,6 @@ ENTRY(ptregs_##name) ; \
 ENDPROC(ptregs_##name)
 ENDPROC(ptregs_##name)
 
 
 PTREGSCALL1(iopl)
 PTREGSCALL1(iopl)
-PTREGSCALL2(sigaltstack)
 PTREGSCALL0(sigreturn)
 PTREGSCALL0(sigreturn)
 PTREGSCALL0(rt_sigreturn)
 PTREGSCALL0(rt_sigreturn)
 PTREGSCALL2(vm86)
 PTREGSCALL2(vm86)

+ 0 - 3
arch/x86/kernel/entry_64.S

@@ -864,7 +864,6 @@ END(stub_\func)
 	FORK_LIKE  clone
 	FORK_LIKE  clone
 	FORK_LIKE  fork
 	FORK_LIKE  fork
 	FORK_LIKE  vfork
 	FORK_LIKE  vfork
-	PTREGSCALL stub_sigaltstack, sys_sigaltstack, %rdx
 	PTREGSCALL stub_iopl, sys_iopl, %rsi
 	PTREGSCALL stub_iopl, sys_iopl, %rsi
 
 
 ENTRY(ptregscall_common)
 ENTRY(ptregscall_common)
@@ -913,8 +912,6 @@ ENTRY(stub_rt_sigreturn)
 END(stub_rt_sigreturn)
 END(stub_rt_sigreturn)
 
 
 #ifdef CONFIG_X86_X32_ABI
 #ifdef CONFIG_X86_X32_ABI
-	PTREGSCALL stub_x32_sigaltstack, sys32_sigaltstack, %rdx
-
 ENTRY(stub_x32_rt_sigreturn)
 ENTRY(stub_x32_rt_sigreturn)
 	CFI_STARTPROC
 	CFI_STARTPROC
 	addq $8, %rsp
 	addq $8, %rsp

+ 5 - 24
arch/x86/kernel/signal.c

@@ -364,10 +364,7 @@ static int __setup_rt_frame(int sig, struct k_sigaction *ka, siginfo_t *info,
 		else
 		else
 			put_user_ex(0, &frame->uc.uc_flags);
 			put_user_ex(0, &frame->uc.uc_flags);
 		put_user_ex(0, &frame->uc.uc_link);
 		put_user_ex(0, &frame->uc.uc_link);
-		put_user_ex(current->sas_ss_sp, &frame->uc.uc_stack.ss_sp);
-		put_user_ex(sas_ss_flags(regs->sp),
-			    &frame->uc.uc_stack.ss_flags);
-		put_user_ex(current->sas_ss_size, &frame->uc.uc_stack.ss_size);
+		err |= __save_altstack(&frame->uc.uc_stack, regs->sp);
 
 
 		/* Set up to return from userspace.  */
 		/* Set up to return from userspace.  */
 		restorer = VDSO32_SYMBOL(current->mm->context.vdso, rt_sigreturn);
 		restorer = VDSO32_SYMBOL(current->mm->context.vdso, rt_sigreturn);
@@ -414,7 +411,6 @@ static int __setup_rt_frame(int sig, struct k_sigaction *ka, siginfo_t *info,
 	struct rt_sigframe __user *frame;
 	struct rt_sigframe __user *frame;
 	void __user *fp = NULL;
 	void __user *fp = NULL;
 	int err = 0;
 	int err = 0;
-	struct task_struct *me = current;
 
 
 	frame = get_sigframe(ka, regs, sizeof(struct rt_sigframe), &fp);
 	frame = get_sigframe(ka, regs, sizeof(struct rt_sigframe), &fp);
 
 
@@ -433,10 +429,7 @@ static int __setup_rt_frame(int sig, struct k_sigaction *ka, siginfo_t *info,
 		else
 		else
 			put_user_ex(0, &frame->uc.uc_flags);
 			put_user_ex(0, &frame->uc.uc_flags);
 		put_user_ex(0, &frame->uc.uc_link);
 		put_user_ex(0, &frame->uc.uc_link);
-		put_user_ex(me->sas_ss_sp, &frame->uc.uc_stack.ss_sp);
-		put_user_ex(sas_ss_flags(regs->sp),
-			    &frame->uc.uc_stack.ss_flags);
-		put_user_ex(me->sas_ss_size, &frame->uc.uc_stack.ss_size);
+		err |= __save_altstack(&frame->uc.uc_stack, regs->sp);
 
 
 		/* Set up to return from userspace.  If provided, use a stub
 		/* Set up to return from userspace.  If provided, use a stub
 		   already in userspace.  */
 		   already in userspace.  */
@@ -503,10 +496,7 @@ static int x32_setup_rt_frame(int sig, struct k_sigaction *ka,
 		else
 		else
 			put_user_ex(0, &frame->uc.uc_flags);
 			put_user_ex(0, &frame->uc.uc_flags);
 		put_user_ex(0, &frame->uc.uc_link);
 		put_user_ex(0, &frame->uc.uc_link);
-		put_user_ex(current->sas_ss_sp, &frame->uc.uc_stack.ss_sp);
-		put_user_ex(sas_ss_flags(regs->sp),
-			    &frame->uc.uc_stack.ss_flags);
-		put_user_ex(current->sas_ss_size, &frame->uc.uc_stack.ss_size);
+		err |= __compat_save_altstack(&frame->uc.uc_stack, regs->sp);
 		put_user_ex(0, &frame->uc.uc__pad0);
 		put_user_ex(0, &frame->uc.uc__pad0);
 
 
 		if (ka->sa.sa_flags & SA_RESTORER) {
 		if (ka->sa.sa_flags & SA_RESTORER) {
@@ -603,13 +593,6 @@ sys_sigaction(int sig, const struct old_sigaction __user *act,
 }
 }
 #endif /* CONFIG_X86_32 */
 #endif /* CONFIG_X86_32 */
 
 
-long
-sys_sigaltstack(const stack_t __user *uss, stack_t __user *uoss,
-		struct pt_regs *regs)
-{
-	return do_sigaltstack(uss, uoss, regs->sp);
-}
-
 /*
 /*
  * Do a signal return; undo the signal stack.
  * Do a signal return; undo the signal stack.
  */
  */
@@ -659,7 +642,7 @@ long sys_rt_sigreturn(struct pt_regs *regs)
 	if (restore_sigcontext(regs, &frame->uc.uc_mcontext, &ax))
 	if (restore_sigcontext(regs, &frame->uc.uc_mcontext, &ax))
 		goto badframe;
 		goto badframe;
 
 
-	if (do_sigaltstack(&frame->uc.uc_stack, NULL, regs->sp) == -EFAULT)
+	if (restore_altstack(&frame->uc.uc_stack))
 		goto badframe;
 		goto badframe;
 
 
 	return ax;
 	return ax;
@@ -865,7 +848,6 @@ asmlinkage long sys32_x32_rt_sigreturn(struct pt_regs *regs)
 	struct rt_sigframe_x32 __user *frame;
 	struct rt_sigframe_x32 __user *frame;
 	sigset_t set;
 	sigset_t set;
 	unsigned long ax;
 	unsigned long ax;
-	struct pt_regs tregs;
 
 
 	frame = (struct rt_sigframe_x32 __user *)(regs->sp - 8);
 	frame = (struct rt_sigframe_x32 __user *)(regs->sp - 8);
 
 
@@ -879,8 +861,7 @@ asmlinkage long sys32_x32_rt_sigreturn(struct pt_regs *regs)
 	if (restore_sigcontext(regs, &frame->uc.uc_mcontext, &ax))
 	if (restore_sigcontext(regs, &frame->uc.uc_mcontext, &ax))
 		goto badframe;
 		goto badframe;
 
 
-	tregs = *regs;
-	if (sys32_sigaltstack(&frame->uc.uc_stack, NULL, &tregs) == -EFAULT)
+	if (compat_restore_altstack(&frame->uc.uc_stack))
 		goto badframe;
 		goto badframe;
 
 
 	return ax;
 	return ax;

+ 1 - 1
arch/x86/syscalls/syscall_32.tbl

@@ -192,7 +192,7 @@
 183	i386	getcwd			sys_getcwd
 183	i386	getcwd			sys_getcwd
 184	i386	capget			sys_capget
 184	i386	capget			sys_capget
 185	i386	capset			sys_capset
 185	i386	capset			sys_capset
-186	i386	sigaltstack		ptregs_sigaltstack		stub32_sigaltstack
+186	i386	sigaltstack		sys_sigaltstack			compat_sys_sigaltstack
 187	i386	sendfile		sys_sendfile			sys32_sendfile
 187	i386	sendfile		sys_sendfile			sys32_sendfile
 188	i386	getpmsg
 188	i386	getpmsg
 189	i386	putpmsg
 189	i386	putpmsg

+ 2 - 2
arch/x86/syscalls/syscall_64.tbl

@@ -137,7 +137,7 @@
 128	64	rt_sigtimedwait		sys_rt_sigtimedwait
 128	64	rt_sigtimedwait		sys_rt_sigtimedwait
 129	64	rt_sigqueueinfo		sys_rt_sigqueueinfo
 129	64	rt_sigqueueinfo		sys_rt_sigqueueinfo
 130	common	rt_sigsuspend		sys_rt_sigsuspend
 130	common	rt_sigsuspend		sys_rt_sigsuspend
-131	64	sigaltstack		stub_sigaltstack
+131	64	sigaltstack		sys_sigaltstack
 132	common	utime			sys_utime
 132	common	utime			sys_utime
 133	common	mknod			sys_mknod
 133	common	mknod			sys_mknod
 134	64	uselib
 134	64	uselib
@@ -338,7 +338,7 @@
 522	x32	rt_sigpending		sys32_rt_sigpending
 522	x32	rt_sigpending		sys32_rt_sigpending
 523	x32	rt_sigtimedwait		compat_sys_rt_sigtimedwait
 523	x32	rt_sigtimedwait		compat_sys_rt_sigtimedwait
 524	x32	rt_sigqueueinfo		sys32_rt_sigqueueinfo
 524	x32	rt_sigqueueinfo		sys32_rt_sigqueueinfo
-525	x32	sigaltstack		stub_x32_sigaltstack
+525	x32	sigaltstack		compat_sys_sigaltstack
 526	x32	timer_create		compat_sys_timer_create
 526	x32	timer_create		compat_sys_timer_create
 527	x32	mq_notify		compat_sys_mq_notify
 527	x32	mq_notify		compat_sys_mq_notify
 528	x32	kexec_load		compat_sys_kexec_load
 528	x32	kexec_load		compat_sys_kexec_load

+ 1 - 2
arch/x86/um/Kconfig

@@ -13,8 +13,7 @@ endmenu
 config UML_X86
 config UML_X86
 	def_bool y
 	def_bool y
 	select GENERIC_FIND_FIRST_BIT
 	select GENERIC_FIND_FIRST_BIT
-	select GENERIC_KERNEL_THREAD
-	select GENERIC_KERNEL_EXECVE
+	select GENERIC_SIGALTSTACK
 
 
 config 64BIT
 config 64BIT
 	bool "64-bit kernel" if SUBARCH = "x86"
 	bool "64-bit kernel" if SUBARCH = "x86"

+ 1 - 0
arch/x86/um/asm/ptrace.h

@@ -86,4 +86,5 @@ extern long arch_prctl(struct task_struct *task, int code,
 		       unsigned long __user *addr);
 		       unsigned long __user *addr);
 
 
 #endif
 #endif
+#define user_stack_pointer(regs) PT_REGS_SP(regs)
 #endif /* __UM_X86_PTRACE_H */
 #endif /* __UM_X86_PTRACE_H */

+ 2 - 7
arch/x86/um/signal.c

@@ -342,9 +342,7 @@ static int copy_ucontext_to_user(struct ucontext __user *uc,
 {
 {
 	int err = 0;
 	int err = 0;
 
 
-	err |= put_user(current->sas_ss_sp, &uc->uc_stack.ss_sp);
-	err |= put_user(sas_ss_flags(sp), &uc->uc_stack.ss_flags);
-	err |= put_user(current->sas_ss_size, &uc->uc_stack.ss_size);
+	err |= __save_altstack(&uc->uc_stack, sp);
 	err |= copy_sc_to_user(&uc->uc_mcontext, fp, &current->thread.regs, 0);
 	err |= copy_sc_to_user(&uc->uc_mcontext, fp, &current->thread.regs, 0);
 	err |= copy_to_user(&uc->uc_sigmask, set, sizeof(*set));
 	err |= copy_to_user(&uc->uc_sigmask, set, sizeof(*set));
 	return err;
 	return err;
@@ -529,10 +527,7 @@ int setup_signal_stack_si(unsigned long stack_top, int sig,
 	/* Create the ucontext.  */
 	/* Create the ucontext.  */
 	err |= __put_user(0, &frame->uc.uc_flags);
 	err |= __put_user(0, &frame->uc.uc_flags);
 	err |= __put_user(0, &frame->uc.uc_link);
 	err |= __put_user(0, &frame->uc.uc_link);
-	err |= __put_user(me->sas_ss_sp, &frame->uc.uc_stack.ss_sp);
-	err |= __put_user(sas_ss_flags(PT_REGS_SP(regs)),
-			  &frame->uc.uc_stack.ss_flags);
-	err |= __put_user(me->sas_ss_size, &frame->uc.uc_stack.ss_size);
+	err |= __save_altstack(&frame->uc.uc_stack, PT_REGS_SP(regs));
 	err |= copy_sc_to_user(&frame->uc.uc_mcontext, &frame->fpstate, regs,
 	err |= copy_sc_to_user(&frame->uc.uc_mcontext, &frame->fpstate, regs,
 			       set->sig[0]);
 			       set->sig[0]);
 	err |= __put_user(&frame->fpstate, &frame->uc.uc_mcontext.fpstate);
 	err |= __put_user(&frame->fpstate, &frame->uc.uc_mcontext.fpstate);

+ 0 - 1
arch/x86/um/sys_call_table_32.c

@@ -27,7 +27,6 @@
 #define ptregs_iopl sys_iopl
 #define ptregs_iopl sys_iopl
 #define ptregs_vm86old sys_vm86old
 #define ptregs_vm86old sys_vm86old
 #define ptregs_vm86 sys_vm86
 #define ptregs_vm86 sys_vm86
-#define ptregs_sigaltstack sys_sigaltstack
 
 
 #define __SYSCALL_I386(nr, sym, compat) extern asmlinkage void sym(void) ;
 #define __SYSCALL_I386(nr, sym, compat) extern asmlinkage void sym(void) ;
 #include <asm/syscalls_32.h>
 #include <asm/syscalls_32.h>

Một số tệp đã không được hiển thị bởi vì quá nhiều tập tin thay đổi trong này khác