Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 7eddd99c authored by Al Viro's avatar Al Viro
Browse files

s390: switch to generic old sigaction()



Signed-off-by: default avatarAl Viro <viro@zeniv.linux.org.uk>
parent f036b943
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -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
+0 −7
Original line number Diff line number Diff line
@@ -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
+0 −11
Original line number Diff line number Diff line
@@ -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 */
+0 −37
Original line number Diff line number Diff line
@@ -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;
+1 −1
Original line number Diff line number Diff line
@@ -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
Loading