s390: switch to generic old sigaction()
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
This commit is contained in:
parent
f036b94344
commit
7eddd99c28
@ -146,6 +146,7 @@ config S390
|
||||
select GENERIC_COMPAT_RT_SIGPROCMASK
|
||||
select GENERIC_COMPAT_RT_SIGPENDING
|
||||
select OLD_SIGSUSPEND3
|
||||
select OLD_SIGACTION
|
||||
|
||||
config SCHED_OMIT_FRAME_POINTER
|
||||
def_bool y
|
||||
@ -255,6 +256,7 @@ config COMPAT
|
||||
depends on 64BIT
|
||||
select COMPAT_BINFMT_ELF if BINFMT_ELF
|
||||
select ARCH_WANT_OLD_COMPAT_IPC
|
||||
select COMPAT_OLD_SIGACTION
|
||||
help
|
||||
Select this option if you want to enable your system kernel to
|
||||
handle system-calls from ELF binaries for 31 bit ESA. This option
|
||||
|
@ -21,12 +21,5 @@ typedef struct {
|
||||
unsigned long sig[_NSIG_WORDS];
|
||||
} sigset_t;
|
||||
|
||||
struct old_sigaction {
|
||||
__sighandler_t sa_handler;
|
||||
old_sigset_t sa_mask;
|
||||
unsigned long sa_flags;
|
||||
void (*sa_restorer)(void);
|
||||
};
|
||||
|
||||
#define __ARCH_HAS_SA_RESTORER
|
||||
#endif
|
||||
|
@ -17,13 +17,6 @@ struct ipc_kludge_32 {
|
||||
__s32 msgtyp;
|
||||
};
|
||||
|
||||
struct old_sigaction32 {
|
||||
__u32 sa_handler; /* Really a pointer, but need to deal with 32 bits */
|
||||
compat_old_sigset_t sa_mask; /* A 32 bit mask */
|
||||
__u32 sa_flags;
|
||||
__u32 sa_restorer; /* Another 32 bit pointer */
|
||||
};
|
||||
|
||||
/* asm/sigcontext.h */
|
||||
typedef union
|
||||
{
|
||||
@ -81,8 +74,6 @@ struct ucontext32 {
|
||||
struct stat64_emu31;
|
||||
struct mmap_arg_struct_emu31;
|
||||
struct fadvise64_64_args;
|
||||
struct old_sigaction32;
|
||||
struct old_sigaction32;
|
||||
|
||||
long sys32_chown16(const char __user * filename, u16 user, u16 group);
|
||||
long sys32_lchown16(const char __user * filename, u16 user, u16 group);
|
||||
@ -131,6 +122,4 @@ long sys32_read(unsigned int fd, char __user * buf, size_t count);
|
||||
long sys32_write(unsigned int fd, const char __user * buf, size_t count);
|
||||
long sys32_fadvise64(int fd, loff_t offset, size_t len, int advise);
|
||||
long sys32_fadvise64_64(struct fadvise64_64_args __user *args);
|
||||
long sys32_sigaction(int sig, const struct old_sigaction32 __user *act,
|
||||
struct old_sigaction32 __user *oact);
|
||||
#endif /* _ASM_S390X_S390_H */
|
||||
|
@ -157,43 +157,6 @@ int copy_siginfo_from_user32(siginfo_t *to, compat_siginfo_t __user *from)
|
||||
return err;
|
||||
}
|
||||
|
||||
asmlinkage long
|
||||
sys32_sigaction(int sig, const struct old_sigaction32 __user *act,
|
||||
struct old_sigaction32 __user *oact)
|
||||
{
|
||||
struct k_sigaction new_ka, old_ka;
|
||||
unsigned long sa_handler, sa_restorer;
|
||||
int ret;
|
||||
|
||||
if (act) {
|
||||
compat_old_sigset_t mask;
|
||||
if (!access_ok(VERIFY_READ, act, sizeof(*act)) ||
|
||||
__get_user(sa_handler, &act->sa_handler) ||
|
||||
__get_user(sa_restorer, &act->sa_restorer) ||
|
||||
__get_user(new_ka.sa.sa_flags, &act->sa_flags) ||
|
||||
__get_user(mask, &act->sa_mask))
|
||||
return -EFAULT;
|
||||
new_ka.sa.sa_handler = (__sighandler_t) sa_handler;
|
||||
new_ka.sa.sa_restorer = (void (*)(void)) sa_restorer;
|
||||
siginitset(&new_ka.sa.sa_mask, mask);
|
||||
}
|
||||
|
||||
ret = do_sigaction(sig, act ? &new_ka : NULL, oact ? &old_ka : NULL);
|
||||
|
||||
if (!ret && oact) {
|
||||
sa_handler = (unsigned long) old_ka.sa.sa_handler;
|
||||
sa_restorer = (unsigned long) old_ka.sa.sa_restorer;
|
||||
if (!access_ok(VERIFY_WRITE, oact, sizeof(*oact)) ||
|
||||
__put_user(sa_handler, &oact->sa_handler) ||
|
||||
__put_user(sa_restorer, &oact->sa_restorer) ||
|
||||
__put_user(old_ka.sa.sa_flags, &oact->sa_flags) ||
|
||||
__put_user(old_ka.sa.sa_mask.sig[0], &oact->sa_mask))
|
||||
return -EFAULT;
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int save_sigregs32(struct pt_regs *regs, _sigregs32 __user *sregs)
|
||||
{
|
||||
_s390_regs_common32 regs32;
|
||||
|
@ -230,7 +230,7 @@ ENTRY(sys32_sigaction_wrapper)
|
||||
lgfr %r2,%r2 # int
|
||||
llgtr %r3,%r3 # const struct old_sigaction *
|
||||
llgtr %r4,%r4 # struct old_sigaction32 *
|
||||
jg sys32_sigaction # branch to system call
|
||||
jg compat_sys_sigaction # branch to system call
|
||||
|
||||
ENTRY(sys32_setreuid16_wrapper)
|
||||
llgfr %r2,%r2 # __kernel_old_uid_emu31_t
|
||||
|
@ -73,8 +73,6 @@ long sys_s390_fadvise64(int fd, u32 offset_high, u32 offset_low,
|
||||
long sys_s390_fadvise64_64(struct fadvise64_64_args __user *args);
|
||||
long sys_s390_fallocate(int fd, int mode, loff_t offset, u32 len_high,
|
||||
u32 len_low);
|
||||
long sys_sigaction(int sig, const struct old_sigaction __user *act,
|
||||
struct old_sigaction __user *oact);
|
||||
long sys_sigreturn(void);
|
||||
long sys_rt_sigreturn(void);
|
||||
long sys32_sigreturn(void);
|
||||
|
@ -48,37 +48,6 @@ typedef struct
|
||||
struct ucontext uc;
|
||||
} rt_sigframe;
|
||||
|
||||
SYSCALL_DEFINE3(sigaction, int, sig, const struct old_sigaction __user *, act,
|
||||
struct old_sigaction __user *, oact)
|
||||
{
|
||||
struct k_sigaction new_ka, old_ka;
|
||||
int ret;
|
||||
|
||||
if (act) {
|
||||
old_sigset_t mask;
|
||||
if (!access_ok(VERIFY_READ, act, sizeof(*act)) ||
|
||||
__get_user(new_ka.sa.sa_handler, &act->sa_handler) ||
|
||||
__get_user(new_ka.sa.sa_restorer, &act->sa_restorer) ||
|
||||
__get_user(new_ka.sa.sa_flags, &act->sa_flags) ||
|
||||
__get_user(mask, &act->sa_mask))
|
||||
return -EFAULT;
|
||||
siginitset(&new_ka.sa.sa_mask, mask);
|
||||
}
|
||||
|
||||
ret = do_sigaction(sig, act ? &new_ka : NULL, oact ? &old_ka : NULL);
|
||||
|
||||
if (!ret && oact) {
|
||||
if (!access_ok(VERIFY_WRITE, oact, sizeof(*oact)) ||
|
||||
__put_user(old_ka.sa.sa_handler, &oact->sa_handler) ||
|
||||
__put_user(old_ka.sa.sa_restorer, &oact->sa_restorer) ||
|
||||
__put_user(old_ka.sa.sa_flags, &oact->sa_flags) ||
|
||||
__put_user(old_ka.sa.sa_mask.sig[0], &oact->sa_mask))
|
||||
return -EFAULT;
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
/* Returns non-zero on fault. */
|
||||
static int save_sigregs(struct pt_regs *regs, _sigregs __user *sregs)
|
||||
{
|
||||
|
Loading…
Reference in New Issue
Block a user