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

Commit b0f95824 authored by Al Viro's avatar Al Viro
Browse files

parisc: switch to generic compat rt_sigaction()



Signed-off-by: default avatarAl Viro <viro@zeniv.linux.org.uk>
parent d914b8dc
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -24,6 +24,7 @@ config PARISC
	select MODULES_USE_ELF_RELA
	select CLONE_BACKWARDS
	select GENERIC_SIGALTSTACK
	select GENERIC_COMPAT_RT_SIGACTION
	select GENERIC_COMPAT_RT_SIGQUEUEINFO
	select GENERIC_COMPAT_RT_SIGPROCMASK
	select GENERIC_COMPAT_RT_SIGPENDING
+0 −28
Original line number Diff line number Diff line
@@ -60,34 +60,6 @@ sigset_64to32(compat_sigset_t *s32, sigset_t *s64)
	s32->sig[1] = (s64->sig[0] >> 32) & 0xffffffffUL;
}

long
sys32_rt_sigaction(int sig, const struct sigaction32 __user *act, struct sigaction32 __user *oact,
                 size_t sigsetsize)
{
	struct k_sigaction32 new_sa32, old_sa32;
	struct k_sigaction new_sa, old_sa;
	int ret = -EINVAL;

	if (act) {
		if (copy_from_user(&new_sa32.sa, act, sizeof new_sa32.sa))
			return -EFAULT;
		new_sa.sa.sa_handler = (__sighandler_t)(unsigned long)new_sa32.sa.sa_handler;
		new_sa.sa.sa_flags = new_sa32.sa.sa_flags;
		sigset_32to64(&new_sa.sa.sa_mask, &new_sa32.sa.sa_mask);
	}

	ret = do_sigaction(sig, act ? &new_sa : NULL, oact ? &old_sa : NULL);

	if (!ret && oact) {
		sigset_64to32(&old_sa32.sa.sa_mask, &old_sa.sa.sa_mask);
		old_sa32.sa.sa_flags = old_sa.sa.sa_flags;
		old_sa32.sa.sa_handler = (__sighandler_t32)(unsigned long)old_sa.sa.sa_handler;
		if (copy_to_user(oact, &old_sa32.sa, sizeof old_sa32.sa))
			return -EFAULT;
	}
	return ret;
}

long
restore_sigcontext32(struct compat_sigcontext __user *sc, struct compat_regfile __user * rf,
		struct pt_regs *regs)
+0 −15
Original line number Diff line number Diff line
@@ -21,17 +21,6 @@

#include <linux/compat.h>

typedef compat_uptr_t compat_sighandler_t;

/* Most things should be clean enough to redefine this at will, if care
   is taken to make libc match.  */

struct compat_sigaction {
        compat_sighandler_t sa_handler;
        compat_uint_t sa_flags;
        compat_sigset_t sa_mask;               /* mask last for extensibility */
};

/* 32-bit ucontext as seen from an 64-bit kernel */
struct compat_ucontext {
        compat_uint_t uc_flags;
@@ -45,10 +34,6 @@ struct compat_ucontext {

/* ELF32 signal handling */

struct k_sigaction32 {
	struct compat_sigaction sa;
};

int copy_siginfo_to_user32 (compat_siginfo_t __user *to, siginfo_t *from);
int copy_siginfo_from_user32 (siginfo_t *to, compat_siginfo_t __user *from);

+0 −12
Original line number Diff line number Diff line
@@ -33,16 +33,4 @@
    set_fs (old_fs); \
}

#ifdef CONFIG_COMPAT

typedef __u32 __sighandler_t32;

struct sigaction32 {
	__sighandler_t32 sa_handler;
	unsigned int sa_flags;
	compat_sigset_t sa_mask;		/* mask last for extensibility */
};

#endif

#endif
+1 −1
Original line number Diff line number Diff line
@@ -265,7 +265,7 @@
	ENTRY_SAME(prctl)
	/* signals need a careful review */
	ENTRY_SAME(rt_sigreturn_wrapper)
	ENTRY_DIFF(rt_sigaction)
	ENTRY_COMP(rt_sigaction)
	ENTRY_COMP(rt_sigprocmask)	/* 175 */
	ENTRY_COMP(rt_sigpending)
	ENTRY_COMP(rt_sigtimedwait)