vserver 1.9.5.x5
[linux-2.6.git] / arch / s390 / kernel / compat_signal.c
index f29bcb8..b728e02 100644 (file)
@@ -48,17 +48,17 @@ typedef struct
 {
        __u8 callee_used_stack[__SIGNAL_FRAMESIZE32];
        __u8 retcode[S390_SYSCALL_SIZE];
-       struct siginfo32 info;
+       compat_siginfo_t info;
        struct ucontext32 uc;
 } rt_sigframe32;
 
 asmlinkage int FASTCALL(do_signal(struct pt_regs *regs, sigset_t *oldset));
 
-int copy_siginfo_to_user32(siginfo_t32 __user *to, siginfo_t *from)
+int copy_siginfo_to_user32(compat_siginfo_t __user *to, siginfo_t *from)
 {
        int err;
 
-       if (!access_ok (VERIFY_WRITE, to, sizeof(siginfo_t32)))
+       if (!access_ok (VERIFY_WRITE, to, sizeof(compat_siginfo_t)))
                return -EFAULT;
 
        /* If you change siginfo_t structure, please be sure
@@ -95,10 +95,14 @@ int copy_siginfo_to_user32(siginfo_t32 __user *to, siginfo_t *from)
                                          &to->si_addr);
                        break;
                case __SI_POLL >> 16:
-               case __SI_TIMER >> 16:
                        err |= __put_user(from->si_band, &to->si_band);
                        err |= __put_user(from->si_fd, &to->si_fd);
                        break;
+               case __SI_TIMER >> 16:
+                       err |= __put_user(from->si_tid, &to->si_tid);
+                       err |= __put_user(from->si_overrun, &to->si_overrun);
+                       err |= __put_user(from->si_int, &to->si_int);
+                       break;
                default:
                        break;
                }
@@ -106,12 +110,12 @@ int copy_siginfo_to_user32(siginfo_t32 __user *to, siginfo_t *from)
        return err;
 }
 
-int copy_siginfo_from_user32(siginfo_t *to, siginfo_t32 __user *from)
+int copy_siginfo_from_user32(siginfo_t *to, compat_siginfo_t __user *from)
 {
        int err;
        u32 tmp;
 
-       if (!access_ok (VERIFY_READ, from, sizeof(siginfo_t32)))
+       if (!access_ok (VERIFY_READ, from, sizeof(compat_siginfo_t)))
                return -EFAULT;
 
        err = __get_user(to->si_signo, &from->si_signo);
@@ -142,10 +146,14 @@ int copy_siginfo_from_user32(siginfo_t *to, siginfo_t32 __user *from)
                        to->si_addr = (void *)(u64) (tmp & PSW32_ADDR_INSN);
                        break;
                case __SI_POLL >> 16:
-               case __SI_TIMER >> 16:
                        err |= __get_user(to->si_band, &from->si_band);
                        err |= __get_user(to->si_fd, &from->si_fd);
                        break;
+               case __SI_TIMER >> 16:
+                       err |= __get_user(to->si_tid, &from->si_tid);
+                       err |= __get_user(to->si_overrun, &from->si_overrun);
+                       err |= __get_user(to->si_int, &from->si_int);
+                       break;
                default:
                        break;
                }