[PARISC] fix sys_rt_sigqueueinfo
authorKyle McMartin <kyle@athena.road.mcmartin.ca>
Fri, 9 Feb 2007 00:38:54 +0000 (19:38 -0500)
committerKyle McMartin <kyle@athena.road.mcmartin.ca>
Sat, 17 Feb 2007 06:19:59 +0000 (01:19 -0500)
the parisc affecting portion of the patch was inadvertantly
reverted a while ago.

Signed-off-by: Kyle McMartin <kyle@parisc-linux.org>
arch/parisc/kernel/signal32.c
arch/parisc/kernel/syscall_table.S

index a6b4231cafa10ece6e0595f3e06f144cdc20b0dd..2cbb4af15a19b1e65ea0cc331c56b97a9e4451c6 100644 (file)
@@ -1,6 +1,8 @@
 /*    Signal support for 32-bit kernel builds
  *
  *    Copyright (C) 2001 Matthew Wilcox <willy at parisc-linux.org>
+ *    Copyright (C) 2006 Kyle McMartin <kyle at parisc-linux.org>
+ *
  *    Code was mostly borrowed from kernel/signal.c.
  *    See kernel/signal.c for additional Copyrights.
  *
@@ -498,3 +500,22 @@ copy_siginfo_to_user32 (compat_siginfo_t __user *to, siginfo_t *from)
        }
        return err;
 }
+
+asmlinkage long compat_sys_rt_sigqueueinfo(int pid, int sig,
+       struct compat_siginfo __user *uinfo)
+{
+       siginfo_t info;
+
+       if (copy_siginfo_from_user32(&info, uinfo))
+               return -EFAULT;
+
+       /* Not even root can pretend to send signals from the kernel.
+          Nor can they impersonate a kill(), which adds source info.  */
+       if (info.si_code >= 0)
+               return -EPERM;
+       info.si_signo = sig;
+
+       /* POSIX.1b doesn't mention process groups.  */
+       return kill_proc_info(sig, &info, pid);
+}
+
index 7651e54ddbbb61bccba715a914a2ddc3a9014b8f..511466611e96302b99e17c9264c19a96a700d6c0 100644 (file)
         * to worry about faulting trying to copy in a larger 64-bit
         * struct from a 32-bit user-space app.
         */
-       ENTRY_SAME(rt_sigqueueinfo)
+       ENTRY_COMP(rt_sigqueueinfo)
        ENTRY_COMP(rt_sigsuspend)
        ENTRY_SAME(chown)               /* 180 */
        /* setsockopt() used by iptables: SO_SET_REPLACE/SO_SET_ADD_COUNTERS */