x86: bitops asm constraint fixes
[sfrench/cifs-2.6.git] / fs / signalfd.c
index aefb0be07942d735de747ad8697834368f8a907a..8ead0db359339ca7f5986e3b89ff3b245938557e 100644 (file)
@@ -27,6 +27,7 @@
 #include <linux/list.h>
 #include <linux/anon_inodes.h>
 #include <linux/signalfd.h>
+#include <linux/syscalls.h>
 
 struct signalfd_ctx {
        sigset_t sigmask;
@@ -66,7 +67,7 @@ static int signalfd_copyinfo(struct signalfd_siginfo __user *uinfo,
        BUILD_BUG_ON(sizeof(struct signalfd_siginfo) != 128);
 
        /*
-        * Unused memebers should be zero ...
+        * Unused members should be zero ...
         */
        err = __clear_user(uinfo, sizeof(*uinfo));
 
@@ -74,45 +75,50 @@ static int signalfd_copyinfo(struct signalfd_siginfo __user *uinfo,
         * If you change siginfo_t structure, please be sure
         * this code is fixed accordingly.
         */
-       err |= __put_user(kinfo->si_signo, &uinfo->signo);
-       err |= __put_user(kinfo->si_errno, &uinfo->err);
-       err |= __put_user((short)kinfo->si_code, &uinfo->code);
+       err |= __put_user(kinfo->si_signo, &uinfo->ssi_signo);
+       err |= __put_user(kinfo->si_errno, &uinfo->ssi_errno);
+       err |= __put_user((short) kinfo->si_code, &uinfo->ssi_code);
        switch (kinfo->si_code & __SI_MASK) {
        case __SI_KILL:
-               err |= __put_user(kinfo->si_pid, &uinfo->pid);
-               err |= __put_user(kinfo->si_uid, &uinfo->uid);
+               err |= __put_user(kinfo->si_pid, &uinfo->ssi_pid);
+               err |= __put_user(kinfo->si_uid, &uinfo->ssi_uid);
                break;
        case __SI_TIMER:
-                err |= __put_user(kinfo->si_tid, &uinfo->tid);
-                err |= __put_user(kinfo->si_overrun, &uinfo->overrun);
-                err |= __put_user((long)kinfo->si_ptr, &uinfo->svptr);
+                err |= __put_user(kinfo->si_tid, &uinfo->ssi_tid);
+                err |= __put_user(kinfo->si_overrun, &uinfo->ssi_overrun);
+                err |= __put_user((long) kinfo->si_ptr, &uinfo->ssi_ptr);
                break;
        case __SI_POLL:
-               err |= __put_user(kinfo->si_band, &uinfo->band);
-               err |= __put_user(kinfo->si_fd, &uinfo->fd);
+               err |= __put_user(kinfo->si_band, &uinfo->ssi_band);
+               err |= __put_user(kinfo->si_fd, &uinfo->ssi_fd);
                break;
        case __SI_FAULT:
-               err |= __put_user((long)kinfo->si_addr, &uinfo->addr);
+               err |= __put_user((long) kinfo->si_addr, &uinfo->ssi_addr);
 #ifdef __ARCH_SI_TRAPNO
-               err |= __put_user(kinfo->si_trapno, &uinfo->trapno);
+               err |= __put_user(kinfo->si_trapno, &uinfo->ssi_trapno);
 #endif
                break;
        case __SI_CHLD:
-               err |= __put_user(kinfo->si_pid, &uinfo->pid);
-               err |= __put_user(kinfo->si_uid, &uinfo->uid);
-               err |= __put_user(kinfo->si_status, &uinfo->status);
-               err |= __put_user(kinfo->si_utime, &uinfo->utime);
-               err |= __put_user(kinfo->si_stime, &uinfo->stime);
+               err |= __put_user(kinfo->si_pid, &uinfo->ssi_pid);
+               err |= __put_user(kinfo->si_uid, &uinfo->ssi_uid);
+               err |= __put_user(kinfo->si_status, &uinfo->ssi_status);
+               err |= __put_user(kinfo->si_utime, &uinfo->ssi_utime);
+               err |= __put_user(kinfo->si_stime, &uinfo->ssi_stime);
                break;
        case __SI_RT: /* This is not generated by the kernel as of now. */
        case __SI_MESGQ: /* But this is */
-               err |= __put_user(kinfo->si_pid, &uinfo->pid);
-               err |= __put_user(kinfo->si_uid, &uinfo->uid);
-               err |= __put_user((long)kinfo->si_ptr, &uinfo->svptr);
+               err |= __put_user(kinfo->si_pid, &uinfo->ssi_pid);
+               err |= __put_user(kinfo->si_uid, &uinfo->ssi_uid);
+               err |= __put_user((long) kinfo->si_ptr, &uinfo->ssi_ptr);
                break;
-       default: /* this is just in case for now ... */
-               err |= __put_user(kinfo->si_pid, &uinfo->pid);
-               err |= __put_user(kinfo->si_uid, &uinfo->uid);
+       default:
+               /*
+                * This case catches also the signals queued by sigqueue().
+                */
+               err |= __put_user(kinfo->si_pid, &uinfo->ssi_pid);
+               err |= __put_user(kinfo->si_uid, &uinfo->ssi_uid);
+               err |= __put_user((long) kinfo->si_ptr, &uinfo->ssi_ptr);
+               err |= __put_user(kinfo->si_int, &uinfo->ssi_int);
                break;
        }