Skip to content

Commit

Permalink
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel…
Browse files Browse the repository at this point in the history
…/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
  • Loading branch information
torvalds committed Dec 21, 2012
2 parents f59dc2b + 50ececc commit 54d46ea
Show file tree
Hide file tree
Showing 118 changed files with 211 additions and 357 deletions.
9 changes: 3 additions & 6 deletions arch/Kconfig
Expand Up @@ -291,12 +291,6 @@ config ARCH_WANT_OLD_COMPAT_IPC
select ARCH_WANT_COMPAT_IPC_PARSE_VERSION
bool

config GENERIC_KERNEL_THREAD
bool

config GENERIC_KERNEL_EXECVE
bool

config HAVE_ARCH_SECCOMP_FILTER
bool
help
Expand Down Expand Up @@ -362,6 +356,9 @@ config MODULES_USE_ELF_REL
Modules only use ELF REL relocations. Modules with ELF RELA
relocations will give an error.

config GENERIC_SIGALTSTACK
bool

#
# ABI hall of shame
#
Expand Down
3 changes: 1 addition & 2 deletions arch/alpha/Kconfig
Expand Up @@ -20,10 +20,9 @@ config ALPHA
select GENERIC_CMOS_UPDATE
select GENERIC_STRNCPY_FROM_USER
select GENERIC_STRNLEN_USER
select GENERIC_KERNEL_THREAD
select GENERIC_KERNEL_EXECVE
select HAVE_MOD_ARCH_SPECIFIC
select MODULES_USE_ELF_RELA
select GENERIC_SIGALTSTACK
help
The Alpha is a 64-bit general-purpose processor designed and
marketed by the Digital Equipment Corporation of blessed memory,
Expand Down
1 change: 1 addition & 0 deletions arch/alpha/include/asm/ptrace.h
Expand Up @@ -8,6 +8,7 @@
#define user_mode(regs) (((regs)->ps & 8) != 0)
#define instruction_pointer(regs) ((regs)->pc)
#define profile_pc(regs) instruction_pointer(regs)
#define current_user_stack_pointer() rdusp()

#define task_pt_regs(task) \
((struct pt_regs *) (task_stack_page(task) + 2*PAGE_SIZE) - 1)
Expand Down
1 change: 0 additions & 1 deletion arch/alpha/include/asm/unistd.h
Expand Up @@ -15,7 +15,6 @@
#define __ARCH_WANT_SYS_OLDUMOUNT
#define __ARCH_WANT_SYS_SIGPENDING
#define __ARCH_WANT_SYS_RT_SIGSUSPEND
#define __ARCH_WANT_SYS_EXECVE
#define __ARCH_WANT_SYS_FORK
#define __ARCH_WANT_SYS_VFORK
#define __ARCH_WANT_SYS_CLONE
Expand Down
6 changes: 0 additions & 6 deletions arch/alpha/include/uapi/asm/signal.h
Expand Up @@ -84,12 +84,6 @@ typedef unsigned long sigset_t;
#define SA_ONESHOT SA_RESETHAND
#define SA_NOMASK SA_NODEFER

/*
* sigaltstack controls
*/
#define SS_ONSTACK 1
#define SS_DISABLE 2

#define MINSIGSTKSZ 4096
#define SIGSTKSZ 16384

Expand Down
10 changes: 1 addition & 9 deletions arch/alpha/kernel/signal.c
Expand Up @@ -122,12 +122,6 @@ SYSCALL_DEFINE1(sigsuspend, old_sigset_t, mask)
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.
*/
Expand Down Expand Up @@ -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_link);
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,
set->sig[0], oldsp);
err |= __copy_to_user(&frame->uc.uc_sigmask, set, sizeof(*set));
Expand Down
2 changes: 0 additions & 2 deletions arch/arm/Kconfig
Expand Up @@ -12,8 +12,6 @@ config ARM
select GENERIC_CLOCKEVENTS_BROADCAST if SMP
select GENERIC_IRQ_PROBE
select GENERIC_IRQ_SHOW
select GENERIC_KERNEL_THREAD
select GENERIC_KERNEL_EXECVE
select GENERIC_PCI_IOMAP
select GENERIC_SMP_IDLE_THREAD
select GENERIC_STRNCPY_FROM_USER
Expand Down
1 change: 0 additions & 1 deletion arch/arm/include/asm/unistd.h
Expand Up @@ -41,7 +41,6 @@
#define __ARCH_WANT_OLD_READDIR
#define __ARCH_WANT_SYS_SOCKETCALL
#endif
#define __ARCH_WANT_SYS_EXECVE
#define __ARCH_WANT_SYS_FORK
#define __ARCH_WANT_SYS_VFORK
#define __ARCH_WANT_SYS_CLONE
Expand Down
7 changes: 0 additions & 7 deletions arch/arm/include/uapi/asm/signal.h
Expand Up @@ -87,13 +87,6 @@ typedef unsigned long sigset_t;
#define SA_NOMASK SA_NODEFER
#define SA_ONESHOT SA_RESETHAND


/*
* sigaltstack controls
*/
#define SS_ONSTACK 1
#define SS_DISABLE 2

#define MINSIGSTKSZ 2048
#define SIGSTKSZ 8192

Expand Down
2 changes: 0 additions & 2 deletions arch/arm64/Kconfig
Expand Up @@ -8,8 +8,6 @@ config ARM64
select GENERIC_IOMAP
select GENERIC_IRQ_PROBE
select GENERIC_IRQ_SHOW
select GENERIC_KERNEL_EXECVE
select GENERIC_KERNEL_THREAD
select GENERIC_SMP_IDLE_THREAD
select GENERIC_TIME_VSYSCALL
select HARDIRQS_SW_RESEND
Expand Down
5 changes: 3 additions & 2 deletions arch/arm64/include/asm/compat.h
Expand Up @@ -209,10 +209,11 @@ static inline compat_uptr_t ptr_to_compat(void __user *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)
{
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 {
Expand Down
1 change: 0 additions & 1 deletion arch/arm64/include/asm/unistd.h
Expand Up @@ -28,6 +28,5 @@
#define __ARCH_WANT_SYS_FORK
#define __ARCH_WANT_SYS_VFORK
#endif
#define __ARCH_WANT_SYS_EXECVE
#define __ARCH_WANT_SYS_CLONE
#include <uapi/asm/unistd.h>
2 changes: 0 additions & 2 deletions arch/avr32/Kconfig
Expand Up @@ -17,8 +17,6 @@ config AVR32
select GENERIC_CLOCKEVENTS
select HAVE_MOD_ARCH_SPECIFIC
select MODULES_USE_ELF_RELA
select GENERIC_KERNEL_THREAD
select GENERIC_KERNEL_EXECVE
help
AVR32 is a high-performance 32-bit RISC microprocessor core,
designed for cost-sensitive embedded applications, with particular
Expand Down
1 change: 1 addition & 0 deletions arch/avr32/include/asm/ptrace.h
Expand Up @@ -21,6 +21,7 @@
#define user_mode(regs) (((regs)->sr & MODE_MASK) == MODE_USER)
#define instruction_pointer(regs) ((regs)->pc)
#define profile_pc(regs) instruction_pointer(regs)
#define user_stack_pointer(regs) ((regs)->sp)

static __inline__ int valid_user_regs(struct pt_regs *regs)
{
Expand Down
1 change: 0 additions & 1 deletion arch/avr32/include/asm/unistd.h
Expand Up @@ -39,7 +39,6 @@
#define __ARCH_WANT_SYS_GETPGRP
#define __ARCH_WANT_SYS_RT_SIGACTION
#define __ARCH_WANT_SYS_RT_SIGSUSPEND
#define __ARCH_WANT_SYS_EXECVE
#define __ARCH_WANT_SYS_FORK
#define __ARCH_WANT_SYS_VFORK
#define __ARCH_WANT_SYS_CLONE
Expand Down
6 changes: 0 additions & 6 deletions arch/avr32/include/uapi/asm/signal.h
Expand Up @@ -89,12 +89,6 @@ typedef unsigned long sigset_t;
#define SA_NOMASK SA_NODEFER
#define SA_ONESHOT SA_RESETHAND

/*
* sigaltstack controls
*/
#define SS_ONSTACK 1
#define SS_DISABLE 2

#define MINSIGSTKSZ 2048
#define SIGSTKSZ 8192

Expand Down
2 changes: 0 additions & 2 deletions arch/blackfin/Kconfig
Expand Up @@ -45,8 +45,6 @@ config BLACKFIN
select ARCH_USES_GETTIMEOFFSET if !GENERIC_CLOCKEVENTS
select HAVE_MOD_ARCH_SPECIFIC
select MODULES_USE_ELF_RELA
select GENERIC_KERNEL_THREAD
select GENERIC_KERNEL_EXECVE

config GENERIC_CSUM
def_bool y
Expand Down
1 change: 1 addition & 0 deletions arch/blackfin/include/asm/ptrace.h
Expand Up @@ -17,6 +17,7 @@
#define arch_has_single_step() (1)
/* common code demands this function */
#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,
unsigned long start, unsigned long len);
Expand Down
1 change: 0 additions & 1 deletion arch/blackfin/include/asm/unistd.h
Expand Up @@ -20,7 +20,6 @@
#define __ARCH_WANT_SYS_NICE
#define __ARCH_WANT_SYS_RT_SIGACTION
#define __ARCH_WANT_SYS_RT_SIGSUSPEND
#define __ARCH_WANT_SYS_EXECVE
#define __ARCH_WANT_SYS_VFORK

/*
Expand Down
2 changes: 0 additions & 2 deletions arch/c6x/Kconfig
Expand Up @@ -17,8 +17,6 @@ config C6X
select OF
select OF_EARLY_FLATTREE
select GENERIC_CLOCKEVENTS
select GENERIC_KERNEL_THREAD
select GENERIC_KERNEL_EXECVE
select MODULES_USE_ELF_RELA

config MMU
Expand Down
1 change: 0 additions & 1 deletion arch/c6x/include/uapi/asm/unistd.h
Expand Up @@ -14,7 +14,6 @@
* more details.
*/

#define __ARCH_WANT_SYS_EXECVE
#define __ARCH_WANT_SYS_CLONE

/* Use the standard ABI for syscalls. */
Expand Down
2 changes: 0 additions & 2 deletions arch/cris/Kconfig
Expand Up @@ -49,8 +49,6 @@ config CRIS
select GENERIC_SMP_IDLE_THREAD if ETRAX_ARCH_V32
select GENERIC_CMOS_UPDATE
select MODULES_USE_ELF_RELA
select GENERIC_KERNEL_THREAD
select GENERIC_KERNEL_EXECVE
select CLONE_BACKWARDS2

config HZ
Expand Down
1 change: 1 addition & 0 deletions arch/cris/include/asm/ptrace.h
Expand Up @@ -9,5 +9,6 @@
#define PTRACE_SETREGS 13

#define profile_pc(regs) instruction_pointer(regs)
#define current_user_stack_pointer() rdusp()

#endif /* _CRIS_PTRACE_H */
1 change: 0 additions & 1 deletion arch/cris/include/asm/unistd.h
Expand Up @@ -32,7 +32,6 @@
#define __ARCH_WANT_SYS_SIGPROCMASK
#define __ARCH_WANT_SYS_RT_SIGACTION
#define __ARCH_WANT_SYS_RT_SIGSUSPEND
#define __ARCH_WANT_SYS_EXECVE
#define __ARCH_WANT_SYS_FORK
#define __ARCH_WANT_SYS_VFORK
#define __ARCH_WANT_SYS_CLONE
Expand Down
6 changes: 0 additions & 6 deletions arch/cris/include/uapi/asm/signal.h
Expand Up @@ -83,12 +83,6 @@ typedef unsigned long sigset_t;

#define SA_RESTORER 0x04000000

/*
* sigaltstack controls
*/
#define SS_ONSTACK 1
#define SS_DISABLE 2

#define MINSIGSTKSZ 2048
#define SIGSTKSZ 8192

Expand Down
2 changes: 0 additions & 2 deletions arch/frv/Kconfig
Expand Up @@ -12,8 +12,6 @@ config FRV
select ARCH_HAVE_NMI_SAFE_CMPXCHG
select GENERIC_CPU_DEVICES
select ARCH_WANT_IPC_PARSE_VERSION
select GENERIC_KERNEL_THREAD
select GENERIC_KERNEL_EXECVE

config ZONE_DMA
bool
Expand Down
1 change: 0 additions & 1 deletion arch/frv/include/asm/unistd.h
Expand Up @@ -29,7 +29,6 @@
#define __ARCH_WANT_SYS_SIGPROCMASK
#define __ARCH_WANT_SYS_RT_SIGACTION
#define __ARCH_WANT_SYS_RT_SIGSUSPEND
#define __ARCH_WANT_SYS_EXECVE
#define __ARCH_WANT_SYS_FORK
#define __ARCH_WANT_SYS_VFORK
#define __ARCH_WANT_SYS_CLONE
Expand Down
2 changes: 0 additions & 2 deletions arch/h8300/Kconfig
Expand Up @@ -9,8 +9,6 @@ config H8300
select GENERIC_IRQ_SHOW
select GENERIC_CPU_DEVICES
select MODULES_USE_ELF_RELA
select GENERIC_KERNEL_THREAD
select GENERIC_KERNEL_EXECVE

config SYMBOL_PREFIX
string
Expand Down
1 change: 1 addition & 0 deletions arch/h8300/include/asm/ptrace.h
Expand Up @@ -28,5 +28,6 @@
#define current_pt_regs() ((struct pt_regs *) \
(THREAD_SIZE + (unsigned long)current_thread_info()) - 1)
#define signal_pt_regs() ((struct pt_regs *)current->thread.esp0)
#define current_user_stack_pointer() rdusp()
#endif /* __ASSEMBLY__ */
#endif /* _H8300_PTRACE_H */
1 change: 0 additions & 1 deletion arch/h8300/include/asm/unistd.h
Expand Up @@ -31,7 +31,6 @@
#define __ARCH_WANT_SYS_SIGPROCMASK
#define __ARCH_WANT_SYS_RT_SIGACTION
#define __ARCH_WANT_SYS_RT_SIGSUSPEND
#define __ARCH_WANT_SYS_EXECVE
#define __ARCH_WANT_SYS_FORK
#define __ARCH_WANT_SYS_VFORK
#define __ARCH_WANT_SYS_CLONE
Expand Down
6 changes: 0 additions & 6 deletions arch/h8300/include/uapi/asm/signal.h
Expand Up @@ -82,12 +82,6 @@ typedef unsigned long sigset_t;

#define SA_RESTORER 0x04000000

/*
* sigaltstack controls
*/
#define SS_ONSTACK 1
#define SS_DISABLE 2

#define MINSIGSTKSZ 2048
#define SIGSTKSZ 8192

Expand Down
2 changes: 0 additions & 2 deletions arch/hexagon/Kconfig
Expand Up @@ -31,8 +31,6 @@ config HEXAGON
select GENERIC_CLOCKEVENTS
select GENERIC_CLOCKEVENTS_BROADCAST
select MODULES_USE_ELF_RELA
select GENERIC_KERNEL_THREAD
select GENERIC_KERNEL_EXECVE
---help---
Qualcomm Hexagon is a processor architecture designed for high
performance and low power across a wide variety of applications.
Expand Down
1 change: 0 additions & 1 deletion arch/hexagon/include/uapi/asm/unistd.h
Expand Up @@ -27,7 +27,6 @@
*/

#define sys_mmap2 sys_mmap_pgoff
#define __ARCH_WANT_SYS_EXECVE
#define __ARCH_WANT_SYS_CLONE

#include <asm-generic/unistd.h>
2 changes: 0 additions & 2 deletions arch/ia64/Kconfig
Expand Up @@ -42,8 +42,6 @@ config IA64
select GENERIC_TIME_VSYSCALL_OLD
select HAVE_MOD_ARCH_SPECIFIC
select MODULES_USE_ELF_RELA
select GENERIC_KERNEL_THREAD
select GENERIC_KERNEL_EXECVE
default y
help
The Itanium Processor Family is Intel's 64-bit successor to
Expand Down
5 changes: 5 additions & 0 deletions arch/ia64/include/asm/ptrace.h
Expand Up @@ -78,6 +78,11 @@ static inline long regs_return_value(struct pt_regs *regs)
unsigned long __ip = instruction_pointer(regs); \
(__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 */
# define task_pt_regs(t) (((struct pt_regs *) ((char *) (t) + IA64_STK_OFFSET)) - 1)
Expand Down
1 change: 0 additions & 1 deletion arch/ia64/include/asm/unistd.h
Expand Up @@ -29,7 +29,6 @@

#define __ARCH_WANT_SYS_RT_SIGACTION
#define __ARCH_WANT_SYS_RT_SIGSUSPEND
#define __ARCH_WANT_SYS_EXECVE

#if !defined(__ASSEMBLY__) && !defined(ASSEMBLER)

Expand Down
6 changes: 0 additions & 6 deletions arch/ia64/include/uapi/asm/signal.h
Expand Up @@ -78,12 +78,6 @@

#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
* be sure that an app compiled for today's CPUs will continue to run
Expand Down
2 changes: 0 additions & 2 deletions arch/m32r/Kconfig
Expand Up @@ -15,8 +15,6 @@ config M32R
select GENERIC_ATOMIC64
select ARCH_USES_GETTIMEOFFSET
select MODULES_USE_ELF_RELA
select GENERIC_KERNEL_THREAD
select GENERIC_KERNEL_EXECVE

config SBUS
bool
Expand Down
1 change: 1 addition & 0 deletions arch/m32r/include/asm/ptrace.h
Expand Up @@ -32,6 +32,7 @@ extern void init_debug_traps(struct task_struct *);

#define instruction_pointer(regs) ((regs)->bpc)
#define profile_pc(regs) instruction_pointer(regs)
#define user_stack_pointer(regs) ((regs)->spu)

extern void withdraw_debug_trap(struct pt_regs *regs);

Expand Down

0 comments on commit 54d46ea

Please sign in to comment.